F1r0x
Vulnerabilidades
GitHub
DirtyCow

Dirty Cow - EDB-ID:40839

¿Qué es Dirty Cow?

Dirty Cow (Dirty copy-on-write) es una vulnerabilidad de seguridad informática para el kernel de Linux que afectó a todos los sistemas operativos basados en Linux, incluidos los dispositivos Android, que usaban versiones anteriores del kernel de Linux creadas antes de 2018.

Concretamente, afecta a las versiones desde la 2.6.22 hasta la 3.9 del kernel de Linux.

¿Cómo explotar la vulnerabilidad Dirty Cow?

Este exploit escrito en C, utiliza el exploit pokemon de la vulnerabilidad Dirty Cow.

El exploit aprovecha una vulnerabilidad en el código del kernel de Linux a través del cual genera automáticamente una nueva línea passwd(/etc/passdw).

Se le pedirá al usuario la nueva contraseña cuando se ejecute el binario.

A continuación, se realiza una copia de seguridad del archivo /etc/passwd original en /tmp/passwd.bak y sobrescribe la cuenta raíz con la línea generada. Esto podemos comprobarlo haciendo un cat en el archivo passwd:

cat /etc/passwd

Captura de pantalla 2022-08-04 031357

Después de ejecutar el exploit, debería poder iniciar sesión con el usuario recién originado. Por defecto se creará el Usurio firefart. Podemos cambiar el nombre dentro del exploit y proporcionarle el que queramos.

Captura de pantalla 2022-08-04 031524

Captura de pantalla 2022-08-04 031701

Exploit original: https://www.exploit-db.com/exploits/40839

Exploit en mi repositorio GitHub: https://github.com/F1r0x/f1r0x.github.io/blob/main/Exploits/DirtyCow/dirty.c

Como saber que un equipo posee la vulnerabilidad Dirty Cow:

Básicamente, para comprobar si un sistema Linux es vulnerable al Dirty Cow es revisando la versión del kernel. Si la versión del kernel está entre la 2.6.22 hasta la 3.9 es muy posible que sea vulnerable. Para comprobar la versión del kernel podemos utilizar el comando:

uname -a

Captura de pantalla 2022-08-04 034452

Instalación del exploit:

Para instalar el exploit, primero debemos tener acceso al sistema y poder descargar el binario en el equipo víctima, podemos descargarlo desde el repositorio original o desde GitHub si nos permite realizar un git clone o podemos copiarlo directamente desde el buscador y crear el archivo (mediante nano por ejemplo).

Podemos crear el archivo dirty.c utilizado nano y pegar el código del exploit.

Una vez descargado o creado lo debemos compilar con:

gcc -pthread dirty.c -o dirty -lcrypt 

Captura de pantalla 2022-08-04 031828

Ejecución del Exploit:

Ahora para ejecutar el binario utilizamos el siguiente comando:

./dirty

Captura de pantalla 2022-08-04 031905

Tras ejecutarlo nos pedirá que ingresemos una nueva contraseña.

Finalmente, una vez generada la nueva contraseña, se alojará el nuevo usuario en el /etc/passwd y podremos ingresar como ese usuario el cual tendrá privilegios de superusuario o root.

Para acceder al usuario:

 su firefart

Para acceder a través de un servicio ssh:

 ssh firefart@[Ip Vícitma]