\includegraphics 的安全性(输入不受信任)

\includegraphics 的安全性(输入不受信任)

使用包\includegraphics中的命令时graphicx,使用来自你不信任的人的图像是否存在安全隐患?潜在成为对手?

如果你现在想知道为什么有人会这样做,我认为这种情况根本不是那么牵强。我只是想确保,尽管我可能会拍摄一些通过电子邮件收到的图像并将其包含在我的 LaTeX 文档中,但我的计算机不会立即面临被黑客入侵的危险。

当然,我知道永远不会有 100% 的安全,但这个问题是关于可能发生或不发生的事情。

其他处理图像的软件,如 ImageMagick,也有一些严重的漏洞时不时地。所以我想知道使用 LaTeX (XeLaTeX) 是否也能实现这一点(或者说,很可能)。

如果只是将图像原封不动地一点一点地复制到生成的 PDF 中,风险可能较低。但如果以某种方式处理图像,例如使用widthheight或选项,风险可能要高得多scaleangle

编辑:通过 XeLaTeX 生成两个 PDF,一个包含 PNG 图像,另一个不包含,我可以看到 PNG 文件大小的 123.6% 被添加到 PDF 文件的大小中。因此,PNG 的字节绝对不会直接写入 PDF,尽管这可能有效。

了解 PDF 文档中的图像的实际工作方式[1] [2] [3]graphicx并试图理解一点[4],似乎图像数据至少被解码,然后重新编码以用于 PDF。所以 LaTeX 可能就是这样做的。这意味着肯定存在一个可能出现漏洞的较小攻击面,因为 LaTeX 不仅转发来自图像的字节,还会接触和处理它们。

另一方面,改变尺寸或旋转图像似乎不涉及任何实际处理,而只是写入 PDF 的一些略有不同的控件,这些控件会改变查看器稍后显示图像的方式。在测试了 、widthheight选项的不同组合后,我现在可以支持这一假设keepaspectratio,所有组合都会生成文件大小相差 0 到 2 个字节的 PDF 文件,尽管插入的 PNG 文件大约为 13 KB。

答案1

latex\includegraphics宏本身并不能完成任何没有它就无法完成的任务(它只是一个 tex 宏,没有使用任何不能直接使用的特殊指令)。

这意味着,不使用图形包的文档具有与使用图形包的文档完全相同的安全问题。

\includegraphics它本身的作用非常小,只是提供了一个一致的接口来指定文件名和大小等,然后要求“后端”安排包含文件。这里的“后端”可能是 pdftex 或 luatex 等系统的同一程序的一部分,或者是 latex+dvips 或 xetex+xdvipdfmx 等的单独 dvi 驱动程序。

在早期更值得信赖的时代,文件图像转换调用基本上可以运行任何操作。例如,dvips 有一个约定,如果你在\special指定图像包含的图像文件名前加上前缀,`那么它会调用 shell 来执行转换命令,例如,它`zcat foo.eps.Z 会解压缩压缩的 eps 文件并将生成的 EPS 流式传输到 dvips 的图像处理程序中。最初,图形包将此作为默认设置.eps.Z文件扩展名的默认设置,但可以使用类似的规则来调用任何事物通过向 dvips 发送一些反向字符串。

多年来(可能几十年),dvips 默认配置为不允许这样做,而是对压缩图像进行一些特殊的检测,不涉及指定任何外部命令,并且默认情况下关闭通过反引号的 shell 转义机制。

同样,pdflatex 本身不能包含 eps,因此使用 epstopdf(ghostscript 的薄包装器)将 EPS 转换为 PDF。同样,多年来,您不需要使用显式--shell-escapepdflatex 来启用此功能(因此冒着启用其他 shell 命令的风险),而是将受限制的repstopdf脚本列入白名单并允许在默认的“受限”模式下运行。这将以更安全的模式运行 ghostscript,并且几乎所有选项和非本地文件访问都被禁用,因此它不太可能用于除在当前目录中将 eps 转换为 pdf 之外的任何其他用途。

tex 允许调用的白名单命令集没有明确的--shell-escape参数,而且非常小,但用户也可以设置texmf.cnf默认列表

% The programs listed here are as safe as any we know: they either do
% not write any output files, respect openout_any, or have hard-coded
% restrictions similar to or higher than openout_any=p.  They also have
% no features to invoke arbitrary other programs, and no known
% exploitable bugs.  All to the best of our knowledge.  They also have
% practical use for being called from TeX.
% 
shell_escape_commands = \
bibtex,bibtex8,\
extractbb,\
gregorio,\
kpsewhich,\
makeindex,\
repstopdf,\
texosquery-jre8,\

% we'd like to allow:
% dvips - but external commands can be executed, need at least -R1.
% epspdf, ps2pdf, pstopdf - need to respect openout_any,
%   and gs -dSAFER must be used and check for shell injection with filenames.
% pygmentize - but is the filter feature insecure?
% ps4pdf - but it calls an unrestricted latex.
% rpdfcrop - maybe ok, but let's get experience with repstopdf first.
% texindy,xindy - but is the module feature insecure?
% ulqda - but requires optional SHA1.pm, so why bother.
% tex, latex, etc. - need to forbid --shell-escape, and inherit openout_any.

所以基本上这不是一个完整的安全审查,但据我们所知,图形包含不会带来运行任何其他 tex 文档时不存在的风险。

如果您处于不安全的环境中,您可以并且可能应该使用 tex,--no-shell-escape它甚至可以阻止白名单程序的运行,这会导致(例如)pdflatex 无法自动包含 eps 文件,但您必须提前安排以您认为安全的任何方式将 eps 转换为 pdf。

相关内容