
C-Exploit für CVE-2026-31431 (Copy Fail), der die Linux-AF_ALG-Splice-Schwachstelle angreift. Enthält Erkennungstest und Privilege Escalation über /usr/bin/su Page-Cache-Manipulation, um eine Root-Shell zu erhalten.
C-PoC für CVE-2026-31431 (Copy Fail), logisch abgestimmt auf den ursprünglichen Python-Exploit von theori-io/copy-fail-CVE-2026-31431.
Nur für autorisierte Sicherheitsforschung und Testumgebungen. Die Verwendung auf nicht autorisierten Systemen ist untersagt.
Unter Linux kann authencesn(hmac(sha256),cbc(aes)) in AF_ALG auf dem splice + AEAD-Pfad 4 Bytes aus der AAD in den Page Cache der Zieldatei schreiben (der Inhalt auf der Festplatte bleibt unverändert).
Das Exploit-Verhalten dieses Repositorys entspricht dem Original:
/usr/bin/susu aus; der manipulierte Page Cache lädt das gefälschte su, wodurch man in der Regel ohne Passwort eine Root-Shell erhält.copy-fail/
├── include/
│ ├── copy_fail.h
│ └── su_payload_zlib.h
├── src/
│ ├── alg.c # AF_ALG / splice 原语
│ ├── util.c # 前置检查
│ ├── test_main.c # 漏洞检测
│ └── exploit_main.c # 提权
├── Makefile
└── README.md
Ubuntu / Debian:
sudo apt install build-essential zlib1g-dev
cd copy-fail
make
Erzeugt:
| Artefakt | Beschreibung |
|---|---|
bin/copy-fail-test | Schwachstellenerkennung (temporäre Sentinel-Datei; verändert keine Systemdateien) |
bin/copy-fail-exploit | Privilege Escalation (modifiziert den Page Cache von /usr/bin/su und führt danach exec su aus) |
Wenn nach der Kompilierung auf einem neueren System GLIBC_2.34 / GLIBC_2.38 not found gemeldet wird, auf dem Kompilierrechner ausführen:
make static
bin/copy-fail-test und bin/copy-fail-exploit auf die Zielmaschine kopieren und dort ausführen. Alternativ kann make auch auf der Zielmaschine direkt am Quellcode ausgeführt werden (dynamische Verlinkung, kleinere Dateigröße).
./bin/copy-fail-test
echo $?
| Exit-Code | Bedeutung |
|---|---|
| 0 | Keine Schwachstellenmerkmale festgestellt / Voraussetzungen nicht erfüllt |
| 2 | Schwachstellenmerkmale vorhanden |
| 1 | Fehler während des Tests |
./bin/copy-fail-exploit
id
Keine Ausgabe ist normal und beabsichtigt; bei Erfolg erhält man eine Root-Shell. Bei einem Fehler liefert echo $? in der Regel 1.
AF_ALG-Sockets erstellenauthencesn(hmac(sha256),cbc(aes)) kann gebunden werden/usr/bin/su ist vorhandensplice kann in den AF_ALG-Socket schreibenWenn der Detektor cannot be instantiated (No such file or directory) meldet:
grep -r algif_aead /etc/modprobe.d/
sudo modprobe algif_aead
grep authencesn /proc/crypto
Einige Distributionen deaktivieren algif_aead per modprobe (z. B. Ubuntu-USN-Mitigation); dies muss auf einer experimentellen Maschine mit Root-Rechten rückgängig gemacht werden, bevor man erneut testet.
Nach dem Privilege-Escalation-Test (in der Root-Shell) kann der verunreinigte Page Cache verworfen werden:
echo 3 > /proc/sys/vm/drop_caches
Oder die virtuelle Maschine neu starten.