ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
Linuxカーネルに存在した脆弱性の一つ。perfバグによる権限昇格の脆弱性。
MITRE社の脆弱性情報データベースCommon Vulnerabilities and Exposures(CVE)に登録されている脆弱性の一つ。
これは、perfの脆弱性により、ログイン可能な一般ユーザーがroot権限で任意のコードを実行することができるという重大なセキュリティホールである。
kernel/events/core.c内のperf_swevent_init()関数でevent_idを取得する際、不適切なデータ型を利用していたため、整数オーバーフローが生じていた。
該当する全てのLinuxディストリビューションに影響がある。
またAndroidも同様である。Android 2.3(Gingerbread)は2.6.35、Android 3.x(Honeycomb)は2.6.36が多いようなのでぎりぎりセーフの可能性が高いが、Android 4.0(Ice Cream Sandwich)は3.0、Android 4.1/Android 4.2(Jelly Bean)は3.4が多いため、この不具合を持っている可能性が高い。但しAndroidのアプリケーションはDalvik仮想マシン内で動作するため、この問題が露呈するかどうかは不明。
以下1行の変更で修正される。修正は「perf: treat attr.config as u64 in perf_swevent_init()」と題されている。
static int perf_swevent_init(struct perf_event *event) { - int event_id = event->attr.config; + u64 event_id = event->attr.config;
event->attr.configのデータ型が何であるかをまず調査する。
struct perf_event構造体内のstruct perf_event_attr構造体内の変数configは、linux/perf_event.hにおいて、次のように定義されている。
__u64 config;
__u64の定義は環境依存だが、ほぼ確実に64ビットの符号無し整数である。
一方、perf_swevent_init()関数内でこれを受け取るevent_idはint型で定義されていた。これは32ビットの符号あり整数である。このためオーバーフローが生じ、バグとなった。
C/C++の場合、このようにオーバーフローを起こす可能性のあるサイズが小さい型への代入でもエラーやワーニングにならないため、混入した不具合が長期にわたり露呈しなかったものと思われる。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます