先日2016年5月3日ごろ、ImageMagickの重大な脆弱性(CVE-2016-3714 ほか)情報が公開されました。この脆弱性は ImageTragick と名付けられています。
次のページに日本語で完結にまとまっているため、是非一読ください。
- ImageMagickの脆弱性(CVE-2016-3714他)についてまとめてみた
http://d.hatena.ne.jp/Kango/20160504/1462352882 -
ImageTragick (英語)
https://imagetragick.com/
概要と影響範囲
ImageMagick内で処理する際にコマンドのエスケープが完全でなかったことが原因で、リモートで任意のコードを実行可能になります。
次のmvgファイルを作り、処理させることで再現できます。
|
1 2 3 4 |
push graphic-context viewbox 0 0 640 480 fill 'url(https://example.com/image.jpg"|ls "-la)' pop graphic-context |
|
1 2 3 4 |
$ convert exploit.mvg out.png total 32 drwxr-xr-x 6 user group 204 Apr 29 23:08 . drwxr-xr-x+ 232 user group 7888 Apr 30 10:37 .. |
また同様にsvg形式でも可能になっています。
対策
2つ公表されていますが、どちらも行うことが推奨されています。
また、このエントリ公開時点では、対策が施されたバージョンはリリースされていません。
画像ファイルのマジックバイトを検査する
ユーザからアップロードされた画像を ImageMagick で処理する前に、画像ファイルのマジックバイトを検査します。
主な拡張子のマジックバイト一覧はここで見れます。
List of file signatures – Wikipedia
ImageMagick の設定ファイルを変更する
ImageMagick の設定ファイルである、 policy.xml に次の設定を追加します。
デフォルトであれば、設定ファイルは /etc/ImageMagick に配置されています。
|
1 2 3 4 5 6 7 |
<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> |
所感
リモートによるコード実行の脆弱性はマジでヤバいので速攻対策しました。特にPHPを使っているサービスではよく使われているかと思います。もしImageMagickを使っているサービスに心当たりがあれば要チェックです!


