ImageMagick安全策略'PDF'阻止转换

T. *_*ord 107 pdf imagemagick imagemagick-convert

Imagemagick安全策略似乎不允许我执行从pdf到png的转换.转换其他扩展似乎正在起作用,而不是来自pdf.我没有改变任何imagemagick设置,因为我安装它...我正在使用Arch Linux,如果操作系统很重要.

user@machine $ convert -density 300 -depth 8 -quality 90 input.pdf output.png
convert: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408.
convert: no images defined `output.png' @ error/convert.c/ConvertImageCommand/3288.
Run Code Online (Sandbox Code Playgroud)

Ste*_*del 127

好吧,我补充道

  <policy domain="coder" rights="read | write" pattern="PDF" />
Run Code Online (Sandbox Code Playgroud)

就在之前</policymap>,/etc/ImageMagick-7/policy.xml它使它再次起作用,但不确定它的安全含义.

  • 我找到了行`<policy domain ="coder"rights ="none"pattern ="{PS,PS2,PS3,EPS,PDF,XPS}"/>`并且只是取消注释它以使其工作. (21认同)
  • @jakob -r:我想你**评论了**... ;-) (13认同)
  • 此处引用了导致分发实施策略的安全漏洞:https://www.kb.cert.org/vuls/id/332928/ (5认同)
  • 我相信由于Ghostscript中的错误而添加了PDF政策,我相信现在已经修复了.所以你正在使用当前的Ghostscript,那么你应该没有给这个策略读写权限. (3认同)
  • 非常适合我!太巧妙了!但就我而言,它是 ImageMagick-6,而不是 7。因此您可能需要通过导航到 /etc 来检查版本 (3认同)
  • 确保 ghostscript 已更新 https://www.kb.cert.org/vuls/id/332928/ (2认同)
  • 在当前的 Arch 上,这对我来说不起作用。 (2认同)

tan*_*ius 126

此问题是针对安全漏洞的解决方法。该漏洞已在 Ghostscript 9.24 ( source ) 中得到解决,因此如果您拥有该版本或更新版本,则不再需要解决方法。

在 Ubuntu 19.10 到 21.04 以及 ImageMagick 6 附带的任何更高版本上,以下是通过删除解决方法来解决问题的方法:

  1. 确保你有 Ghostscript ?9.24:

    gs --version
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果是,只需从以下内容中删除整个以下部分/etc/ImageMagick-6/policy.xml

    <!-- disable ghostscript format types -->
    <policy domain="coder" rights="none" pattern="PS" />
    <policy domain="coder" rights="none" pattern="PS2" />
    <policy domain="coder" rights="none" pattern="PS3" />
    <policy domain="coder" rights="none" pattern="EPS" />
    <policy domain="coder" rights="none" pattern="PDF" />
    <policy domain="coder" rights="none" pattern="XPS" />
    
    Run Code Online (Sandbox Code Playgroud)

  • `sed -i '/disable Ghostscript format types/,+6d' /etc/ImageMagick-6/policy.xml` 对我来说效果很好。 (26认同)
  • 适用于 Ubuntu 20.04 (6认同)
  • @Christophvh:这意味着您重新赋予 ImageMagick 使用 Ghostscript 处理文件的全部权利。这会将文件恢复到必须为[安全问题](https://www.kb.cert.org/vuls/id/332928/)引入此临时解决方法之前的状态,该问题现已修复。 (4认同)
  • 不要忘记重新启动 php-fpm 以提交所做的更改 - `sudo service php8.1-fpm restart` (4认同)
  • 在 Ubuntu 21.04 上工作 (3认同)
  • 适用于 Ubuntu 22.04。 (3认同)
  • 工作正常(Ubuntu 22.04,KDE 5.24.6) - 如果您不想删除条目,只需将其注释掉,即将要禁用的策略包含在 ``&lt;!--``` 和 `` 之间`--&gt;```。 (3认同)
  • 仅适用于 Ubuntu 19.04 和 gs 9.26 的修复。 (2认同)
  • 这是一个很好的答案,有正确且简单的解释 (2认同)

Mic*_*ele 69

正如一些评论中所指出的,您需要编辑ImageMagick的策略/etc/ImageMagick-7/policy.xml.更具体地说,在撰写本文时(15/01/2019)ArchLinux中,以下行未被注释:

<policy domain="coder" rights="none" pattern="{PS,PS2,PS3,EPS,PDF,XPS}" />
Run Code Online (Sandbox Code Playgroud)

只需将其包装<!--并对其-->进行评论,pdf转换应该再次起作用.

  • 此功能的意义是什么?要防止用户制作PDF? (4认同)
  • 是的,是的。由于网站经常使用ImageMagick处理上传的文件-PDF是基本上可以包含任何可执行代码的文件格式之一-具有上传权限的任何人都可以执行您的Web用户可以访问的任何任务。如果有人诱骗您亲自将恶意PDF转换为任何其他格式,也是如此。 (3认同)
  • 如果这个决定阻止我使用我的软件,我会感到愤怒,因为有人可能会找到一种方法来利用它作弊。 (3认同)
  • 确保 Ghostscript 是最新的 https://www.kb.cert.org/vuls/id/332928/ (2认同)

Muh*_*ooq 26

正如 @Richard Kiefer 的高度活跃评论,一个简单的修复如下

$ sudo sed -i '/disable ghostscript format types/,+6d' /etc/ImageMagick-6/policy.xml
Run Code Online (Sandbox Code Playgroud)


小智 19

