アイルランドのセキュリティ研究者、Donncha O'Cearbhaill氏が「Ubuntu」に遠隔からコードを実行されるバグを発見した。この不具合が影響するのは「Ubuntu 12.10」で、攻撃を仕組まれたファイルを開封するとシステムに悪意あるコードを挿入される。悪意あるハッカーはこれを利用してシステムをクラッシュさせたり、マルウェアを動かすことができる。幸い、ルート権限を獲得することはできないようだ。
O'Cearbhaill氏は、Ubuntuは「ProblemType:」で始まるファイルであれば、Apportで未知のファイルを開くことを発見した。ApportはUbuntuのデフォルトのクラッシュ処理・クラッシュレポートプログラムだ。
Apportは「.crash」という拡張子とマジックバイトシーケンスを持つクラッシュファイルを生成する。マジックバイトは、ファイルを識別するための独自のシーケンスだ。例えば、PDFの拡張子を持たないPDFドキュメントであっても、”25 50 44 46”と16進数のマジックバイトにより、PDFであることがわかる。
もちろんマジックバイトは悪用もできる。そしてこれが、今回のUbuntuの脆弱性の原因になっている。Ubuntuは未知のファイルがあるとき、最初にMIMEタイプとの照合を試みる。うまくいかない場合、フォールバックしてマジックバイトの照合を試みる。
したがって攻撃者は、Apportのファイルのマジックバイトを持つものとして識別されるファイルを作成できる。「.crash」という拡張子のあるファイルであれば、通常は開封しないだろう。だが、拡張子がなければ開けるかもしれない。これをクリックすると、Apportがファイルを開き、最小化されたクラッシュレポートプロンプトを表示する。ここで「詳細を表示(Show Details)」をクリックすると、自ら自分への攻撃をスタートさせてしまうことになる。
パッチが当てられていないUbuntu Linuxを使っている場合、このような通常のエラーメッセージに攻撃が隠されている可能性がある。
原因は、悪意あるハッカーが偽のApportクラッシュファイルの中に、Apport Crash Report Formatを使ってCrashDBフィールドにリストされたPythonプログラムを走らせるように仕組むことができるためだ。このCrashDBフィールドがパースされ、ユーザーの介在なしに勝手に実行されてしまう。
ApportがクラッシュファイルにあるPackageとSourcePackageフィールドを処理前に適切に無害化していないから、ともいえる。
なお、これを含む不具合はすでに修正済みだ。だが、古いバージョンのオープンソースコードを狙おうとする悪意あるハッカーもいるので注意したい。
この記事は海外CBS Interactive発の記事を朝日インタラクティブが日本向けに編集したものです。