Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-31431-PoC — Prueba de concepto del exploit para CVE-2026-31431, una escalada local de privilegios en el kernel de Linux mediante la escritura en la caché de páginas de AF_ALG, que permite obtener acceso root en las principales distribuciones. | Kitploit
Herramientas/GitHubGitHub/sl4ck0th/cve-2026-31431-poc
Escalada de PrivilegiosFrameworks de ExploitsAnálisis de VulnerabilidadesExplotaciónRed TeamingEscape de ContenedoresExplotación de Binarios
GitHub

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
sl4ck0th/cve-2026-31431-poc

CVE-2026-31431-PoC

Prueba de concepto del exploit para CVE-2026-31431, una escalada local de privilegios en el kernel de Linux mediante la escritura en la caché de páginas de AF_ALG, que permite obtener acceso root en las principales distribuciones.

Ver Repositorio
4167hace 5 mesesAún no revisado

PoC CVE-2026-31431

Escalada de Privilegios Local en el Kernel de Linux mediante Escritura en Caché de Páginas de algif_aead ("Copy Fail")

CVE-2026-31431 Copy Fail

Autor: Van Glenndon Enad

Descubrimiento Original: Theori / Xint Code Research Team (Taeyang Lee)

Publicado: 29 de abril de 2026

Severidad: Alta

Puntuación CVSS v3.1: 7.8

Vector CVSS v3.1: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

CWE: CWE-787 (Escritura Fuera de Límites), CWE-269 (Gestión Inadecuada de Privilegios)


Tabla de Contenidos

  1. Resumen Ejecutivo
  2. Software Afectado
  3. Descripción de la Vulnerabilidad
  4. Análisis de la Causa Raíz
  5. Requisitos Previos
  6. Cadena de Explotación
  7. Análisis del Payload
  8. Prueba de Concepto
  9. Impacto
  10. Remediación
  11. Referencias
  12. Cronología de Divulgación

Resumen Ejecutivo

CVE-2026-31431, apodada públicamente "Copy Fail", es una vulnerabilidad de escalada de privilegios local (LPE) de alta severidad en el módulo algif_aead del kernel de Linux — la interfaz de cifrado AEAD de la API criptográfica de espacio de usuario del kernel (AF_ALG). El fallo se origina en una optimización de rendimiento (operación in-place) introducida en 2017 mediante el commit 72548b093ee3, que inadvertidamente permitió que páginas de archivos respaldadas por caché de páginas se colocaran en la lista dispersa (scatterlist) de destino escribible durante una operación criptográfica AEAD.

Al encadenar tres subsistemas del kernel — sockets AF_ALG, la llamada al sistema splice() y el comportamiento de escritura temporal del algoritmo authencesn — un usuario local sin privilegios puede realizar una escritura controlada de 4 bytes en la caché de páginas de cualquier archivo legible. Apuntando a un binario setuid como /usr/bin/su, esta escritura corrompe la imagen ejecutable en memoria sin modificar el archivo en disco, evadiendo así las herramientas de integridad de archivos en disco. La escalada de privilegios resultante a root es determinista — no requiere condición de carrera, ni offsets del kernel específicos por distribución, ni privilegios especiales. Un exploit PoC de Python de 732 bytes publicado públicamente entrega shells de root en Ubuntu, Amazon Linux, RHEL y SUSE en una única ejecución sin modificaciones.


Software Afectado

ComponenteDetalles
Subsistema Afectadocrypto/algif_aead.c — Interfaz AEAD AF_ALG del kernel de Linux
Vulnerabilidad IntroducidaKernel de Linux 4.14 (2017), commit 72548b093ee38a6d4f2a19e6ef1948ae05c181f7
Versiones Corregidas6.18.22, 6.19.12, 7.0
Commit de Correccióna664bf3d603dc3bdcf9ae47cc21e0daec706d7a5
Distribuciones VerificadasUbuntu 24.04 LTS, Amazon Linux 2023, RHEL 10.1, SUSE 16
Afectadas ImplícitamenteDebian, Arch, Fedora, Rocky, AlmaLinux, Oracle Linux y cualquier distribución que ejecute un kernel sin parchear compilado desde 2017

