
Puerto de Go del PoC Copy Fail para CVE-2026-31431, una falla de authencesn del kernel de Linux que permite una escritura de 4 bytes en la caché de páginas mediante AF_ALG y splice. Incluye canalización de compilación multiarquitectura y documentación técnica detallada.
Este repositorio proporciona un port en Go del PoC público de Copy Fail y un pipeline de compilación reproducible para binarios Linux de múltiples arquitecturas.
Copy Fail (CVE-2026-31431) es una falla lógica del kernel de Linux en authencesn que permite una escritura determinista de 4 bytes en datos de page cache referenciados a través de AF_ALG + splice().
Utilice este proyecto únicamente en entornos donde esté explícitamente autorizado para realizar pruebas. No ejecute este PoC contra sistemas que no posea o para los cuales no tenga permiso por escrito para evaluar.
Si desea probar de inmediato sin compilar desde el código fuente, descargue un binario de release y ejecútelo:
wget https://github.com/ErdemOzgen/copy-fail-cve-2026-31431/releases/download/v1.0.1/copy-fail-cve-2026-31431_linux_amd64
chmod +x copy-fail-cve-2026-31431_linux_amd64
./copy-fail-cve-2026-31431_linux_amd64
Para otras arquitecturas, descargue el asset correspondiente desde la página de Releases de GitHub:
Compilar todos los targets Linux:
make clean build-linux
Compilar y generar checksums:
make clean checksums
Binarios de salida en dist/:
copy-fail-cve-2026-31431_linux_amd64copy-fail-cve-2026-31431_linux_arm64copy-fail-cve-2026-31431_linux_386copy-fail-cve-2026-31431_linux_armv7SHA256SUMSEjecución por defecto:
./copy-fail-cve-2026-31431_linux_amd64
Usar una ruta de target personalizada:
./copy-fail-cve-2026-31431_linux_amd64 -target /path/to/binary
Deshabilitar la ejecución de su posterior:
./copy-fail-cve-2026-31431_linux_amd64 -spawn-su=false
Imprimir metadatos de compilación:
./copy-fail-cve-2026-31431_linux_amd64 -version
Si la ejecución falla en el offset 0 con un error similar a:
error: copy chunk at offset 0: splice(pipe->AF_ALG): software caused connection abort
es probable que el kernel haya rechazado la ruta vulnerable AEAD in-place (por ejemplo, porque el host está parcheado para CVE-2026-31431 o algif_aead está mitigado/deshabilitado).
Verificaciones rápidas:
uname -r
grep -E "algif_aead|authencesn" /proc/modules
En sistemas remediados, se espera que este PoC falle.
Según la divulgación pública, la ruta vulnerable permite que un usuario local sin privilegios influya en una primitiva de escritura de 4 bytes dentro del contenido de page cache de archivos legibles bajo condiciones específicas.
La propiedad operativa importante es que la copia en memoria del page cache puede divergir de los bytes en disco durante el tiempo de ejecución, lo que puede hacer que el análisis de impacto no sea trivial para equipos que dependen únicamente de verificaciones de integridad a nivel de disco.
Copy Fail es notable porque fue reportado como:
A alto nivel, el problema se encuentra en la intersección de tres mecánicas:
AF_ALG.splice().authencesn.En el diseño vulnerable, los segmentos respaldados por page cache pueden vincularse en una forma de solicitud que posteriormente recibe escrituras durante el procesamiento del algoritmo, violando una suposición clave de que solo las regiones de destino previstas son modificadas.
En la ruta documentada, authencesn utiliza operaciones de scratch en el lado de destino alrededor del manejo del diseño ESN y realiza una escritura en un offset más allá del contrato esperado de salida de descifrado.
Cuando se combina con la configuración AEAD in-place y las referencias encadenadas de scatterlist, esta escritura puede aterrizar en memoria respaldada por page cache para regiones seleccionadas por el atacante.
La divulgación describe una evolución de múltiples commits:
authencesn se originó en la historia de integración anterior.AF_ALG introdujo alcanzabilidad desde userspace con interacción de splice().algif_aead combinó el flujo de origen y destino de una manera que hizo explotable esta intersección.La lección clave es el riesgo composicional: cambios individualmente razonables pueden volverse inseguros en combinación.
El write-up público y el PoC describen esta secuencia:
AF_ALG para authencesn(hmac(sha256),cbc(aes)).splice() para enrutar datos de archivos respaldados por page cache a través de la ruta de solicitud.La implementación en Go de este repositorio refleja la lógica de ese PoC público para investigación y validación en entornos autorizados.
La corrección reportada revierte la operación AEAD in-place vulnerable en algif_aead al comportamiento out-of-place.
Conceptualmente:
AF_ALG donde sea operativamente factible).Según el write-up público:
| Fecha | Evento |
|---|---|
| 2026-03-23 | Informe enviado al equipo de seguridad del kernel de Linux |
| 2026-03-24 | Acuse de recibo inicial |
| 2026-03-25 | Discusión/revisión del parche |
| 2026-04-01 | Corrección confirmada en mainline |
| 2026-04-22 | CVE-2026-31431 asignado |
| 2026-04-29 | Divulgación pública |
La investigación publicada acredita análisis de subsistemas asistido por IA y guiado por humanos, centrado en rutas de código criptográfico alcanzables desde userspace y en la procedencia de scatterlist/página bajo splice().
main.go: Port del PoC en Go.Makefile: targets de compilación Linux multi arquitectura deterministas..github/workflows/build.yml: flujo de trabajo de CI para compilación y assets de release.Archivo de flujo de trabajo: .github/workflows/build.yml
Disparadores:
mainv*workflow_dispatch manualComportamiento:
make clean checksums.v*.Flujo de release sugerido:
git tag v1.0.0
git push origin v1.0.0
| Distribución | Versión del Kernel |
|---|---|
| Ubuntu 24.04 LTS | 6.17.0-1007-aws |
| Amazon Linux 2023 | 6.18.8-9.213.amzn2023 |
| RHEL 10.1 | 6.12.0-124.45.1.el10_1 |
| SUSE 16 | 6.12.0-160000.9-default |