CVE-2013-0914
読み:スィーヴィーイー-にーゼロいちさん-ゼロきゅういちよん
外語:CVE-2013-0914

 Linuxカーネルに存在した脆弱性の一つ。ASLR保護メカニズムを回避される脆弱性。
目次

概要
 MITRE社の脆弱性情報データベースCommon Vulnerabilities and Exposures(CVE)に登録されている脆弱性の一つ。
 ログイン可能な一般ユーザーにより、sigactionシステムコールを含む巧妙に細工されたアプリケーションを介し、ASLR保護メカニズムを回避される可能性があるセキュリティホールである。
 Emese Revfy氏により発見された。

特徴

問題
 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要素は廃止予定であり使用すべきではない、とある。

再検索