GW中にImageMagickに深刻な脆弱性が発見されました。
「ImageTragick」として知られるこの脆弱性は、CVE-2016-3714(コード実行の脆弱性)、CVE-2016-3715(ファイル削除の脆弱性)、CVE-2016-3716(ファイル移動の脆弱性)、CVE-2016-3717(ファイル読込の脆弱性)、CVE-2016-3718(SSRFの脆弱性)からなるものです。
参考サイト
- ImageTragick
- ImageMagick の脆弱性 (CVE-2016-3714) に関する注意喚起
- ImageMagick Filtering Vulnerability – CVE-2016-3714
筆者では、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