Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-31431 — Uma explicação estruturada da CVE-2026-31431 (Copy Fail), conectando as três alterações do kernel que introduziram a vulnerabilidade e permitiram sua exploração. | Kitploit
Ferramentas/GitHubGitHub/themalwareguardian/cve-2026-31431
Escalada de PrivilégiosAnálise de VulnerabilidadesExploraçãoPapers e PesquisaAprendizado e EducaçãoEscape de ContêinerExploração de Binários
GitHubthemalwareguardian/cve-2026-31431

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2026-31431

Uma explicação estruturada da CVE-2026-31431 (Copy Fail), conectando as três alterações do kernel que introduziram a vulnerabilidade e permitiram sua exploração.

Ver Repositório
214há 4 mesesAinda não revisado

🐞 CVE-2026-31431 - Copy Fail



Uma falha lógica no template criptográfico authencesn, encadeada via AF_ALG e splice(), resultando em uma escrita controlada de 4 bytes no cache de páginas de qualquer arquivo legível do sistema. Sem condição de corrida, sem offsets, sem payload compilado. O mesmo script de 732 bytes obtém root em todas as distribuições Linux desde 2017.




📑 Índice

  • Visão Geral
  • Análise da Causa Raiz
    📂
    • A primitiva AF_ALG + splice()
    • A otimização in-place de 2017
    • A escrita fora dos limites em authencesn
    • Três mudanças inofensivas → uma falha crítica
    • Percorrendo o scatterlist até as páginas do page cache

  • Impacto
  • Distribuições Afetadas
  • Verificação - Fui Afetado?

  • Exploit
  • Passo a Passo do Exploit
    📂
    • Etapa 1 - Configuração do Socket
    • Etapa 2 - Construir a Escrita
    • Etapa 3 - Disparar a Escrita no Page Cache
    • Etapa 4 - Executar

  • Comparação com Dirty Cow / Dirty Pipe

  • A Correção
  • Divulgação
  • Referências



🔍 Visão Geral

CVE-2026-31431 - Copy Fail é uma falha lógica no template criptográfico authencesn do kernel Linux. Ela permite que um usuário local sem privilégios realize uma escrita controlada de 4 bytes no cache de páginas de qualquer arquivo legível do sistema, sem modificar o arquivo no disco.

O bug não existe em nenhum dos três componentes individualmente. Ele emerge da interação entre eles:``` 2011 ────────────────────────────────────────────────────────────────────── - authencesn added to the kernel (a5079d084f8b). - Uses the caller's destination scatterlist as scratch space. - Reorder ESN bytes before HMAC computation. - Only caller: internal xfrm layer. Harmless.

2015 ────────────────────────────────────────────────────────────────────── - algif_aead.c gains AEAD support with splice() path (104880a6b470). - splice() can deliver page cache pages to the TX scatterlist. - AF_ALG uses out-of-place operation: req->src != req->dst. - Page cache pages remain read-only. Not exploitable.

2017 ────────────────────────────────────────────────────────────────────── - In-place optimization in algif_aead.c (72548b093ee3). - Copies AAD+CT to RX buffer but chains authentication tag pages via sg_chain(). - Sets req->src = req->dst. - Page cache pages now reside in WRITABLE dst. - authencesn writes past boundary → page cache corruption.

2026 ────────────────────────────────────────────────────────────────────── - Copy Fail - CVE-2026-31431. Discovered by Theori / Xint Code. - Exploitable across all distros since 2017.

---
---
---



<div id='root-cause'/>

## ***🧬 Análise de Causa Raiz***

<div id='primitive'/>

### ***A primitiva AF_ALG + splice()***

AF_ALG (*[AF_ALG = 38](https://docs.kernel.org/crypto/userspace-if.html#user-space-api-general-remarks)*) é um tipo de socket que expõe a API criptográfica do kernel para o espaço de usuário sem privilégios. Um processo sem privilégios pode:

1. Abrir um socket AF_ALG / SOCK_SEQPACKET.
2. Chamar bind() para qualquer template AEAD disponível exposto pela API criptográfica do kernel.
3. Definir uma chave criptográfica via setsockopt(SOL_ALG, ALG_SET_KEY, ...) no algoritmo configurado.
4. Chamar accept() para obter um socket de operação dedicado que lidará com solicitações de criptografia e descriptografia
5. Enviar dados elaborados usando sendmsg() e receber o resultado processado via recvmsg(), interagindo totalmente com o subsistema criptográfico do kernel.

Ele é habilitado por padrão na configuração do kernel de todas as principais distribuições (CONFIG_CRYPTO_USER_API_AEAD=y).

**[splice(2)](https://man7.org/linux/man-pages/man2/splice.2.html)** transfere dados entre descritores de arquivo sem copiar - ele passa referências a páginas, não cópias. O fluxo relevante:```
open("/usr/bin/su")   ->  fd_file
pipe()                ->  pipe_rd, pipe_wr

# moves N bytes from the file into the pipe
# the pipe buffer now contains a reference to the same physical page in the page cache
splice(fd_file, pipe_wr, N)

# delivers that reference to the AF_ALG socket
# the TX scatterlist of algif_aead now points to the page cache page of /usr/bin/su
splice(pipe_rd, alg_fd, N)

The TX scatterlist do socket AF_ALG contém referências diretas às mesmas páginas físicas usadas pelo kernel para cada read(), mmap() e execve() do arquivo. Nenhuma cópia está envolvida.


A otimização in-place de 2017

Commit 72548b093ee3, algif_aead.c. Para descriptografia, a implementação:

  1. Copia o AAD e o texto cifrado do TX SGL (origem) para o buffer RX (destino) - uma cópia real.
  2. Encadeia as páginas da tag de autenticação via sg_chain(), mantendo referências de cache de páginas no RX SGL.
  3. Define req->src = req->dst, ambos apontando para o RX SGL combinado.``` TX SGL (input from splice): [ page cache page: AAD || CT || Tag ]

In-place operation: RX SGL (req->dst): [ user buffer: AAD (copy) || CT (copy) ] --sg_chain--> [ Tag (page cache pages) ] req->src = req->dst = RX SGL

Result: page cache pages from /usr/bin/su are now part of the WRITABLE scatterlist passed to the crypto algorithm.

<div id='authencesn'/>

### ***A escrita fora dos limites em authencesn***

authencesn é o wrapper AEAD do kernel usado pelo IPsec com Números de Sequência Estendidos (RFC 4303). O IPsec usa números de sequência de 64 bits:

- seqno_hi - 32 bits superiores (bytes 0-3 do AAD)
- seqno_lo - 32 bits inferiores (bytes 4-7 do AAD)

Apenas seqno_lo é transmitido no fio; seqno_hi é contexto implícito. Para o cálculo de HMAC, o authencesn precisa reorganizar esses bytes: seqno_hi no início e seqno_lo no final da entrada do hash.
Baixar ferramenta