flawopen.com/Teardowns/cve-2026-31431-linux-algif-aead-copy-fail
CVE-2026-31431: fallo Copy Fail del kernel Linux
Copy Fail es una escalada local de privilegios en la ruta AEAD de AF_ALG en Linux. Una optimización in-place confundió los mapeos de origen y destino; la corrección upstream restaura el procesamiento out-of-place y CISA incluye el CVE en KEV.[1], [2], [5]
Imagina a un bibliotecario que debe marcar una copia, pero un atajo lleva el lápiz al libro original. El atajo in-place permitía que una escritura para el resultado alcanzara otra página mapeada. La corrección procesa origen y destino por separado.[3], [8]
Conceptos Clave y Términos
AEAD- Cifrado autenticado con datos asociados: cifra datos y autentica metadatos adicionales sin cifrarlos.[8]
algif_aead- Implementación AF_ALG para algoritmos AEAD, incluida la ruta vulnerable de origen y destino.[3]
Page cache- Caché en memoria del kernel para archivos; escribir en una página mapeada puede afectar lecturas antes de escribir en disco.[8]
CWE-1288 / CWE-669- NVD muestra
CWE-1288conredhat-SADPcomo fuente de la asignación; la página de Red Hat también indica esa CWE. La alerta del Centro Canadiense de Ciberseguridad clasifica el problema comoCWE-669. Son clasificaciones atribuidas a fuentes distintas, no etiquetas intercambiables.[11], [7], [5], [9], [10]
Mapeos de marcos
- Referencia CWE para la debilidad descrita en esta guía: CWE-669 CWE-1288
- CISA KEV — añadido el 2026-05-01 — CVE-2026-31431
Análisis de Causa Raíz
El cambio de 2017 72548b093ee3 introdujo una optimización in-place en algif_aead. El origen y el destino pueden proceder de mapeos distintos. authencesn puede escribir datos temporales fuera de la salida prevista; la lista de dispersión in-place podía alcanzar una página de caché de archivo proporcionada mediante splice(). El aviso CVE de Linux describe la reparación como volver al procesamiento out-of-place y conservar la copia de datos asociados. Requiere acceso local y que la ruta vulnerable esté habilitada. CVSS 7,8 (AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H); no es una entrada remota sin autenticación.[1], [3], [8], [7], [9], [10]
Flujo de Ataque Paso a Paso
La escritura rebasa la salida
Durante authencesn, los datos temporales pueden salir de la región prevista y alcanzar la caché de un archivo pasado mediante splice().[8]
Código Fuente: Vulnerable vs. Seguro
Resumen conceptual, no código literal del kernel ni un parche compilable. El aviso upstream indica que la corrección revierte en gran medida 72548b093ee3, salvo la copia de datos asociados, porque origen y destino proceden de mapeos distintos.[3], [2]
Fragmento de origen: crypto/algif_aead.c (_aead_recvmsg)
/* Antes de la corrección: organizar la operación criptográfica en el mismo búfer. */
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);
/* Construya y encadene una scatterlist TX para la etiqueta de autenticación. */
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);
/* Después de la corrección: conservar una scatterlist de origen por solicitud. */
processed = used + ctx->aead_assoclen;
areq->tsgl_entries = af_alg_count_tsgl(sk, processed);
/* Asigne e inicialice areq->tsgl y, después, incorpore las páginas TX. */
af_alg_pull_tsgl(sk, processed, areq->tsgl);
tsgl_src = areq->tsgl;
/* Copie los datos asociados, pero mantenga separados el origen y el destino. */
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 Verificación de Seguridad para Ingeniería
- ✓Actualiza mediante el canal admitido por tu distribución y confirma en el aviso del paquete que
CVE-2026-31431está corregido; no deduzcas el estado solo por una versión upstream genérica.[1], [5], [7] - ✓Prioriza hosts con kernel compartido y usuarios locales no confiables: sistemas multiinquilino, workers de compilación y nodos de contenedores.[5], [7]
- ✓Si no puedes actualizar, aplica solo mitigaciones documentadas por el proveedor del sistema y valida su impacto; el código puede estar integrado en el kernel.[5], [7]
- ✓Revisa el inventario y procedencia de paquetes en las imágenes, incluidas imágenes inmutables y ramas LTS con correcciones retroportadas.[5], [7]
- ✓Los contenedores comparten el kernel del host; una escalada local puede debilitar el aislamiento por namespaces.[5], [8]
- ✓Tras parchear, sigue los backports del proveedor y registra los hosts vulnerables como trabajo de remediación; KEV no sustituye el parche.[1], [5]
Fuentes
- 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)