New Linux Kernel Vulnerability Lets Attackers Escalate Privileges to Root
2026/06/08 CyberSecurityNews — Linux Kernel の nftables サブシステムにおける、解放後メモリ使用 (use-after-free) 脆弱性 CVE-2026-23111 に対するエクスプロイトが公表された。それにより、この脆弱性を悪用する権限を持たないローカル攻撃者は、root 権限への昇格が容易になる。影響を受けるディストリビューションとしては、Debian Bookworm/Debian Trixie/Ubuntu 22.04 LTS/Ubuntu 24.04 LTS などが挙げられる。脆弱性 CVE-2026-23111 は 2025 年初頭に発見され、2026年2月5日に Kernel コミットを通じてアップストリーム修正された。

Exodus Intelligence のセキュリティ研究者 Oliver Sieber が、アイドル状態のシステムで 99% 以上の成功率を示す、実用的なエクスプロイトと詳細な技術レポートを公開した。
このバグは、nftables サブシステム (Linux の Netfilter フック上に構築されたパケット・フィルタリング・フレームワーク) 内の nft_map_catchall_activate() 関数に起因する。
具体的に言うと、単一の逆条件チェック (論理否定演算子 “!“ の配置ミス) により、非アクティブな catchall 要素の再アクティブ化を、アボート処理中に誤ってスキップしてしまう欠陥が生じている。
これにより、pipapo ベースのバーディクト・マップが削除されるが、その中にはチェーン参照を持つ catchall 要素が含まれている。その後に、同一バッチ内のトランザクションが失敗してアボートがトリガーされる際に、その catchall 要素が誤って非アクティブの状態で残存してしまう。
この結果により、チェーンへの有効な参照が依然として存在しているにもかかわらず、チェーンの参照カウンタは “0” となる。この状態でチェーンを削除する攻撃者は、ベースチェーン・ルール内のダングリング・ポインタを介して、解放後メモリ使用を引き起こせる。
Linux Kernel 解放後メモリ使用の脆弱性
このエクスプロイトは、nftables の世代カーソル・メカニズムを操作するために、4 つのトランザクション・バッチを連鎖させる。
- Batch 1: pipapo セットを削除した後に、エラーを強制発生させてアボートをトリガーし、チェーン参照カウンタを不正にデクリメントする。
- Batch 2: 無害なトランザクションを送信して、世代カーソルを切り替える。
- Batch 3: pipapo セットを正常に削除し、チェーン参照カウンタを “0” にする。
- Batch 4: ベースチェーンが参照ルールを保持した状態で、チェーンを削除する。
その後、このエクスプロイトは KASLR 回避を実行するために、解放済みの kmalloc-cg-32 スラブを seq_operations 構造体 (open(“/proc/self/stat”) により初期化) で再利用し、NFT_MSG_GETRULE リクエストを通じて Kernel 関数ポインタをリークする。
続いて、細工された nft_rule 構造体で、解放済みの kmalloc-cg-192 オブジェクトを再確保し、同様の手法でリンクリスト・ポインタをリークすることでヒープアドレスを取得する。
制御フローのハイジャックは、ROP ガジェット (push rbx; pop rsp) を指す偽の nft_expr_ops 構造体で、削除されたチェーンの blob_gen_0 ポインタを上書きすることで実現される。最終的に ROP チェーンは、commit_creds(&init_cred) を呼び出して root 権限を取得する。
その後に、switch_task_namespaces() を実行して namespace 分離を突破することで、コンテナおよび namespace からの完全な脱出を達成する。
| Distribution | Status |
|---|---|
| Debian Bookworm | Vulnerable |
| Debian Trixie | Vulnerable |
| Ubuntu 22.04 LTS | Vulnerable |
| Ubuntu 24.04 LTS | Vulnerable |
Ubuntu 24.04 においてAppArmor により適用される namespace 作成制限は、悪用前に aa-exec -p trinity — unshare -Urmin /bin/sh を使用することで回避できる。
なお、Oliver Sieber によると、このエクスプロイトはアイドル状態のシステムでは 99% 以上の安定性を示し、重いヒープ負荷下 (Phoronix Test Suite による Apache ベンチマーク) でも約 80% の安定性を達成しており、実環境でも高い信頼性を持つ。また、この欠陥の原因となったコード内の break 文は、関連する別の脆弱性である CVE-2026-23278 も引き起こしているが、別の Kernel コミットにより修正されている。
管理者に対して強く推奨されるのは、この脆弱性に対処するためにアップストリーム Kernel パッチ (commit f41c5d1) を直ちに適用するか、ディストリビューションが提供する修正済み Kernel へと更新することである。
また、Ubuntu 環境では、ポリシー上で許容されている場合に限り、kernel.unprivileged_userns_clone=0 を設定して非特権ユーザーによる namespace 作成を制限することで、部分的な緩和策となる。
訳者後書:脆弱性 CVE-2026-23111 は、プログラム内の非常に小さなミスが原因で発生しています。具体的には、プログラムの条件判定で使われる論理否定演算子である「!」の配置ミスという、開発現場でも起こりやすいコードの書き間違いが発端となっています。この逆条件チェックのミスにより、処理の途中で特定の要素を再アクティブ化する手続きが誤ってスキップされてしまいました。その結果、本来であれば連動して動くはずの参照カウンタの計算に狂いが生じ、メモリの管理に矛盾が発生して重大なセキュリティ・リスクにつながっています。ご利用のチームは、ご注意ください。よろしければ、Linux kernel での検索結果も、ご参照ください。
You must be logged in to post a comment.