
PoC — WSL2 (6.6.87.2-microsoft-standard-WSL2) 上で ./sley 実行後、uid=1000(raken) → uid=0(root)
CVE-2026-43494 (PinTheft) 向けのシングルファイル PoC です。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 には カーネル ≥ 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
本ソフトウェアは研究および教育を目的として現状のまま (as-is) 提供されます。適用される法律を遵守し、所有していないシステムをテストする前に書面による許可を取得することは、利用者の責任です。
MIT — 追加されている場合は、リポジトリのライセンスファイルを参照してください。責任を持って使用してください。
| 項目 | 詳細 |
|---|
| CVE | CVE-2026-43494 |
| 公開名 | PinTheft |
| 対象コンポーネント | net/rds — zerocopy 送信パス (rds_message_zcopy_from_user) |
| プリミティブ | ページピン失敗時の二重 put_page() → FOLL_PIN 参照の窃取 |
| 武器化 | io_uring 固定バッファ + 失敗する RDS zerocopy → ページキャッシュ UAF 書き込み |
| 影響 | 脆弱な構成におけるローカル root 権限の取得 |
| アップストリーム修正 | e17492979319 |
| 対策 | 備考 |
|---|
| カーネルのパッチ適用 | コミット e17492979319 を含む安定版修正を適用する |
| RDS の無効化 | 不要な場合は modprobe -r rds_tcp rds を実行し、自動ロードもブロックする |
| io_uring の制限 | sysctl で kernel.io_uring_disabled=1 または 2 を設定する |
| 最小特権 | 不要な SUID バイナリを削除する。堅牢化されたプロファイルのコンテナを使用する |
| 監視 | RDS zerocopy 失敗のバーストと io_uring バッファ登録パターンに対してアラートを発報する |