脆弱性 | |
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 からメールをいただいていると思いますが、当該メールが見つかりませんでした...