
Exploit en C para CVE-2026-31431 (Copy Fail) dirigido a la vulnerabilidad de splice AF_ALG en Linux. Incluye prueba de detección y escalada de privilegios mediante manipulación de la caché de páginas de /usr/bin/su para obtener una shell de root.
CVE-2026-31431 (Copy Fail) PoC en C, alineado lógicamente con el exploit Python original theori-io/copy-fail-CVE-2026-31431.
Solo para investigación de seguridad autorizada y entornos de prueba. Prohibido su uso en sistemas no autorizados.
En Linux AF_ALG, authencesn(hmac(sha256),cbc(aes)) en la ruta splice + AEAD puede escribir 4 bytes del AAD en el caché de páginas del archivo objetivo (el contenido del disco no cambia).
El exploit de este repositorio se comporta de manera idéntica al original:
/usr/bin/susu, que carga el su falso desde el caché de páginas alterado, obteniendo normalmente un shell root sin contraseñacopy-fail/
├── include/
│ ├── copy_fail.h
│ └── su_payload_zlib.h
├── src/
│ ├── alg.c # AF_ALG / splice 原语
│ ├── util.c # 前置检查
│ ├── test_main.c # 漏洞检测
│ └── exploit_main.c # 提权
├── Makefile
└── README.md
Ubuntu / Debian:
sudo apt install build-essential zlib1g-dev
cd copy-fail
make
Genera:
| Producto | Descripción |
|---|---|
bin/copy-fail-test | Detección de vulnerabilidad (archivo centinela temporal, no modifica archivos del sistema) |
bin/copy-fail-exploit | Escalada de privilegios (modifica el caché de páginas de /usr/bin/su y luego exec su) |
Después de compilar en un sistema con versión reciente, si aparece GLIBC_2.34 / GLIBC_2.38 not found, ejecute en la máquina de compilación:
make static
Copie bin/copy-fail-test y bin/copy-fail-exploit a la máquina objetivo para ejecutarlos. También puede ejecutar make directamente en el código fuente en la máquina objetivo (enlace dinámico, tamaño más pequeño).
./bin/copy-fail-test
echo $?
| Código de salida | Significado |
|---|---|
| 0 | No muestra características de vulnerabilidad / condiciones previas no cumplidas |
| 2 | Presenta características de vulnerabilidad |
| 1 | Error durante la prueba |
./bin/copy-fail-exploit
id
Sin salida es normal por diseño; si tiene éxito, se obtiene un shell root. En caso de fallo, echo $? normalmente devuelve 1.
AF_ALGbind el algoritmo authencesn(hmac(sha256),cbc(aes))/usr/bin/susplice puede escribir en el socket AF_ALGSi el detector muestra cannot be instantiated (No such file or directory):
grep -r algif_aead /etc/modprobe.d/
sudo modprobe algif_aead
grep authencesn /proc/crypto
Algunas distribuciones deshabilitan algif_aead mediante modprobe (por ejemplo, mitigación de Ubuntu USN); es necesario deshabilitarlo en una máquina de prueba con root antes de probar.
Después de la prueba de escalada de privilegios (en el shell root), se puede descartar la contaminación del caché de páginas:
echo 3 > /proc/sys/vm/drop_caches
O reiniciar la máquina virtual.