前言
Ghostscript是用來解釋Adobe PostScript語言的軟體。 PostScript語言可用於製圖,並支援PS和PDF之間的互相轉換。目前大多數Linux發行版中都預設安裝,並移植到了Unix、MacOS、Windows等平台,且Ghostscript也被ImagineMagic、Python PIL和各種PDF閱讀器等程式所使用。
漏洞描述
8月21日,Google安全研究員Tavis Ormandy揭露了多個GhostScript的漏洞,透過在圖片中建構惡意PostScript腳本,可以繞過SAFER安全沙箱,從而造成指令執行、檔案讀取、檔案刪除等漏洞,其根本原因是GhostScript解析restore指令時,會暫時將參數LockSafetyParams設定為False,進而關閉SAFER模式。
受影響的系統版本
Ghostscript
漏洞細節
Ghostscript安全模式(SAFER mode)
Ghostscript包含一個可選的-dSAFER選項,設定該選項啟動安全沙箱模式後,與檔案相關的操作符將被禁止,具體作用有如下:
##以下是關於該選項的一個簡單示範。 未加上-dSAFER參數時,成功讀取了/etc/passwd檔案:(1)禁用deletefile和renamefile操作符,能夠開啟管道指令(%pipe%cmd),同時只能開啟stdout和stderr進行寫入
(2)停用讀取stdin以外的檔案
(3)設定裝置的LockSafetyParams參數為True,從而防止使用OutputFile參數寫入檔案
(4)阻止/GenericResourceDir、/FontResourceDir、/SystemParamsPassword或/StartJobPassword被更改
set args -q -sDEVICE=ppmraw -dSAFER -sOutputFile=/dev/null根據前面grep的輸出,找到「dev_old->LockSafetyParams = false; 」語句在函數restore_page_device()中,並在此下斷,運行程式輸入PoC:設定成像區域-legal(a4、b5、letter等也可以):
这里我们在#2处下断,观察到了解释器处理stopped、null、restore等关键字的过程,至此绕过SAFER沙箱过程就逐渐清晰了。
漏洞成因
现在让我们来看看{null restore} stopped {pop} if这条语句是如何绕过SAFER沙箱的。
PostScript是一种“逆波兰式”(Reverse Polish Notation,也称为后缀表达式)的语言。简单来说就是操作数在前,操作符在后。PoC中这条语句是一条典型的PostScript异常处理语句,stopped操作符用于PostScript的异常处理,也就是说stopped执行前面的{}中给出的过程,如果解释器在执行该过程期间出现错误,它将终止该过程并执行stopped操作符之后{}中的过程。
null restore会引起类型检查错误(/typecheck error),同时restore的执行导致LockSafetyParams设置为False,stopped捕获到异常,弹出栈顶元素null,GS继续运行,但此时LockSafetyParams的值还没恢复为True。
值得一提的是,GhostScript的官方文档中提到了restore操作符存在导致绕过SAFER模式的风险。
漏洞利用
OutputFile参数用于设置输出文件名,另外在Linux/Unix上,还可以通过设备%pipe%将输出发送到管道(Windows中也可以,需要使用两个%)。通过管道将输出传输到lpr可以使用以下方式:/OutputFile (%pipe%lpr)
查阅官方文档可知,%pipe%功能由popen函数支持,在调试中也能确认这一点:
popen()函数通过创建管道的方式,调用fork()启动一个子进程,并将传入popen()的命令送到/bin/sh以-c参数执行。可以通过在此处注入命令实现漏洞利用,如下图中演示的那样,另外将PostScript编码到图像中,可以在使用GhostScript的Web服务器上执行任意指令(例如服务器使用ImageMagick处理上传的图像时)。
修复建议
截至笔者分析该漏洞时,官方还没修复该漏洞。Artifex Software,ImageMagick,Redhat,Ubuntu等厂商已声明受到此漏洞影响,其他平台暂时未对此漏洞进行说明,目前临时解决方案如下:
1. 卸载GhostScript;
2. 可在/etc/ImageMagick/policy.xml文件中添加如下代码来禁用PostScript、EPS、PDF以及XPS解码器:
<policy></policy> <policy></policy> <policy></policy> <policy></policy>
以上是如何進行Ghostscript SAFER沙箱繞過漏洞的分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!