[Netbsd - cryptodev] 整数溢と大量のUAF(Use-After-Free)脆弱性まとめ 脆弱性概要 この脆弱性は、NetBSD カーネル内の フレームワークにおける3つの重大なセキュリティ欠陥を対象としています。主な原因は、セッション管理における同期メカニズムの欠如と論理エラーです。 1. セッションライフサイクルの競合条件 (UAF/二重解放): と の間に競合が発生し、解放されたセッションが再使用される。 2. 並列UIO競合条件 (二重解放):複数のスレッドが同じセッションIDを使用する場合、共有される 構造体が上書きされ、二重解放を引き起こす。 3. 整数オーバーフロー (NULLポインタ dereference): 内で符号なし長さ値が符号付き変数に代入されることでオーバーフローが発生し、カーネルクラッシュを引き起こす。 影響範囲 影響を受けるコンポーネント: 影響を受ける関数: (および , ) と 脆弱性の種類: CWE-416: Use-After-Free (解放後使用) CWE-415: Double-Free (二重解放) CWE-476: NULL Pointer Dereference (NULLポインタ dereference) 影響結果:カーネルパニック (Kernel Panic)、ヒープ破損 (Heap Corruption)、サービス拒否 (DoS)。 修正状況:コミット において修正済み。 修正方針 セッション同期: 内でセッションに対する直列化メカニズムを追加し、 の解放後もセッション操作が行われないようにする。 型安全性: 内の整数オーバーフロー問題を修正し、長さ変数の型一致を保証する( と の正しい変換)。 概念実証コード (POC) 1. UAF と二重解放競合条件 POC 2. 整数オーバーフローのトリガー条件 セッションタイプ:圧縮セッション ( または ) cop->dst_len: より大きい (例: ) cop->len**: より大きい値を設定し、 上書きパスをトリガーする