公開日:2019/07/17 最終更新日:2019/07/17
JVNVU#96954584
LLVM の Arm バックエンドにおいてスタック保護機構が機能しなくなる問題
LLVM の Arm バックエンドにおいて、スタック保護機構が正常に機能せずバッファオーバーフローが検知できなくなる問題があります。
- LLVM
LLVM の Arm バックエンドにおけるスタック保護機構では、関数のスタックフレーム内においてローカル変数と戻り先アドレスの間にチェック用の cookie 値(カナリア)がスタックプロテクタとして配置されます。関数の実行終了時にこの値が上書きされていないかチェックすることでスタックの改ざんを検知します。
スタックプロテクタが置かれるスタック上の位置はあらかじめ決められていますが、スタック上にローカル変数を配置する処理のなかで新しいスタックプロテクタを設けてしまう可能性があることがわかりました。この場合、スタック保護機構は正常に機能せず、スタックの改ざんを検知することができません。また、スタックプロテクタを指すポインタ値がスタック上に置かれる可能性があることも分かりました。この場合も、スタックの改ざんを検知できない可能性があります。
スタックバッファオーバーフローが正常に検知されなくなることにより、第三者により任意のコードを実行されたり、サービス運用妨害 (DoS) 攻撃を受けたりする可能性があります。
ベンダのアップデートを適用する
ベンダの提供する情報を元に最新版にアップデートを行なってください。
詳しくはベンダの提供する情報を参照してください。
-
CERT/CC Vulnerability Note VU#129209
LLVMs Arm stack protection feature can be rendered ineffective -
The LLVM Compiler Infrastructure
-
The Architecture of Open Source Applications
LLVM -
Arm Developer
Arm Compiler