对于我的archlinux系统,该线路已经取消注释.我不得不用"read | write"替换"none"来使它工作.


Ost*_*PHP 19

适用于 Ubuntu 20.04

在里面添加这一行 <policymap>

<policy domain="module" rights="read|write" pattern="{PS,PDF,XPS}" />
Run Code Online (Sandbox Code Playgroud)

评论这些行:

  <!--
  <policy domain="coder" rights="none" pattern="PS" />
  <policy domain="coder" rights="none" pattern="PS2" />
  <policy domain="coder" rights="none" pattern="PS3" />
  <policy domain="coder" rights="none" pattern="EPS" />
  <policy domain="coder" rights="none" pattern="PDF" />
  <policy domain="coder" rights="none" pattern="XPS" />
   -->
Run Code Online (Sandbox Code Playgroud)

  • 我不需要添加`&lt;policydomain="module"rights="read|write"pattern="{PS,PDF,XPS}"/&gt;` (5认同)

小智 13

在 Ubuntu 19.10 上,我已在 /etc/ImageMagick-6/policy.xml 中完成此操作

取消注释这个

<policy domain="module" rights="read | write" pattern="{PS,PDF,XPS}" />
Run Code Online (Sandbox Code Playgroud)

并评论这个

<!-- <policy domain="coder" rights="none" pattern="PDF" /> -->
Run Code Online (Sandbox Code Playgroud)

之后,此命令正常工作

convert -thumbnail x300 -background white -alpha remove sample.pdf sample.png 
Run Code Online (Sandbox Code Playgroud)


sh6*_*210 9

就我而言,我使用的是 ubuntu 20.10 和 Imagick-7。

在我的/etc/ImageMagick-6/policy.xml中,我删除了以下几行,重新启动了我的计算机,然后就完成了。

  <policy domain="coder" rights="none" pattern="PS" />
  <policy domain="coder" rights="none" pattern="PS2" />
  <policy domain="coder" rights="none" pattern="PS3" />
  <policy domain="coder" rights="none" pattern="EPS" />
  <policy domain="coder" rights="none" pattern="PDF" />
  <policy domain="coder" rights="none" pattern="XPS" />
Run Code Online (Sandbox Code Playgroud)


der*_*wie 8

我在使用 nextcloud 时遇到了这个问题,它无法为 pdf 文件创建缩略图。

但是,所有建议的步骤都不能为我解决问题。

最终我找到了原因:接受的答案确实有效,但我还必须在编辑 policy.xml 文件后重新启动 php-fpm:

 sudo systemctl restart php7.2-fpm.service
Run Code Online (Sandbox Code Playgroud)


Sen*_*lli 7

添加到 Stefan Seidel 的答案中。

好吧,至少在 Ubuntu 20.04.2 LTS 或其他版本中,您无法真正以 GUI 方式直接编辑 policy.xml 文件。这是编辑它的终端方式。

  1. 通过输入以下命令在终端中打开 policy.xml 文件 -

    sudo nano /etc/ImageMagick-6/policy.xml

  2. 现在,直接编辑在终端的文件中,找到 <policy domain="coder" rights="none" pattern="PDF" /> 并替换noneread|write如图片所示。然后按 Ctrl+X 退出。

在终端编辑


sol*_*urn 5

对于我在Arch Linux上,我不得不评论:

  <policy domain="delegate" rights="none" pattern="gs" />
Run Code Online (Sandbox Code Playgroud)


sso*_*low 5

在修复 Ghostscript 后保留了 ImageMagick 更改,因为应用程序(尤其是 Web 应用程序)经常将任意用户提供的文件提供给 ImageMagick,并不总是正确强制执行格式限制,并且由于 Postscript(PDF 使用的)是图灵完备的编程在沙箱中运行的语言,总是有可能在沙箱中出现另一个漏洞。

最好保持配置,以便 ImageMagick 拒绝处理需要运行程序的文件,而是在您有意允许 Postscript 渲染时直接调用 Ghostscript 。

这将通过像这样的 Ghostscript 命令来完成:

gs -dSAFER -r600 -sDEVICE=pngalpha -o foo.png myfile.pdf
Run Code Online (Sandbox Code Playgroud)

是的,这是 ImageMagic 调用的 GhostScript 命令的变体。(参见 ImageMagick 的delegates.xml.-o是 的简写-dBATCH -dNOPAUSE -sOutputFile=

重要的是 ImageMagick 保持锁定状态,您无需不必要地调用中间程序,并且您可以更好地控制渲染参数。(例如-r600,要渲染的 DPI 和更改-sDEVICE=pngalpha允许您直接渲染为所需的格式)

  • “尝试直接使用 Ghostscript 来解决 ImageMagick 的 PDF 安全问题也很危险,因为在处理恶意 PDF 文件时,Ghostscript 也容易受到利用。” 来自 https://serverpilot.io/docs/how-to-install-the-imagemagick-executable/ (2认同)
  • @Avatar 除非您应用足够的深度防御,否则任何东西都容易受到恶意 PDF 文件的攻击,因为 Postscript 是一种图灵完备的语言,并且 PDF 使用经过修改的 Postscript 形式,因此您可以在不渲染整个流的情况下查找各个页面。这就像说您的网络浏览器容易受到恶意制作的 JavaScript 的攻击。那篇文章只是说 Ghostscript 和 Java Applet 一样容易受到 0day 攻击。它是“安全”的,因为您不太可能将 PDF 渲染暴露给内部使用 ImageMagick 的随机 Web 应用程序。 (2认同)