
CVE-2026-43494 (PinTheft) の概念実証: io_uring固定バッファを用いたRDS zerocopy参照カウントバグを悪用し、SUIDバイナリのページキャッシュを上書きすることでLinuxカーネルのローカル権限昇格を実現する。
概念実証 — `uid=1000(raken)` → `uid=0(root)` after `./sley` on WSL2 (`6.6.87.2-microsoft-standard-WSL2`)
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 で SUID バイナリを実行し、注入されたスタブが root として動作する。CONFIG_RDS=y かつ CONFIG_RDS_TCP=yCONFIG_IO_URING=y かつ kernel.io_uring_disabled = 0rds / rds_tcp モジュールがロードされている(または非特権ユーザーが自動ロード可能)IORING_REGISTER_CLONE_BUFFERS API のため カーネル ≥ 6.13sudo apt install build-essential linux-libc-dev # Debian/Ubuntu
# またはお使いのディストリビューションの同等のヘッダーパッケージ
# 修正済み? (例 — お使いのディストリビューションに合わせて調整)
uname -r
grep -r CVE-2026-43494 /usr/share/doc/linux* 2>/dev/null || true
# RDS 利用可能?
grep CONFIG_RDS /boot/config-$(uname -r) 2>/dev/null
lsmod | grep -E '^rds'
# io_uring 有効?
cat /proc/sys/kernel/io_uring_disabled # 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 # このファイル
├── proof-of-concept.jpg # スクリーンショット: 成功した LPE (uid 1000 → root)
├── sley.c # 単一ファイル PoC + ターミナル UI
└── .gitignore
このソフトウェアは研究および教育目的で 現状のまま 提供されます。適用される法律を遵守し、所有していないシステムをテストする前に書面による許可を得る責任はあなたにあります。
MIT — 必要に応じてリポジトリのライセンスファイルを参照してください。責任を持って使用してください。
| 項目 | 詳細 |
|---|
| CVE | CVE-2026-43494 |
| 公開名 | PinTheft |
| コンポーネント | net/rds — zerocopy 送信パス(rds_message_zcopy_from_user) |
| プリミティブ | ページピン失敗時の二重 put_page() → FOLL_PIN 参照の窃取 |
| 悪用方法 | io_uring 固定バッファ + RDS 失敗 zerocopy → ページキャッシュの UAF 書き込み |
| 影響 | 脆弱な設定でローカルルート取得 |
| 上流修正 | e17492979319 |
| 対策 | 備考 |
|---|
| カーネルのパッチ適用 | コミット e17492979319 を含む安定版修正を適用 |
| RDS の無効化 | 不要な場合は modprobe -r rds_tcp rds(および自動ロードのブロック) |
| io_uring の制限 | sysctl で kernel.io_uring_disabled=1 または 2 |
| 最小権限 | 不要な SUID バイナリを削除、強化プロファイルでコンテナを使用 |
| 監視 | RDS zerocopy 失敗のバースト + io_uring バッファ登録パターンを警告 |