概要
Linuxカーネルのトラフィック制御スケジューラ「teql」に存在する権限昇格の脆弱性「CVE-2026-23074」について、詳細な解析結果とエクスプロイトが公開されました。この解像後使用(use-after-free)の脆弱性は、カーネルのGit履歴が始まった2005年のLinux 2.6.12にまでさかのぼります。研究者らはこの脆弱性を悪用し、kernelCTFプログラムでGoogleのContainer-Optimized OS上でroot権限を取得し、コンテナからの脱出にも成功しました。
重要な理由
このバグは、約20年にわたってカーネルのネットワークコードに潜んでいました。修正済みの安定版カーネルは今年初めに公開されましたが、カーネルの更新が遅れているシステムは少なくありません。動作するエクスプロイトコードが公開された今、パッチ未適用のホストはroot権限を奪われる既知かつ実証済みの経路にさらされています。
カーネルのCVEチームは、この脆弱性のCVSSスコアを7.8と評価しています。一方、Red Hatは攻撃の複雑さが高いとして、スコアを7.0、深刻度を「中(Moderate)」としています。
エクスプロイトと詳細を公開
CVE-2026-23074の詳細な解析結果とエクスプロイトは、GoogleのkernelCTFリポジトリに掲載されています。作成者らは、このバグが「権限昇格につながる可能性がある」と説明しています。エクスプロイトは最終的にroot権限を取得し、名前空間からも脱出します。
攻撃の仕組み
teql qdiscは、複数のリンクを1つにまとめるトラフィック制御用のキューイング規則です。root qdiscとしてのみ動作するよう設計されていましたが、カーネルはこの制約を強制していませんでした。この抜け穴が、長年見過ごされてきたLinuxカーネルの権限昇格経路を生み出しました。
teqlがQFQなど別のスケジューラの子として動作すると、パケット数の管理に不整合が生じます。解析結果によると、teqlは「エンキュー時にsch->q.qlenをインクリメントしません」。また、peek関数も「常にNULLを返す」ため、親スケジューラはteqlからパケットを取り出しません。
その結果、親スケジューラはteqlクラスが空いていると誤認します。攻撃者がこの状態でクラスの設定を変更すると、カーネルはリストにまだリンクされている内部構造体を解放してしまいます。その後、スケジュールされたパケットがこの宙ぶらりんのポインタをたどり、解放後使用が発生します。
kernelCTFのエクスプロイトは、これを任意のカーネル書き込みへと発展させ、コード実行を乗っ取ります。手法の一部には、以前のCVE-2025-38477向けエクスプロイトの技術を再利用しています。
リスクにさらされるのは誰か
攻撃にはCAP_NET_ADMINが必要ですが、権限のないユーザーでも新しいユーザー名前空間内であれば取得できます。また、カーネルにCONFIG_NET_SCH_TEQLが含まれている必要があります。カーネルの修正によると、この脆弱性を発見したのは研究者のGangMin Kim氏です。
悪用の状況
公開されたエクスプロイトは存在します。ただし、実際の攻撃を報告している情報源はありません。CVEレコードに記載されたCISAの評価では、悪用は「なし(none)」とされており、この脆弱性はKEVカタログにも登録されていません。
影響を受けるバージョン
2.6.12から修正版までのすべてのカーネルが影響を受けます。修正済みの安定版リリースは次のとおりです。
- 5.10.249および5.15.199
- 6.1.162および6.6.122
- 6.12.68および6.18.8
- メインライン6.19
パッチ適用と緩和策
- ディストリビューションが提供する修正済みカーネルをインストールする。
- 不要な環境では、特権のないユーザー名前空間を無効にする。
- teql qdiscを使用していないシステムでは、sch_teqlモジュールをブラックリストに登録する。
修正内容自体はシンプルで、カーネルがroot以外の場所にteqlをアタッチすることを拒否するようになりました。エクスプロイトが公開されている以上、管理者は共有ホストやコンテナホストから優先して、このLinuxカーネルの権限昇格経路を塞ぐべきです。
翻訳元: https://meterpreter.org/linux-kernel-teql-cve-2026-23074-exploit/