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
Herramientas/GitHubGitHub/astounds/copy-fail-cve-2026-31431
Escalada de PrivilegiosFrameworks de ExploitsAnálisis de VulnerabilidadesExplotaciónAprendizaje y EducaciónExplotación de BinariosLabs y Práctica
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
astounds/copy-fail-cve-2026-31431

copy-fail-CVE-2026-31431

Exploit de escalada de privilegios local para CVE-2026-31431, una sobrescritura de page-cache en el kernel de Linux mediante AF_ALG + splice. Incluye PoC, script de detección BPFtrace y entorno de pruebas QEMU para investigación de seguridad autorizada.

Ver Repositorio
15hace 5 mesesAún no revisado

CVE-2026-31431 — Copy Fail

Escalada de privilegios local en el kernel de Linux mediante AF_ALG + sobrescritura de page-cache con splice

CVE CVSS License

Solo para investigación de seguridad autorizada, pruebas de penetración y fines educativos. No lo utilice contra sistemas que no le pertenezcan o para los que no tenga permiso explícito por escrito.

Informe técnico


Tabla de contenidos

  • Descripción
  • Detalles de la vulnerabilidad
  • Estructura del repositorio
  • Inicio rápido
  • Detección
  • Requisitos
  • Mitigación
  • Entorno de prueba (opcional)
  • Referencias
  • Licencia

Descripción

CVE-2026-31431 es una vulnerabilidad de escalada de privilegios local (LPE) en el kernel de Linux. Un usuario local sin privilegios puede obtener acceso root combinando la interfaz de socket AF_ALG con splice() para realizar una escritura autenticada directamente en una página de page-cache perteneciente a un binario setuid.

El exploit sobrescribe el binario su en la caché de páginas sin modificar el inodo en disco, evadiendo los mecanismos de integridad que dependen únicamente de los metadatos del archivo o de las sumas de verificación a nivel de bloque.


Detalles de la vulnerabilidad

CampoValor
ID de CVECVE-2026-31431
TipoEscalada de privilegios local (LPE)
Puntuación CVSS v3.17.8 Alta — AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H (fuente: kernel.org)
Subsistemas del kernelcrypto/af_alg.c, mm/splice.c
Vector de ataqueLocal — se requiere una cuenta de usuario sin privilegios
Causa raízalgif_aead acepta sendfile() sobre un socket AEAD sin imponer semántica de copy-on-write en la página de page-cache mapeada antes de que splice() complete la transferencia

Entornos afectados

DistribuciónVersión del kernelArquitectura
Ubuntu 24.04 LTS6.17.0-1007-awsx86_64
Amazon Linux 20236.18.8-9.213.amzn2023x86_64
RHEL 10.16.12.0-124.45.1.el10_1x86_64
SUSE 166.12.0-160000.9-defaultx86_64
Raspberry Pi OS (Pi 5)6.12.75+rpt-rpi-2712aarch64

Estructura del repositorio

.
├── exploit.py    # PoC — sobrescritura de page-cache y escalada de privilegios
├── detect.bt     # Script de BPFtrace para detección en tiempo real
├── run-vm.sh     # Automatización del entorno de prueba QEMU (opcional)
├── PAYLOAD.md    # Análisis de codificación del payload (hex → zlib → ELF → shellcode)
└── LICENSE

Inicio rápido

Ejecute exploit.py como usuario local sin privilegios en cualquier sistema vulnerable — no se necesita sudo:

python3 exploit.py

El script realiza los siguientes pasos:

  1. Verifica el soporte del kernel para AF_ALG (algif_aead) y localiza el binario su.
  2. Selecciona y descomprime el payload apropiado para la arquitectura.
  3. Abre el binario su como descriptor de archivo sin procesar y sobrescribe sus páginas de page-cache mediante AF_ALG + sendfile.
  4. Prueba la escalada de privilegios. Si tiene éxito, abre un shell root.

Arquitecturas compatibles:

ArquitecturaVariantes
x86_64—
aarch64—
riscv64—
ppc64le—
armarmv5l, armv6l, armv7l
x86 32 bitsi386, i486, i586, i686
MIPS 64 bitsmips64, mips64el
LoongArchloong64, loongarch64
s390x—

Detección

Supervise los intentos de explotación en tiempo real con detect.bt. Requiere root:

sudo bpftrace detect.bt
# o
doas bpftrace detect.bt

El script rastrea tres indicadores por PID mediante una máscara de bits en @suspect[pid]:

BitSyscallIndicador
0x1socket(AF_ALG, SOCK_SEQPACKET)Socket AF_ALG creado
0x2setsockopt(SOL_ALG, ...)Operación criptográfica configurada
0x4sendmsg(MSG_MORE) + splice()Intento de sobrescritura de page-cache

Se activa una alerta cuando los tres bits están establecidos (@suspect[pid] == 0x7) en el mismo PID.


Requisitos

exploit.py

  • Python 3.6+
  • Kernel de Linux con el módulo AF_ALG/algif_aead cargado
  • Cuenta de usuario local sin privilegios (root no es necesario)

detect.bt

  • bpftrace ≥ 0.12
  • Privilegios de root (necesarios para el rastreo BPF)
# Ubuntu/Debian
sudo apt install bpftrace

# RHEL/CentOS/Fedora
sudo dnf install bpftrace

# Amazon Linux
sudo yum install bpftrace

# SUSE
sudo zypper install bpftrace

# Alpine
sudo apk add bpftrace

Mitigación

1. Parche (recomendado)

Actualice el paquete del kernel de su distribución a uno que incluya el commit de la línea principal a664bf3d603d, que revierte la optimización in-place de algif_aead de 2017 para que las páginas de page-cache ya no puedan terminar en la scatterlist de destino escribible. La mayoría de las distribuciones principales ya están distribuyendo la corrección.

2. Deshabilitar algif_aead (mientras se espera un parche)

blacklist se puede evadir con un modprobe algif_aead explícito. La directiva install .../bin/false anula por completo el comando de instalación, haciendo que cada intento de carga falle:

echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif.conf
sudo rmmod algif_aead 2>/dev/null || true

Qué rompe esto — casi nada

Descargar herramienta