CVE-2013-0914
読み:スィーヴィーイー-にーゼロいちさん-ゼロきゅういちよん
外語:CVE-2013-0914
Linuxカーネルに存在した脆弱性の一つ。ASLR保護メカニズムを回避される脆弱性。
概要
MITRE社の脆弱性情報データベースCommon Vulnerabilities and Exposures(CVE)に登録されている脆弱性の一つ。
ログイン可能な一般ユーザーにより、sigactionシステムコールを含む巧妙に細工されたアプリケーションを介し、ASLR保護メカニズムを回避される可能性があるセキュリティホールである。
Emese Revfy氏により発見された。
- 影響: Linux Kernel < 3.8.4
- 他の符号
特徴
問題
ASLR保護メカニズムを回避される脆弱性
原因
kernel/signal.c内のflush_signal_handlers()関数での初期化に不足があった。
具体的には、シグナルハンドラーがforkされた場合、sa_restorerの場所がクリアされず、子プロセスに対し親プロセスのアドレス空間の場所が漏洩する。
すなわち、sigaction()を呼び出した時に返されるsa_restorer値を調べることにより、親プロセスのASLRを回避できる可能性がある。
修正
実質的に1行の追加で修正される。
修正は「signal: always clear sa_restorer on execve」と題されている。
if (force_default || ka->sa.sa_handler != SIG_IGN)
ka->sa.sa_handler = SIG_DFL;
ka->sa.sa_flags = 0;
+#ifdef __ARCH_HAS_SA_RESTORER
+ ka->sa.sa_restorer = NULL;
+#endif
sigemptyset(&ka->sa.sa_mask);
ka++;
}
検証
flush_signal_handlers()関数でタスクの全ハンドラーがフラッシュされる。
この処理内で、sa_restorerが初期化されなかったため、結果として情報が子プロセスに渡されてしまっていた。
修正により、NULLを代入することで初期化し、もってこの問題は修正された。
なお、Linuxのmanpageによれば、sa_restorer要素は廃止予定であり使用すべきではない、とある。
再検索