当サイトはプロモーションが含まれています。

ImageMagickの脆弱性(ImageTragick)に対処する

穴

GW中にImageMagick深刻な脆弱性が発見されました。

「ImageTragick」として知られるこの脆弱性は、CVE-2016-3714(コード実行の脆弱性)、CVE-2016-3715(ファイル削除の脆弱性)、CVE-2016-3716(ファイル移動の脆弱性)、CVE-2016-3717(ファイル読込の脆弱性)、CVE-2016-3718(SSRFの脆弱性)からなるものです。

参考サイト

筆者では、CentOS 6系と5系のサーバーのいくつかで対処が必要となりました。
また、情報公開後、まだ日が経っていないので、今後も最新情報を収集していかないと・・・。

対策

ImageMagickを対処済の最新バージョンに更新する。

  • 6 系列 6.9.3-10
  • (追記)6 系列 6.9.4-0
  • 7 系列 7.0.1-1
  • (追記)7 系列 7.0.1-2

バージョン確認方法

convert -version

JPCERT/CCによると、上記対処済バージョンに更新することで、CVE-2016-3714(コード実行の脆弱性)に対する実証コードが動作しなくなることが確認されているそうです。

ただし、他の脆弱性(CVE-2016-3715~18)については、以下の回避策も合わせて行う必要があるそうです。

回避策

CVE-2016-3714(コード実行の脆弱性)以外の脆弱性に対処する場合や最新版にアップデートできない場合には、ImageMagickの設定ファイル(policy.xml)に以下の設定を追記します。
※注意:筆者の環境はCentOSのため、RedHat社が公開している設定を追記しました。

<policymap>
	......
	<policy domain="coder" rights="none" pattern="EPHEMERAL" />
	<policy domain="coder" rights="none" pattern="HTTPS" />
	<policy domain="coder" rights="none" pattern="HTTP" />
	<policy domain="coder" rights="none" pattern="URL" />
	<policy domain="coder" rights="none" pattern="FTP" />
	<policy domain="coder" rights="none" pattern="MVG" />
	<policy domain="coder" rights="none" pattern="MSL" />
	<policy domain="coder" rights="none" pattern="TEXT" />
	<policy domain="coder" rights="none" pattern="LABEL" />
	<policy domain="path" rights="none" pattern="@*" />
</policymap>

なお、CemtOS 5系のImageMagickなどの古いバージョンのImageMagickでは、設定ファイル(policy.xml)が存在しない(サポートされていない)場合があります。

その場合は、RedHat社が公開しているRed Hat Enterprise Linux 5系の対処方法であるファイルのリネームを行います。

# 64bitの場合
cd /usr/lib64/ImageMagick-6.2.8/modules-Q16/coders/

# 32bitの場合
cd /usr/lib/ImageMagick-6.2.8/modules-Q16/coders/
mv mvg.so mvg.so.bak
mv msl.so msl.so.bak
mv label.so label.so.bak

検証

GitHubにてPoCが公開されているので利用しました。
GitHub – ImageTragick/PoCs: Proof of Concepts for CVE-2016–3714

検証方法

git clone https://github.com/ImageTragick/PoCs.git
cd PoCs
./test.sh

※「git clone」を使用していますが、環境がない場合には、GitHubのページからファイル一式をダウンロードしてください。

対処前の出力結果

testing read
UNSAFE

testing delete
SAFE

testing http with local port: 24876
UNSAFE

testing http with nonce: NSKH6W4Q
SAFE

testing rce1
UNSAFE

testing rce2
UNSAFE

testing MSL
./test.sh: line 110:  6258 アボートしましたidentify msl.jpg 2> /dev/null > /dev/null
UNSAFE

対処後の出力結果

testing read
SAFE

testing delete
SAFE

testing http with local port: 40635
SAFE

testing http with nonce: q47iVLR4
SAFE

testing rce1
SAFE

testing rce2
SAFE

testing MSL
SAFE