インターネット一般を眺めると、ImageTragickの緩和策としてpolicy.xml
で危険なコーダを禁止するという方法が示されている。
ImageMagickのChangeLogによれば、policy.xml
は、ちょうど七年前、二〇〇九年五月四日に6.5.2-1
で初めてサポートされたという。
手元のCentOS 5を眺める。インストールされているRPMはImageMagick-6.2.8.0-15.el5_8
である。どうして、いまだにCentOS 5なんて使っているのだろう。ビジネスだからだ。ビジネスだったらしかたがない。ともあれ、このバージョンではpolicy.xml
は使えない。やれやれ。
さて、どうしてくれようか。ソフトウェアのバージョンを変えずにやりすごす方法を沈思黙考する。緩和策のpolicy.xml
を眺める。
<policymap>
<policy domain="coder" rights="none" pattern="EPHEMERAL" />
<policy domain="coder" rights="none" pattern="URL" />
<policy domain="coder" rights="none" pattern="HTTPS" />
<policy domain="coder" rights="none" pattern="MVG" />
<policy domain="coder" rights="none" pattern="MSL" />
</policymap>
すなわち、EPHEMERAL
,URL
,HTTPS
,MVG
,MSL
というコーダを禁止している。EPHEMERAL
は昔は存在していなかったようだ。だとすると、残りの四個を動かなくしてやればいい。
まず、HTTPS
を禁止しよう。これはdelegates.xml
で禁止してやればよいだろう。手元の環境ではふたつ存在していた。
/usr/lib64/ImageMagick-6.2.8/config/delegates.xml
/usr/lib/ImageMagick-6.2.8/config/delegates.xml
それぞれのdelegates.xml
から、次の一行を削除する(いっそ<delegatemap>
の中身を空にしてもよいかもしれぬ)。
<delegate decode="https" command='"wget" -q -O "%o" "https:%M"' />
残りのURL
,MVG
,MSL
を設定ファイルでどうにかするのは無理であるように思われた。ありがたいことに、しかし、それらはそれぞれ共有リンクライブラリになっていた。こいつらをどこかに投げやってしまえばよい。
/usr/lib64/ImageMagick-6.2.8/modules-Q16/coders/msl.la
/usr/lib64/ImageMagick-6.2.8/modules-Q16/coders/msl.so
/usr/lib64/ImageMagick-6.2.8/modules-Q16/coders/mvg.la
/usr/lib64/ImageMagick-6.2.8/modules-Q16/coders/mvg.so
/usr/lib64/ImageMagick-6.2.8/modules-Q16/coders/url.la
/usr/lib64/ImageMagick-6.2.8/modules-Q16/coders/url.so
/usr/lib/ImageMagick-6.2.8/modules-Q16/coders/msl.la
/usr/lib/ImageMagick-6.2.8/modules-Q16/coders/msl.so
/usr/lib/ImageMagick-6.2.8/modules-Q16/coders/mvg.la
/usr/lib/ImageMagick-6.2.8/modules-Q16/coders/mvg.so
/usr/lib/ImageMagick-6.2.8/modules-Q16/coders/url.la
/usr/lib/ImageMagick-6.2.8/modules-Q16/coders/url.so
これにて、とりあえず、PoCは動かなくなった。
【二〇一六年五月六日追記】
ImageMagick Filtering Vulnerability - CVE-2016-3714のResolveのRHEL 5のMitigationでは、mvg.so
, msl.so
, label.so
をリネームしている。CVE-2016-3717を防ぐためにlabel.so
をリネームするというわけみたい。