La vulnerabilidad ha estado presente silenciosamente en casi todas las distribuciones principales de Linux durante casi nueve años. Según Theori, AF_ALG está habilitado en prácticamente la configuración de kernel predeterminada de todas las distribuciones, lo que significa que no se necesitan banderas de compilación ni configuraciones especiales para que un sistema sea vulnerable.


Descripción de la Vulnerabilidad

El kernel de Linux expone primitivas criptográficas al espacio de usuario a través de la interfaz de sockets AF_ALG (crypto/algif_aead.c). En 2017, se fusionó una optimización de rendimiento que permitía a algif_aead realizar operaciones AEAD in-place — reutilizando el buffer de memoria de origen como destino — para evitar copias de datos innecesarias.

El fallo surge cuando el espacio de usuario introduce datos en el socket AF_ALG mediante la llamada al sistema splice(). En este caso, las páginas colocadas en la lista dispersa de origen son páginas de caché de páginas — memoria compartida gestionada por el kernel que respalda el archivo fragmentado. Debido a la optimización in-place que establece req->src = req->dst, estas páginas de caché de páginas terminan en la lista dispersa de destino escribible. El algoritmo authencesn posteriormente realiza una escritura temporal en dst[assoclen + cryptlen], que se resuelve en un offset dentro de esas páginas de caché de páginas — escribiendo efectivamente datos controlados por el atacante en la imagen en memoria del archivo fragmentado.

Debido a que la caché de páginas es compartida en todo el host, incluidos los contenedores, una escritura desde un proceso afecta a las páginas en caché de ese archivo para todos los procesos y contenedores en el mismo kernel.


Análisis de la Causa Raíz

La Optimización In-Place de 2017

El cambio problemático en algif_aead.c estableció req->src = req->dst y encadenó páginas de etiqueta (tag) de la lista dispersa de origen en la lista dispersa de salida mediante sg_chain():

/* Optimización in-place de 2017 — commit 72548b093ee3 */
req->src = req->dst;             /* origen == destino */
sg_chain(dst, n + 1, src_tag);   /* páginas de etiqueta encadenadas en dst escribible */

Cuando se usa splice() para introducir un archivo en el socket, las páginas de la lista dispersa están respaldadas por caché de páginas, no por memoria anónima privada. Encadenarlas en la lista dispersa dst escribible viola la suposición de que el destino es memoria privada escribible.

La Escritura Temporal de authencesn

La plantilla authencesn escribe un valor temporal de número de secuencia (seqno_lo, bytes 4–7 del AAD) en dst[assoclen + cryptlen]. Debido a que dst ahora contiene páginas de caché de páginas del archivo fragmentado, esta escritura aterriza en un offset controlado por el atacante dentro de la imagen en memoria del archivo:

/* Escritura temporal de authencesn — offset determinado por assoclen + cryptlen */
scatterwalk_map_and_copy(seqno, dst,
                         req->assoclen + req->cryptlen,
                         sizeof(seqno), 1);    /* escribe en la caché de páginas */

Los 4 bytes escritos corresponden a seqno_lo, que el atacante controla mediante el payload AAD enviado a través de sendmsg().

La Superficie de Ataque de Tres Componentes

Socket AF_ALG (SOCK_SEQPACKET)
    │
    │  splice() — entrega páginas respaldadas por archivos al socket
    ▼
Optimización in-place de algif_aead
    │  req->src = req->dst
    │  las páginas de caché de páginas aterrizan en la lista dispersa escribible
    ▼
Escritura temporal de authencesn
    │  escribe seqno_lo en dst[assoclen + cryptlen]
    │  = 4 bytes elegidos por el atacante en un offset de archivo elegido por el atacante
    ▼
Corrupción de la caché de páginas (sin cambio en disco)

Por Qué Funciona la Corrección

La corrección (a664bf3d603d) revierte por completo la optimización in-place — algif_aead ahora siempre opera out-of-place, asignando un buffer de destino separado. Dado que el origen y el destino ahora provienen de mapeos diferentes, las páginas de caché de páginas en src nunca pueden ser alcanzadas por la ruta de escritura de dst.


Requisitos Previos

Descargar herramienta