PDF 的 `/Filespec` 类型是否允许远程文件访问?

信息安全 开发 pdf
2021-09-12 06:06:02

我已经阅读了 PDF 1.7 规范 7.11.1(好吧,不是所有规范,而是其中的一部分),并且我看到您拥有 Adob​​e 所谓的/Filespec类型对象。

据我所知,这意味着 PDF 在打开 PDF 时可以引用本地文件(甚至是使用 URI 方案的远程文件)。这将是攻击我负责的某些服务器的一种非常巧妙的方法,因为此类服务器接受用户上传的 PDF,使用 wkhtml/tcpdf/jasper 打开它们以在该 PDF 中进行更改,然后将此 PDF 重新发送给用户. 因此,如果用户上传的 PDF 包含对 的文件引用/dev/random,并且如果该引用被用作 PDF 的页面内容,那么它会打开读取任意服务器文件内容的漏洞吗?

我想测试一下,但我无法利用这种 PDF 漏洞:打开我在实验室伪造的 PDF 时(即:不是服务器,只是一个基本的 PDF 阅读器),然后没有内容显示(并且 PDF 是认为损坏)。

那么您是否有一些带有工作文件参考的此类 PDF 示例(这样我可以测试 PDF 处理器是否容易受到它的影响)?或者有任何参考说明这些/Filespec不能用于读取任意文件的内容(因此无需测试 PDF 处理器)?

1个回答

我不确定你怀疑的可行性。能够处理 pdf 文件的库可能不需要处理此类 Filespec 条目来执行其工作(例如,Filespec - 如果不是嵌入式文件 - 可能指的是字体,仅在渲染时使用)。而且我怀疑如果没有明确启用此类功能,任何库都不会启用外部文件的读取,因为它可能会导致 - 正如您所注意到的那样 - 令人讨厌的惊喜。

但是,如果有疑问,并且考虑到这些是处理简单格式的复杂程序,我会应用预防原则并在沙箱/chroot/firejail/docker 容器中处理它们,所以即使处理 pdf 的程序可以被引导打开任意文件,他们实际上无法打开任何敏感文件,只能打开沙箱中包含的标准文件。