こんなタイミングだけどアドベントカレンダーじゃないです。

先にまとめ

  • apt install imagemagick
  • /etc/ImageMagick-6/policy.xml を編集して PDF を許可(安全性に自信がある場合)
  • $ convert a.pdf a-%03d.png

今回の環境

  • Ubuntu 18.04.3 on WSL

インストール

そのまんまのパッケージがあった。

$ apt search imagemagick | grep "^imagemagick/"

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

imagemagick/bionic-updates,bionic-security,now 8:6.9.7.4+dfsg-16ubuntu6.8 amd64

のでインストールする。

$ sudo apt install imagemagick

$ convert --version
Version: ImageMagick 6.9.7-4 Q16 x86_64 20170114 http://www.imagemagick.org
Copyright: © 1999-2017 ImageMagick Studio LLC
License: http://www.imagemagick.org/script/license.php
Features: Cipher DPC Modules OpenMP 
Delegates (built-in): bzlib djvu fftw fontconfig freetype jbig jng jpeg lcms lqr ltdl lzma openexr pangocairo png tiff wmf x xml zlib

実はダミー

インストールしていない状態で convert を実行すると出てくる提案は imagemagick-6.q16 だった。前述のパッケージはこいつ(最新版)へのショートカットになっているっぽい。

$ apt show imagemagick

…

Depends: imagemagick-6.q16 (>= 8:6.9.2.10+dfsg-2~)

…

 This is a dummy package.  You can safely purge or remove it.

PDF 変換しようとして “not authorized” エラー

なんか出た。

$ convert a.pdf a.png
convert-im6.q16: not authorized `a.pdf' @ error/constitute.c/ReadImage/412.
convert-im6.q16: no images defined `a.png' @ error/convert.c/ConvertImageCommand/3258.

セキュリティーポリシーを更新

なにやら Ghostscript の危険性がある、らしい。

Over the last few days we’ve had a couple of issues with Imagick and processing PDFs on our servers. As it turns out, these issues are caused by automatic security updates.

今回は非公開の環境である WSL だし、PDF ファイルも自作で安全なものなので、制限を解除することにする。

$ sudo vi /etc/ImageMagick-6/policy.xml
-<policy domain="coder" rights="none" pattern="PDF" />
+<policy domain="coder" rights="read|write" pattern="PDF" />

脆弱性について

日付も近いのでたぶんこれ。

そのためGhostscriptには、-dSAFERという「キケンなこと」ができないようにするモードがあります。ところが、この-dSAFERを付けていても任意コード実行が可能な穴があった……というのが今回の脆弱性のキモです。

PDF を変換する

例えば 3 桁の連番を付けたい場合はファイル名を %03d のようにする。(いらないなら付けなければ、自動的に連番は付く。)

$ convert a.pdf a-%03d.png

おわり

とっぴんぱらりのぷう。

参考