
CVE-2026-43494(PinTheft)の概念実証(PoC):RDS zerocopy 参照カウントバグ + io_uring fixed buffers を介した Linux LPE → SUID ページキャッシュの上書き。許可された研究のみ。
概念実証 — WSL2(6.6.87.2-microsoft-standard-WSL2)で ./sley 実行後に uid=1000(raken) → uid=0(root)
CVE-2026-43494(PinTheft)のシングルファイル概念実証です。RDS zerocopy の参照カウントバグとio_uring 固定バッファを連鎖させ、SUID root バイナリのページキャッシュを上書きする Linux カーネルローカル特権昇格です。
免責事項: このリポジトリは認可されたセキュリティ研究、教育、および防御的テストのみを目的としています。所有していない、またはテストする明示的な許可がないシステムに対して実行することは違法かつ非倫理的です。著者は悪用によるいかなる責任も負いません。
当初の公開研究と PoC は V12 Security チーム(Aaron Esau)によって公開されました。SLEY は、ラボでの使用と学習を目的とした、独立したコンパクトな再実装で、スタイル付きターミナル UI を備えています。
flowchart LR
A[mmap anonymous page] --> B[io_uring: register fixed buffer]
B --> C[Clone buffer table to 2nd ring]
C --> D[1024× failing RDS zerocopy sends]
D --> E[Drain FOLL_PIN bias / steal refs]
E --> F[munmap → page freed]
F --> G[SUID binary page reclaimed in page cache]
G --> H[Stale io_uring ptr writes ELF stub]
H --> I[exec SUID → root shell]
su、mount、passwd など)を探します。FOLL_PIN バイアス ≈ 1024)。execve すると、注入されたスタブが root として実行されます。CONFIG_RDS=y かつ CONFIG_RDS_TCP=yCONFIG_IO_URING=y かつ kernel.io_uring_disabled = 0rds / rds_tcp モジュールがロードされている(または非特権ユーザーが自動ロード可能)IORING_REGISTER_CLONE_BUFFERS API には Kernel ≥ 6.13 が必要sudo apt install build-essential linux-libc-dev # Debian/Ubuntu
# or equivalent headers package on your distro
# Patched? (example — adjust for your distro)
uname -r
grep -r CVE-2026-43494 /usr/share/doc/linux* 2>/dev/null || true
# RDS available?
grep CONFIG_RDS /boot/config-$(uname -r) 2>/dev/null
lsmod | grep -E '^rds'
# io_uring enabled?
cat /proc/sys/kernel/io_uring_disabled # expect 0
gcc -O2 -Wall -Wextra -o sley sley.c
静的リンク(任意。最小限のラボイメージ用):
gcc -O2 -static -o sley sley.c
./sley
すべてのステータス出力は stderr に送られます(ANSI 256色 UI、プログレスバー、フェーズ別ログ)。ボックス描画 UI には端末が UTF-8 と truecolor/256色 に対応している必要があります。
フェーズ例:
PHASE 1 │ Reconnaissance
PHASE 2 │ Memory & io_uring setup
PHASE 3 │ Pin reference theft (RDS zerocopy)
PHASE 4 │ Page cache overwrite & privesc
攻撃が成功する構成では、チェーンが完了し、最初のページが上書きされた状態で発見した SUID バイナリに引き継がれます。レースとカーネル状態が噛み合えば、root シェルが得られます。
パッチ適用済みカーネル、堅牢化されたホスト、または RDS/io_uring が存在しない場合、PoC は早期に失敗します(SUID ターゲットが見つからない、mmap/io_uring/socket エラーなど)。
ディストリビューション固有のセキュリティアドバイザリにはバックポートされたパッチが含まれる場合があります。ベンダーのカーネルセキュリティキューを追跡してください。
.
├── README.md # This file
├── proof-of-concept.jpg # Screenshot: successful LPE (uid 1000 → root)
├── sley.c # Single-file PoC + terminal UI
└── .gitignore
このソフトウェアは研究および教育目的で現状のまま提供されます。適用される法律を遵守し、所有していないシステムをテストする前に書面による許可を得る責任はあなたにあります。
MIT — 追加された場合はリポジトリのライセンスファイルを参照してください。責任を持って使用してください。
| 項目 | 詳細 |
|---|
| CVE | CVE-2026-43494 |
| 公開名 | PinTheft |
| コンポーネント | net/rds — zerocopy send パス(rds_message_zcopy_from_user) |
| プリミティブ | ページピン失敗時に二重 put_page() → FOLL_PIN 参照を奪取 |
| 武器化 | io_uring 固定バッファ + RDS 失敗 zerocopy → ページキャッシュ UAF 書き込み |
| 影響 | 脆弱な構成でのローカル root 権限取得 |
| 上流修正 | e17492979319 |
| アクション | 備考 |
|---|
| カーネルにパッチを適用 | commit e17492979319 を含む安定版修正を適用 |
| RDS を無効化 | 不要な場合は modprobe -r rds_tcp rds(および自動ロードのブロック) |
| io_uring を制限 | sysctl で kernel.io_uring_disabled=1 または 2 |
| 最小権限 | 不要な SUID バイナリを削除。堅牢化されたプロファイルのコンテナを使用 |
| 監視 | RDS zerocopy 失敗のバーストと io_uring バッファ登録パターンをアラート |