5

我有一个显示用户提交的图像的网站。我担心一些聪明人上传的图片可能会利用浏览器渲染引擎中的一些 0-day 漏洞。此外,我想清除元数据的图像(如 EXIF 数据),并尝试以无损方式进一步压缩它们(PNG 和 JPEG 有几个这样的命令行实用程序)。

考虑到上述情况,我的问题如下:是否有一些 C/C++ 库可以满足上述情况?即使解析->清除->清理->压缩->写入的完整管道 在任何单个库中都不可用,我是否至少可以在其中实现 解析->清除->清理->写入管道(不压缩)支持 JPEG/PNG/GIF 的库?

4

2 回答 2

6

您的要求无法满足:如果您使用的图像读取库之一存在 0-day 漏洞,那么您的代码在尝试解析和清理传入文件时可能会被利用。通过在接收到图像后立即进行“预清理”,您只会更早地而不是更晚地移动利用点。

唯一有帮助的是在沙箱中解析和清理传入的图像,这样至少,如果存在漏洞,它将包含在沙箱中。沙箱可以是一个单独的进程,在chroot环境(或虚拟机,对于非常偏执的人)中作为非特权用户运行,其接口仅包含字节流输入和经过清理的图像输出。

清理本身可以很简单,例如使用ImageMagick打开图像,将其解码为光栅,然后重新编码并以标准格式(例如 PNG 或 JPEG)发出它们。请注意,如果输入和输出都是有损格式(如 JPEG),则此转换将是有损的。

于 2012-04-17T18:28:52.920 回答
1

我知道,我迟到了 9 年,但是...

您可以使用类似于 Qubes OS 中的 PDF sanitizer的想法,它将 PDF 复制到一次性虚拟机,运行 PDF 解析器,将 PDF 转换为基本上 TIFF 图像,这些图像被发送回原始 VM 并在那里重新组合成 PDF . 通过这种方式,您可以将攻击面减少到 TIFF 文件。这是很小的。

Qubes PDF转换器示意图 (取自这篇文章的图片:https ://blog.invisiblethings.org/2013/02/21/converting-untrusted-pdfs-into-trusted.html )

如果该 PDF 中的特定解析器确实存在 0-day 漏洞,它会破坏一次性 VM,但由于原始 VM 只接受有效的 TIFF,并且一旦处理完成,一次性 VM 就会被丢弃,这是没有意义的. 当然,除非攻击者手头有 Xen 漏洞利用来突破一次性 VM,或者使用 Spectre 类型的全内存读取原语加上侧通道将数据泄漏到他们的机器。由于一次性虚拟机没有连接到互联网或没有分配任何音频硬件,这归结为通过调制 CPU 功耗来产生电磁干扰,因此攻击者可能需要一个大天线和一个靠近服务器的位置。

这将是一次代价高昂的攻击。

于 2021-03-16T22:56:08.683 回答