flawopen.com/Teardowns/cve-2026-31431-linux-algif-aead-copy-fail
CVE-2026-31431: falha Copy Fail no kernel Linux
Copy Fail é uma elevação local de privilégios no caminho AEAD do AF_ALG no Linux. Uma otimização in-place confundiu os mapeamentos de origem e destino; a correção upstream restaura o processamento out-of-place, e a CISA inclui o CVE no KEV.[1], [2], [5]
Imagine um bibliotecário que deve anotar uma cópia, mas um atalho leva o lápis ao livro original. O atalho in-place permitia que uma gravação destinada ao resultado atingisse outra página mapeada. A correção deixa de tratar os mapeamentos como equivalentes e processa origem e destino separadamente.[3], [8]
Conceitos Centrais e Termos
AEAD- Criptografia autenticada com dados associados: cifra dados e autentica metadados adicionais não cifrados.[8]
algif_aead- Implementação AF_ALG para algoritmos AEAD, incluindo o caminho vulnerável de origem e destino.[3]
Page cache- Cache em memória do kernel para arquivos; gravar em página mapeada pode afetar leituras antes da gravação em disco.[8]
CWE-1288 / CWE-669- O NVD lista
CWE-1288comredhat-SADPcomo fonte do mapeamento; a página da Red Hat também lista essa CWE. O alerta do Centro Canadense de Cibersegurança classifica o problema comoCWE-669. São classificações atribuídas a fontes diferentes, não rótulos intercambiáveis.[11], [7], [5], [9], [10]
Mapeamentos de frameworks
- Referência CWE para a fraqueza descrita neste guia: CWE-669 CWE-1288
- CISA KEV — adicionado em 2026-05-01 — CVE-2026-31431
Análise de Causa Raiz
A alteração de 2017 72548b093ee3 introduziu uma otimização in-place em algif_aead. Origem e destino podem vir de mapeamentos diferentes. O processamento authencesn pode gravar dados temporários fora da região de saída prevista; a lista de dispersão in-place podia atingir uma página de cache fornecida por splice(). O aviso CVE do Linux descreve a correção como retorno ao processamento out-of-place, mantendo a cópia dos dados associados. Exige acesso local e o caminho vulnerável habilitado. CVSS 7,8 (AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H); não é entrada remota sem autenticação.[1], [3], [8], [7], [9], [10]
Fluxo de Ataque Passo a Paso
A gravação ultrapassa a saída
Durante authencesn, dados temporários podem ultrapassar a saída prevista e atingir uma página de cache associada a arquivo fornecido por splice().[8]
Código-Fonte: Vulnerável vs. Seguro
Resumo conceitual, não código literal do kernel nem patch compilável. O aviso upstream diz que a correção reverte em grande parte 72548b093ee3, exceto a cópia dos dados associados, pois origem e destino vêm de mapeamentos diferentes.[3], [2]
Trecho de origem: crypto/algif_aead.c (_aead_recvmsg)
/* Antes da correção: organize a operação criptográfica no mesmo buffer. */
rsgl_src = areq->first_rsgl.sgl.sg;
if (ctx->enc) {
memcpy_sglist(areq->first_rsgl.sgl.sg, tsgl_src, processed);
af_alg_pull_tsgl(sk, processed, NULL, 0);
} else {
memcpy_sglist(areq->first_rsgl.sgl.sg, tsgl_src, outlen);
/* Monte e encadeie uma scatterlist TX para a tag de autenticação. */
areq->tsgl_entries = af_alg_count_tsgl(sk, processed, processed - as);
/* ... */
}
aead_request_set_crypt(&areq->cra_u.aead_req, rsgl_src,
areq->first_rsgl.sgl.sg, used, ctx->iv);
/* Após a correção: mantenha uma scatterlist de origem por solicitação. */
processed = used + ctx->aead_assoclen;
areq->tsgl_entries = af_alg_count_tsgl(sk, processed);
/* Alocar e inicializar areq->tsgl e então incluir nele as páginas TX. */
af_alg_pull_tsgl(sk, processed, areq->tsgl);
tsgl_src = areq->tsgl;
/* Copie os dados associados, mantendo origem e destino separados. */
rsgl_src = areq->first_rsgl.sgl.sg;
memcpy_sglist(rsgl_src, tsgl_src, ctx->aead_assoclen);
aead_request_set_crypt(&areq->cra_u.aead_req, tsgl_src,
areq->first_rsgl.sgl.sg, used, ctx->iv);
Lista de Verificação de Segurança para Engenharia
- ✓Atualize pelo canal suportado da distribuição e confirme no aviso do pacote que
CVE-2026-31431foi corrigido; não deduza o estado por uma versão upstream genérica.[1], [5], [7] - ✓Priorize hosts com kernel compartilhado e usuários locais não confiáveis: sistemas multi-tenant, workers de build e nós de contêineres.[5], [7]
- ✓Se não puder atualizar, use somente mitigação documentada pelo fornecedor do sistema e valide seu impacto; o código pode estar compilado no kernel.[5], [7]
- ✓Revise inventário e origem dos pacotes nas imagens da frota, incluindo imagens imutáveis e ramos LTS com correções retroportadas.[5], [7]
- ✓Contêineres compartilham o kernel do host; uma elevação local pode enfraquecer o isolamento por namespaces.[5], [8]
- ✓Após corrigir, acompanhe backports do fornecedor e rastreie hosts vulneráveis como remediação; a inclusão no KEV não substitui o patch.[1], [5]
Fontes
- Linux kernel CVE notice for CVE-2026-31431
- Upstream stable patch: revert algif_aead to out-of-place operation
- Stable patch source with the algif_aead.c code diff
- CVE record and CVSS vector
- Canadian Centre for Cyber Security alert AL26-009
- CISA Known Exploited Vulnerabilities catalog entry
- Red Hat CVE analysis and affected product status
- Xint technical disclosure: Copy Fail — 732 Bytes to Root on Linux
- MITRE CWE-1288: Improper Validation of Consistency within Input
- MITRE CWE-669: Incorrect Resource Transfer Between Spheres
- NVD — CVE-2026-31431 weakness mapping (source: redhat-SADP)