昨日、Microsoftは1月のWindows月例パッチとして3つ公開した。
- [Microsoft] HTML ヘルプの脆弱性により、コードが実行される (890175) (MS05-001)
- [Microsoft] カーソルおよびアイコンのフォーマットの処理の脆弱性により、リモートでコードが実行される (891711) (MS05-002)
- [Microsoft] インデックス サービスの脆弱性により、コードが実行される (871250) (MS05-003)
HTMLヘルプの脆弱性(MS05-001)は、ActiveXコントロールが原因によるものだ。インデックスサービスの脆弱性(MS05-003)もリモートから不正な要求を送信することで発生する。この2つの脆弱性について、なんとなく理解できる。
しかし、理解できないのは、カーソル、アイコンの脆弱性(MS05-002)だ。
アイコンについてはfavicon.icoなどWebでもよく使用される素材であるから、この脆弱性によってリモートから攻撃を受ける可能性があることはわかる。
カーソルやアイコンファイルをレンダリングする前のフォーマット解析処理が不完全であることが原因のようである。
しかし、なぜ不正なフォーマットを処理しレンダリングした際にコードが実行されてしまう可能性があるのだろうか。(不正なフォーマットによってアプリケーションが停止し、DoS攻撃の対象となるということであれば、まだ理解できる。)
レンダリング処理のロジック中にコード実行の可能性があるというか。WindowsのOSはGUIとカーネルが密結合していそうなため、このように一見全く関連性のなさそうなものが関係してしまい、バッファオーバーランなどによってコードが実行されてしまうのかもしれない。
Microsoftは開発環境ソフトウェアではかなり以前からコンポーネント化を推し進めてきた。コンポーネント化することによって、関連しない処理が干渉しないようにプログラミングすることができるはずである。しかし、このMS05-002脆弱性は最新のOSであるWindows XP、Windows Server 2003でも発生するというから、自身のOSではそうはなっていなかったということか。
それにしても、素人にとっては摩訶不思議な脆弱性である。