脆弱性 | |
2014年2月21日、AutoCAD の脆弱性 CVE-2014-0818(JVN#33382534), CVE-2014-0819(JVN#43254599)が修正されたことが公表されました。この日記では、これらの脆弱性について次の 4 点を書きます。
まず、僕が直接 CVE-2014-0818(JVN#33382534)を発見したわけではありません。発見者よりは報告者という表現が適切です。
2012 年 6 月、ESET が AutoCAD の AutoLISP で書かれたワーム「ACAD/Medre.A」のブログ記事を公開しました。このブログ記事では、「ACAD/Medre.A」が感染するために AutoLisp コードの自動読み込み機能を悪用していることを説明していました。このとき、僕は読み込む AutoLisp コードを決定する探索パスに疑問を持ちました。そして、AutoCAD の公式ドキュメントを読むと、ファイル名だけ指定された場合に、まずカレントディレクトリを探索することを確認できました。
そこで、ESET のブログ記事をもとに実証コードを作成したうえで、「ACAD/Medre.A」の感染原因を「ファイル探索パスに関する脆弱性」として IPA に報告しました。なお、報告内容をまとめる過程で、DLL 読み込みに関する脆弱性の可能性も確認できたため、これもあわせて報告しました。
IPA への脆弱性届出情報(様式はここを参照)のうち、「2. 脆弱性関連情報」と「6. その他」を抜粋します。この抜粋した情報には、JVN#33382534 に関連する AutoCAD 公式ドキュメントへのリンクや再現手順などを含みます。日記に転載するうえで【】の記述を加筆しましたが、それ以外は原文のままです。
======================================================================
(抜粋)
2. 脆弱性関連情報
1) この脆弱性関連情報の入手先
□ 自分で発見した □ 人から入手した
■ ウェブサイトから入手した
(http://blog.eset.com/2012/06/21/acadmedre-a-technical-analysis-2)
2) 脆弱性を確認したソフトウエア等に関する情報
名称:AutoCAD 2013
バージョン:G.55.0.0
パッチレベル:-
言語:日本語
設定情報:-
3) 脆弱性の種類
ファイル探索パスに関する脆弱性
(CWE-427: http://cwe.mitre.org/data/definitions/427.html)
4) 再現手順
(1) 「AutoCAD 2013」を起動して、AutoCAD 2013 図面ファイル
「Drawing1.dwg」を作成する。この「Drawing1.dwg」と検証
コード「Acad.fas」を同じフォルダに保存しておく。
(添付ファイル:AutoCAD2013_exploit01.png)【後述】
(2) 「Drawing1.dwg」をダブルクリックで開く。このとき、別途
「Process Monitor」も起動しておく。
(3) 「AutoCAD 2013」が起動すると同時に、電卓プログラム(calc.exe)
が起動してしまう。
(添付ファイル:AutoCAD2013_exploit02.png)【後述】
(2) の「Process Monitor」の結果を確認すると、「Drawing1.dwg」
と同じフォルダに保存した「Acad.fas」が読み込まれているこ
とが分かります。
(添付ファイル:AutoCAD2013_exploit03.png)【後述】
さらに「Process Monitor」の [Event Properties] - [Stack] で
確認したところ、accore.dll のコードが「Acad.fas」を読み込ん
でいるようです。
(添付ファイル:AutoCAD2013_exploit03-2.png)【後述】
5) 再現の状況
■ 常に □ 時々 □ まれに
補足説明(バージョンによる、言語による、などを記入)
6) 脆弱性により発生しうる脅威
第三者が用意した FAS ファイル(*)が読み込まれることで、任意の
VBScript が実行されてしまう恐れがあります。本届出の情報入手
先にあるように、実際にマルウェア「ACAD/Medre.A」が本届出情報
を悪用したようです。
(*) コンパイルされた AutoLisp コード
http://exchange.autodesk.com/autocadmechanical/jpn/online-help/AMECH_PP/2012/jpn/pages/WS73099cc142f4875516d84be10ebc87a53f-7bc0.htm
7) 回避策
・運用における回避策(現実的には難しい)
「AutoCAD 2013」に関連付いたファイルをダブルクリックで開くと
きに、同じフォルダに FAS ファイルがないことを確認する。
8) 検証コード
http://blog.eset.com/2012/06/21/acadmedre-a-technical-analysis-2
を参考に次の AutoLisp コードを書きました。
----- ここから ----------------------
【日記に掲載する上で削除しました】
----- ここまで ----------------------
上記コードを「exploit.lsp」というファイル名で保存しました。
この「exploit.lsp」を下記の情報を基にコンパイルして、「Acad.fas」
という FAS ファイルを作成しました。
http://exchange.autodesk.com/autocad/jpn/online-help/browse#WS73099cc142f4875516d84be10ebc87a53f-787d.htm
具体的には、「AutoCAD 2013」の [管理]メニューから Visual LISP
エディタを起動して、Visual LISP Console にて、以下のコマンドを
実行します(「exploit.lsp」を C:\exploit フォルダに保存してい
るという前提です)。
(vlisp-compile 'st "c:/exploit/exploit.lsp" "c:/exploit/Acad.fas")
9) その他
・バージョンについては、[AutoCAD 2013 バージョン情報]メニュー
で確認しました。
(添付ファイル:AutoCAD2013_version.png)
【日記には掲載しません】
・本届出と類似した脆弱性としては、CVE-2011-3360 があります。
http://cve.mitre.org/cgi-bin/cvename.cgi?name=2011-3360
http://www.exploit-db.com/exploits/18125/
・AutoCAD ドキュメントの「load」関数の説明によると、
FAS ファイルのみ指定された場合、「AutoCAD 2013」は
まずカレントディレクトリを探索するようです。
http://exchange.autodesk.com/autocad/jpn/online-help/browse#WS73099cc142f4875516d84be10ebc87a53f-7872.htm
(抜粋)
6. その他
4) 再現手順の「Process Monitor」の結果を確認したところ、
「AutoCAD 2013」には DLL 読み込みに関する脆弱性も存在している
可能性があります。
添付ファイル「AutoCAD_exploit.zip」の AutoCAD_exploit.PML を
「Process Monitor」で開き、DLL の読み込み状況をご確認ください。
【日記には掲載しません】
======================================================================
AutoCAD2013_exploit01.png
AutoCAD2013_exploit02.png
AutoCAD2013_exploit03.png
AutoCAD2013_exploit03-2.png
脆弱性が修正された「AutoCAD 2014」の体験版で、IPA への脆弱性届出情報 2.4) 再現手順を実施してみました*1。すると、「AutoCAD 2014」が起動すると、次の警告ダイアログウインドウが表示されました。このウインドウにて [ロードしない](初期選択)を選択すると、acad.FAS のコードが実行されずに「Drawing1.dwg」が表示されました。一方、[ロードする] を選択すると、定番の電卓プログラム(calc.exe)が起動しました。
レジストリを探索しても、AutoCAD 2013 Service Pack 1 で導入された AUTOLOAD および AUTOLOADPATH パラメータを確認できなかったこともふまえると、AutoLisp コードの自動読み込み機能を維持しつつ、(危険性のある)コードの実行可否を利用者に委ねることで、脆弱性を解消したと理解しました。
IPA に脆弱性を報告してから、脆弱性が公表されるまでの時系列を下表にまとめました。
| 年月日 | 事柄 |
|---|---|
| 2012年7月3日 | IPA に AutoCAD の脆弱性を報告した。同日、IPA から「脆弱性情報を受信したこと」を連絡いただいた。 |
| 2012年8月6日 | IPA から、「報告した脆弱性情報を脆弱性として受理したこと」および「脆弱性情報を開発者に通知したこと」を連絡いただいた。 |
| 2012年8月*2 | Autodesk 社がセキュリティ制御を実装した AutoCAD 2013 Service Pack 1(SP1)*3 を公開した。 |
| 2013年4月4日 | IPA に報告した脆弱性の対応状況を問い合わせた。 |
| 2013年4月18日 | IPA から「問題を一部修正したバージョン(Service Pack) を提供しており、現在も対応中」との回答をいただいた(このとき、僕は SP1 の存在を知りました)。 |
| 2013年5月11日 | IPA に「『FAS ファイルのファイル探索パスに関する脆弱性』(CVE-2014-0818)の修正を完了しており、現在『DLL 読み込みに関する脆弱性』(CVE-2014-0819)を修正している状況か」確認した。 |
| 2013年5月22日 | IPA から「『FAS ファイルのファイル探索パスに関する脆弱性』と『DLL 読み込みに関する脆弱性』どちらも対応中」との回答をいただいた。 |
| 2013年8月22日 | IPA に「AutoCAD の脆弱性 CVE-2013-3665 が報告した脆弱性に該当するか」問い合わせた。 |
| 2013年9月4日 | IPA から「Autodesk 社に(8月22日の)問い合わせ内容を確認中である」との報告をいただいた。 |
| 2013年9月中旬*4 | IPA から「報告した脆弱性と CVE-2013-3665 は別の脆弱性である」との回答をいただいた。 |
| 2014年2月21日 | IPA から「CVE-2014-0818(JVN#33382534), CVE-2014-0819(JVN#43254599)を公表したこと」を連絡いただいた。 |
脆弱性を修正いただいた Autodesk 社、報告から修正および公表まで調整いただいた IPA および JPCERT/CC、ご対応ありがとうございました。
*1:「AutoCAD 2014」の動作環境は、Windows 7 Service Pack1 です。
*2:「Without A Net」の記事の公開日をもとに、2012年8月に公開されていたと判断しました。
*3:「Without A Net」の記事のコメントによると、SP1 が公開された後で、多数のバグを修正した SP1.1 が公開されたようです。
*4:2013 年 9 月中旬頃に IPA からメールをいただいていると思いますが、当該メールが見つかりませんでした...