關於Ghostscript SAFER沙箱繞過漏洞的分析
前言
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 <= 9.23(全版本、全平臺),目前官方暫未釋出更新。
漏洞細節
Ghostscript安全模式(SAFER mode)
Ghostscript包含一個可選的-dSAFER選項,設定該選項啟動安全沙箱模式後,與檔案相關的運算子將被禁止,具體作用有如下:
(1)禁用deletefile和renamefile運算子,能夠開啟管道命令(%pipe%cmd),同時只能開啟stdout和stderr進行寫入
(2)禁用讀取stdin以外的檔案
(3)設定裝置的LockSafetyParams引數為True,從而防止使用OutputFile引數寫入檔案
(4)阻止/GenericResourceDir、/FontResourceDir、/SystemParamsPassword或/StartJobPassword被更改
下面是關於該選項的一個簡單演示。
未加上-dSAFER引數時,成功讀取了/etc/passwd檔案:
加上-dSAFER引數後,出現invalidfileaccess錯誤:
漏洞驗證
多個PostScript操作可以繞過-dSAFER提供的保護,這可以允許攻擊者使用任意引數執行命令。
首先對PoC進行測試,在開啟了安全沙箱的情況下(-dSAFER),可以成功執行任意shell命令:
使用ImageMagick工具中的convert命令測試PoC,可以看到ImageMagick同樣受到影響:
在原始碼目錄下使用命令“grep -r dSAFER”找到和該選項相關的操作,看到下面這段註釋中說明了該選項具體功能——將LockSafetyParams設定為True。
再使用grep檢視和LockSafetyParams相關操作,透過註釋可知,這個布林型別變的量值為True時,可以防止某些不安全的操作。同時在檔案psi/zdevice2.c的第269行,該變數被設定為了False,且僅有此處修改了LockSafetyParams的值為False,因此可以猜測:PoC中某條PostScript語句解析時導致了這個改變。
除錯分析
接下來使用GDB進行驗證,首先設定好程式引數:
set args -q -sDEVICE=ppmraw -dSAFER -sOutputFile=/dev/null
根據前面grep的輸出,找到“dev_old->LockSafetyParams = false; ”語句在函式restore_page_device()中,並在此處下斷,執行程式輸入PoC:
設定成像區域——legal(a4、b5、letter等也可以):
接著輸入{null restore} stopped {pop} if,程式中斷在此處:
再對dev_old->LockSafetyParams變數設定觀察點,繼續執行程式,和預想的一樣,LockSafetyParams的值在這裡被改變了。
檢視棧回溯,發現當前函式在一系列帶有“interpret”的函式中被呼叫,從名稱推斷這些函式用於解析PostScript語句。
這裡我們在#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 domain =“coder”rights =“none”pattern =“PS”/> <policy domain =“coder”rights =“none”pattern =“EPS”/> <policy domain =“coder”rights =“none”pattern =“PDF”/> <policy domain =“coder”rights =“none”pattern =“XPS”/>
參考資料
[1]
[2] PostScript Language Reference(third edition)
[3]
[5]
[6]
本文轉載自:“ FreeBuf.COM ”,原文作者: alphalab
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31510736/viewspace-2213371/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 漏洞分析 | Dubbo2.7.7反序列化漏洞繞過分析
- 關於隱藏Selenium繞過檢測
- 網站漏洞檢測解析繞過上傳漏洞網站
- 檔案包含漏洞(繞過姿勢)
- 關於OpenSSL“心臟出血”漏洞的分析
- 檔案上傳漏洞(繞過姿勢)
- 關於libStagefright系列漏洞分析
- 關於HttpClient繞過SSL認證以及NTLM認證HTTPclient
- Cisco ASA Software遠端認證繞過漏洞
- 文字檔案上傳漏洞[任意.繞過.解析]
- Cisco接入點Web介面認證繞過漏洞Web
- XWorkParameterInterceptor類繞過安全限制漏洞-解決2
- 用友-NC-Cloud存在控制檯繞過漏洞Cloud
- 網站漏洞修復服務商對繞過認證漏洞的探討網站
- 網站漏洞修復服務商關於越權漏洞分析網站
- js繞過-前端加密繞過JS前端加密
- 關於httpclient 請求https (如何繞過證書驗證)HTTPclient
- Oracle資料庫訪問限制繞過漏洞 解決Oracle資料庫
- MySQL許可權提升及安全限制繞過漏洞(轉)MySql
- 網路攝像頭登入繞過及多個RCE漏洞及資料分析報告
- CDN相關知識及CDN繞過
- iOS 8.1.2 越獄過程詳解及相關漏洞分析iOS
- 駭客繞過防火牆利用Citrix漏洞入侵美國人口普查局防火牆
- 新iPhone漏洞,可繞過密碼訪問聯絡人和照片iPhone密碼
- 關於systemui wifi圖示更新過程分析SystemUIWiFi
- 24:WEB漏洞-檔案上傳之WAF繞過及安全修復Web
- 關於PHPMailer漏洞情況的通報PHPAI
- 【檔案上傳繞過】路徑拼接問題導致上傳漏洞
- 微軟Cortana現漏洞:可繞過鎖屏密碼直接訪問網站微軟密碼網站
- Shiro-認證繞過漏洞(CVE-2020-1957)
- 避坑指南:關於SPDK問題分析過程
- 繞過Snoopy的記錄功能OOP
- iOS Jailbreak Principles - Undecimus 分析(四)繞過 A12 的 PAC 實現 kexeciOSAI
- 使用HTTP頭進行403繞過 速率繞過 Rate Limit BypassHTTPMIT
- md5繞過
- 重大漏洞:Bitlocker成擺設,多款固態硬碟硬體加密均可被繞過硬碟加密
- 360護心鏡指令碼分析及N種繞過方式指令碼
- 存在至少10年!主動利用的漏洞繞過數百萬路由器上的身份驗證路由器