バージョン2.6.37~3.8.8のLinuxカーネルに権限昇格につながる脆弱性が発見された。この脆弱性を悪用するとローカルユーザーが管理者権限(root権限)を奪取できてしまう。Android 4.0~4.2系にもこの脆弱性があり、既に攻撃ツールが出回っているため注意が必要である。直接的な防御策はまだないが、基本的なセキュリティ対策を積み重ねることで危険性をある程度低下できる。

 米マイターは2013年5月14日、同社が管理する脆弱性情報データベース「CVE」(Common Vulnerabilities and Exposures)に、権限昇格につながるLinuxカーネルの脆弱性情報(CVE-2013-2094)を登録・公開した。バージョン2.6.37~3.8.8のLinuxカーネルで見つかった。脆弱性の危険度を示すCVSS基本値は「7.2」と高い。該当するカーネルのバージョンが多いことや、ローカルユーザーが簡単に管理者権限(root権限)を奪取できること、攻撃方法によっては「SELinux」(Security-Enhanced Linux)などのセキュリティ機構を無効化できることから非常に深刻であると話題になった。

 該当するバージョンのカーネルを採用しているAndroid 4.0~4.2系にもこの脆弱性が存在する。6月中旬時点で同脆弱性を突くroot権限奪取ツールが登場しており、今後、マルウエアに「活用」されるのは間違いない。現状では直接的な防御策はないが、基本的なセキュリティ対策を積み重ねることで危険性をある程度下げることができる。

変数のデータ型の間違いに起因

 同脆弱性を修正するためのパッチ(修正差分)を図1に挙げた。これで分かる通り、本来は64ビットの符号なし整数型「u64」(32ビット環境のunsigned long longに相当)を指定するevent_id変数を、32ビットの符号付き整数型「int」と指定したことに原因があった。「整数オーバーフロー」と呼ばれる不具合が生じるのである。

図1●CVE-2013-2094の権限昇格バグを修正するパッチ
図1●CVE-2013-2094の権限昇格バグを修正するパッチ
Linuxカーネルのkernel/events/core.cファイルのperf_swevent_init()関数内にある、event_idという変数の型を修正している。これによって整数オーバーフローの問題が生じなくなり、権限昇格の脆弱性が塞がれる。
[画像のクリックで拡大表示]

 Linuxカーネルのkernel/events/core.cファイルのperf_swevent_init()関数内にある、event_idという変数の型を修正している。これによって整数オーバーフローの問題が生じなくなり、権限昇格の脆弱性が塞がれる。