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.
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
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.
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
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
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
Ahora para ejecutar el binario utilizamos el siguiente comando:
./dirty
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
firefart
: Es el usuario predeterminado del exploit.Para acceder a través de un servicio ssh
:
ssh firefart@[Ip Vícitma]