Linux Kernel の脆弱性 CVE-2025-39964 が FIX:Docker エスケープによるroot アクセスの恐れ

14-Year-Old Linux Kernel Vulnerability Enables Root Access and Docker Escape

2026/09/25 gbhackers — Linux Kernel の AF_ALG 暗号化インターフェースに存在する脆弱性 CVE-2025-39964 は、2011年にリリースされた Linux 2.6.38 に由来し、2025年に修正されるまでの約 14 年間、発見されずに残っていた。この脆弱性は、2025年に STAR Labs の研究者 Muhammad Alifa Ramdhan が発見し、Bing-Jhong Billy Jheng の協力を得て悪用手法が確立されたものである。同一ソケットへの同時書き込みによって発生する競合状態を利用することで、権限のないローカル攻撃者が root 権限を取得し、Docker コンテナから脱出する可能性がある。

両氏は、Linux Kernel CTF に実際に動作する PoC を提出し、Google から 113,337 ドルの報奨金を獲得した。

約 14年間存在していた Linux Kernel の脆弱性

AF_ALG インターフェースは、ハッシュ/対称暗号/認証付き暗号/乱数生成などのカーネルによる暗号処理を、標準ソケットを介してユーザー空間のアプリケーションから利用するためのものであり、AF_ALG ソケットの作成/アルゴリズムの選択/send または write によるデータの送信/read または receive による結果の取得が可能である。また、権限のないユーザー空間からアクセスできるため、内部の脆弱性が攻撃対象となり得る。

この脆弱性は、渡された入力を送信用の Scatter-Gather リストに格納する af_alg_sendmsg() 関数に存在する。これにより共有される af_alg_ctx 構造体には、追加データの処理や、最後に割り当てたページの残り領域に新たな入力を結合できるかどうかを示す状態情報が保持される。一見すると、lock_sock() は書き込みを直列化しているように見えるが、書き込み側がソケットのメモリ確保を待っている間、カーネルはそのロックを解放するため、2つのスレッドが同じソケットに対して未完了の sendmsg() 処理を実行できる。

したがって、処理の割り込みタイミングを調整し、ユーザー空間からのコピー失敗を組み合わせることで、ctx->merge を true に設定すると同時に、最新の Scatter-Gather リストの cur をゼロにできる。その後の書き込み処理では、有効な最後のエントリが存在すると仮定して sgl->sg + sgl->cur – 1 が計算され、cur がゼロの場合、カーネルは代わりに sg[-1] にアクセスし、割り当てられた領域の直前にあるメモリを境界外から読み取り、メタデータを取得する。

IDNSec によると、隣接するオブジェクトをヒープ・スプレーで配置することで、攻撃者は memcpy_from_msg() の書き込み先の計算に使用される偽の page_link 値に影響を与えられる。

この攻撃手法は、ユーザー空間へのコピー時に発生するフォールト処理を判定手段として利用し、境界外のメタデータ・アクセスを書き込みプリミティブに変換する。推測した書き込み先が書き込み可能なメモリにマッピングされている場合は sendmsg() が成功し、マッピングされていない場合は、カーネルをクラッシュさせることなく EFAULT エラーが返される。この処理を繰り返すことで、攻撃者は書き込み先の位置を特定し、core_pattern を含むカーネルページへの書き込みにリダイレクトできる。

CVE-2025-39964 exploit progression (Source: IDNSec)
CVE-2025-39964 exploit progression (Source: IDNSec)

研究者は、core_pattern をエクスプロイトのバイナリを実行するコマンドに置き換え、子プロセスを意図的にクラッシュさせることで、そのバイナリを root 権限のコアダンプ・ハンドラとして実行することに成功した。コンテナはホストのカーネルを共有し、検証された Docker 環境では AF_ALG にアクセスできるため、このエクスプロイトによりホスト上の root 権限を取得し、コンテナから脱出できた。

上流の修正では、ctx->write を使用して書き込みの排他制御が実装された。同じ AF_ALG ソケットに対して 2 番目の書き込み側が sendmsg() を実行しようとすると、最初の書き込み処理が完了するまで EBUSY エラーが返されるようになり、不整合な状態の発生が防止される。

管理者は、使用しているディストリビューションが提供するカーネル・アップデートを速やかに適用する必要がある。安定版の修正済みバージョンには、5.10.245/5.15.194/6.1.154/6.6.108/6.12.49/6.16.9 が含まれる。この変更により、メモリ不足による待機、処理の割り込み、コピー失敗、af_alg_sendmsg() 内のエラー処理に伴うクリーンアップの際にも、AF_ALG が従来前提としていた単一の書き込み側という条件が強制される。

Exploit Demo

CISA は 2026年9月18日、脆弱性 CVE-2025-39964 を Known Exploited Vulnerabilities (KEV) カタログに追加した。組織は、ホストやコンテナで使用するカーネルの一覧を作成し、インターネットに公開されたシステムやマルチテナント・システムを優先して対応するとともに、アップデートを適用するまでの期間、運用上可能な範囲でセキュリティ・ポリシーを用いて AF_ALG へのアクセスを制限する必要がある。