报告编号:B6-2019-012401
报告来源:360-CERT
报告作者:360-CERT
更新日期:2019-01-24
0x00 漏洞背景
2019年1月23日晚,Artifex官方在ghostscriptf的master分支上提交合并了多达6处的修复。旨在修复 CVE-2019-6116 漏洞,该漏洞由 Google 安全研究员 taviso 于2018年12月3日提交。该漏洞可以直接绕过 ghostscript 的安全沙箱,导致攻击者可以执行任意命令/读取任意文件。
ghostscript应用广泛,ImageMagick、python-matplotlib、libmagick 等图像处理应用均有引用。
0x01 漏洞详情
在之前的漏洞中 ghostscript 吸取经验,针对一些特殊并且具有强大功能的函数做了一层封装。
这层封装就是executeonly
这个标记, 以及 odef
这个伪运算符。
附带executeonly
这个标记的效果是 PostScript 将不会允许引用该受保护的函数。
附带odef
这个运算符的效果是 PostScript 错误处理程序不会从这个运算往上继续检索堆栈。
如果当前运算符(或伪运算符)遇到异常或者出错停止,就不会暴露任何栈上内容。
但是 taviso 依旧通过发现在这些函数中,如果存在像判断这样的状态,那么上面的保护将失去应有的效果。
导致 ghostscript 可以像以往一样从栈中获得危险的函数以及引用他们而造成漏洞。
taviso 给出了一处可以利用的代码片段
1123 { 1124 currentglobal pdfdict gcheck .setglobal 1125 pdfdict /.Qqwarning_issued //true .forceput 1126 .setglobal 1127 pdfformaterror 1128 } ifelse
$ gs -dSAFER -f ghostscript-926-forceput.ps GPL Ghostscript 9.26 (2018-11-20) Copyright (C) 2018 Artifex Software, Inc. All rights reserved. This software comes with NO WARRANTY: see the file PUBLIC for details. Stage 0: PDFfile Stage 1: q Stage 3: oget Stage 4: pdfemptycount Stage 5: gput Stage 6: resolvestream Stage 7: pdfopdict Stage 8: .pdfruncontext Stage 9: pdfdict Stage 10: /typecheck #1Stage 10: /typecheck #2Stage 11: Exploitation... Should now have complete control over ghostscript, attempting to read /etc/passwd... (root:x:0:0:root:/root:/bin/bash) Attempting to execute a shellcommand...uid=1000(taviso) gid=1000(primarygroup) groups=1000(primarygroup),4(adm),20(dialout),24(cdrom),25(floppy),44(video),46(plugdev),999(logindev)
0x02 漏洞验证
0x03 影响版本
ghostscript 尚无 release 版本发布
commit c47512e5e638d903d69925f7ebab4de2aa3f481f 之前的版本均受到影响
ghostscript作为图像处理格式转换的底层应用。
漏洞导致所有引用ghostscript的上游应用受到影响。 涉及但不限于:
- imagemagick
- libmagick
- graphicsmagick
- gimp
- python-matplotlib
- texlive-core
- texmacs
- latex2html
- latex2rtf 等
0x04 修复建议
建议更新到(c47512e5e638d903d69925f7ebab4de2aa3f481f
)之后的版本,或者直接重新拉取master
分支进行更新
若无法更新可先尝试禁用使用gs解析ps文件
使用ImageMagick,建议修改policy文件(默认位置:/etc/ImageMagick/policy.xml),在 <policymap> 中加入以下<policy>(即禁用 PS、EPS、PDF、XPS coders、PCD):
<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" />
<policy domain="coder" rights="none" pattern="PCD" />
</policymap>
但 taviso 提到 policy 是十分宽松的,可能会存在一些没有提及的格式存在绕过。
360CERT 建议用户及及时进行版本升级,同时对线上涉及图像、pdf等格式的处理的服务进行版本自查。
0x05 时间线
2018-12-03 @taviso提交漏洞
2019-01-23 Artifex官方在主分支上更新补丁
2019-01-23 @taviso对漏洞细节进行公开
2019-01-24 360CERT发布预警
0x06 参考链接
声明:本文来自360CERT,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。