
Detector e prova de conceito de escalonamento local de privilégios para a vulnerabilidade de escrita temporária no page-cache do Linux algif_aead (CVE-2026-31431). Inclui teste não destrutivo e exploit que altera o UID para 0 no page-cache de /etc/passwd.
Autor: byt3l0rd
Detector e prova de conceito de LPE para o bug de escrita "scratch" no cache de páginas do Linux algif_aead /
authencesn, divulgado em 29/04/2026.
Artigo da divulgação: https://xint.io/blog/copy-fail-linux-distributions
Use apenas em hosts que você possui ou para os quais foi explicitamente contratado para avaliar. O LPE modifica o estado em memória (page cache), mas a técnica é uma escalada de privilégios real — executá-la em sistemas sem autorização é ilegal na maioria das jurisdições.
algif_aead executa operações AEAD in-place (req->src == req->dst).
Quando os dados de origem são fornecidos via splice() a partir de um arquivo regular, o
scatterlist de destino contém referências às páginas do page-cache do arquivo — ou seja, o kernel
escreverá nelas. O algoritmo
authencesn(hmac(sha256), cbc(aes)) então realiza uma escrita "scratch" de 4 bytes
do campo seqno_lo do AAD (bytes 4–7 do AAD fornecido via sendmsg) nesse destino, corrompendo a cópia
no page-cache do arquivo.
Como o arquivo em disco nunca é modificado, não há assinatura em disco;
a corrupção é observada apenas por leitores que compartilham o page cache. /etc/passwd e /usr/bin/su são
ambos legíveis por todos, portanto um usuário local sem privilégios pode corromper a visão do kernel em execução
de qualquer um deles.
Afetados: kernels que contêm o commit 72548b093ee3 (AEAD in-place, 2017)
sem o revert a montante. A divulgação confirmou Ubuntu 24.04 LTS,
Amazon Linux 2023, RHEL 14.3 e SUSE 16, mas o primitivo subjacente
é anterior a esse intervalo.
| Arquivo | Finalidade |
|---|---|
test_cve_2026_31431.py | Detector não destrutivo. Opera em um arquivo sentinela em um diretório temporário; nunca toca em binários do sistema. |
exploit_cve_2026_31431.py | LPE. Altera o UID do usuário em execução para 0 no page cache de /etc/passwd e, em seguida, invoca su para obter um shell root. |
Ambos os scripts são Python 3.10+ puro da biblioteca padrão.
# 1. Detectar
python3 test_cve_2026_31431.py
# saída 0 = não vulnerável, 2 = vulnerável, 1 = erro de teste
# 2. Explorar (interativo — o su solicitará sua própria senha)
python3 exploit_cve_2026_31431.py --shell