中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行Ghostscript SAFER沙箱繞過漏洞的分析

發布時間:2022-01-15 10:56:53 來源:億速云 閱讀:233 作者:柒染 欄目:網絡安全

這篇文章跟大家分析一下“如何進行Ghostscript SAFER沙箱繞過漏洞的分析”。內容詳細易懂,對“如何進行Ghostscript SAFER沙箱繞過漏洞的分析”感興趣的朋友可以跟著小編的思路慢慢深入來閱讀一下,希望閱讀后能夠對大家有所幫助。下面跟著小編一起深入學習“如何進行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文件:

如何進行Ghostscript SAFER沙箱繞過漏洞的分析

加上-dSAFER參數后,出現invalidfileaccess錯誤:

如何進行Ghostscript SAFER沙箱繞過漏洞的分析

漏洞驗證

多個PostScript操作可以繞過-dSAFER提供的保護,這可以允許攻擊者使用任意參數執行命令。

首先對PoC進行測試,在開啟了安全沙箱的情況下(-dSAFER),可以成功執行任意shell命令:

如何進行Ghostscript SAFER沙箱繞過漏洞的分析如何進行Ghostscript SAFER沙箱繞過漏洞的分析

使用ImageMagick工具中的convert命令測試PoC,可以看到ImageMagick同樣受到影響:

如何進行Ghostscript SAFER沙箱繞過漏洞的分析

在源碼目錄下使用命令“grep -r dSAFER”找到和該選項相關的操作,看到下面這段注釋中說明了該選項具體功能——將LockSafetyParams設置為True。

如何進行Ghostscript SAFER沙箱繞過漏洞的分析

再使用grep查看和LockSafetyParams相關操作,通過注釋可知,這個布爾類型變的量值為True時,可以防止某些不安全的操作。同時在文件psi/zdevice2.c的第269行,該變量被設置為了False,且僅有此處修改了LockSafetyParams的值為False,因此可以猜測:PoC中某條PostScript語句解析時導致了這個改變。

如何進行Ghostscript SAFER沙箱繞過漏洞的分析

調試分析

接下來使用GDB進行驗證,首先設置好程序參數:

set args -q -sDEVICE=ppmraw -dSAFER -sOutputFile=/dev/null

根據前面grep的輸出,找到“dev_old->LockSafetyParams = false; ”語句在函數restore_page_device()中,并在此處下斷,運行程序輸入PoC:

設置成像區域——legal(a4、b5、letter等也可以):

如何進行Ghostscript SAFER沙箱繞過漏洞的分析

接著輸入{null restore} stopped {pop} if,程序中斷在此處: 

如何進行Ghostscript SAFER沙箱繞過漏洞的分析

再對dev_old->LockSafetyParams變量設置觀察點,繼續運行程序,和預想的一樣,LockSafetyParams的值在這里被改變了。 

如何進行Ghostscript SAFER沙箱繞過漏洞的分析

查看棧回溯,發現當前函數在一系列帶有“interpret”的函數中被調用,從名稱推斷這些函數用于解析PostScript語句。

如何進行Ghostscript SAFER沙箱繞過漏洞的分析

這里我們在#2處下斷,觀察到了解釋器處理stopped、null、restore等關鍵字的過程,至此繞過SAFER沙箱過程就逐漸清晰了。

如何進行Ghostscript SAFER沙箱繞過漏洞的分析

如何進行Ghostscript SAFER沙箱繞過漏洞的分析

如何進行Ghostscript 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 SAFER沙箱繞過漏洞的分析

值得一提的是,GhostScript的官方文檔中提到了restore操作符存在導致繞過SAFER模式的風險。

如何進行Ghostscript SAFER沙箱繞過漏洞的分析

漏洞利用

OutputFile參數用于設置輸出文件名,另外在Linux/Unix上,還可以通過設備%pipe%將輸出發送到管道(Windows中也可以,需要使用兩個%)。例如,要將輸出通過管道傳輸到lpr可以使用:/OutputFile (%pipe%lpr)

查閱官方文檔可知,%pipe%功能由popen函數支持,在調試中也能確認這一點: 

如何進行Ghostscript SAFER沙箱繞過漏洞的分析

如何進行Ghostscript SAFER沙箱繞過漏洞的分析

popen()函數通過創建管道的方式,調用fork()啟動一個子進程,并將傳入popen()的命令送到/bin/sh以-c參數執行。可以通過在此處注入命令實現漏洞利用,如下圖中演示的那樣,另外將PostScript編碼到圖像中,可以在使用GhostScript的Web服務器上執行任意指令(例如服務器使用ImageMagick處理上傳的圖像時)。

如何進行Ghostscript SAFER沙箱繞過漏洞的分析

如何進行Ghostscript SAFER沙箱繞過漏洞的分析

修復建議

截至筆者分析該漏洞時,官方還沒修復該漏洞。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”/>

關于如何進行Ghostscript SAFER沙箱繞過漏洞的分析就分享到這里啦,希望上述內容能夠讓大家有所提升。如果想要學習更多知識,請大家多多留意小編的更新。謝謝大家關注一下億速云網站!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

寿阳县| 康乐县| 铜川市| 石林| 息烽县| 新密市| 高淳县| 通州区| 内丘县| 巴东县| 乌苏市| 濮阳县| 山阳县| 南京市| 陆河县| 枣强县| 新乡市| 乐业县| 张掖市| 阿克苏市| 苍南县| 竹溪县| 绥阳县| 高陵县| 徐水县| 伽师县| 龙里县| 肇庆市| 潮州市| 密山市| 阿图什市| 玉田县| 镇原县| 孝感市| 乌海市| 铜川市| 含山县| 扎鲁特旗| 延川县| 金门县| 富源县|