🐧Linux - Exploits del kernel
Existen vulnerabilidades de nivel de kernel para una variedad de versiones del kernel de Linux. Un ejemplo muy conocido es Dirty COW (CVE-2016-5195). Estas vulnerabilidades aprovechan las vulnerabilidades del kernel para ejecutar código con privilegios de root. Es muy común encontrar sistemas que son vulnerables a vulnerabilidades del kernel. Puede resultar difícil realizar un seguimiento de los sistemas antiguos, y pueden quedar excluidos de la aplicación de parches debido a problemas de compatibilidad con determinados servicios o aplicaciones.
La escalada de privilegios mediante un exploit del kernel puede ser tan sencilla como descargarlo, compilarlo y ejecutarlo. Algunos de estos exploits funcionan de inmediato, mientras que otros requieren modificaciones. Una forma rápida de identificar los exploits es emitir el comando uname -a
y buscar la versión del kernel en Google.
Nota: Las vulnerabilidades del kernel pueden causar inestabilidad en el sistema, por lo que se debe tener cuidado al ejecutarlas en un sistema de producción.
Explotación del kernel
Comencemos por verificar el nivel del kernel y la versión del sistema operativo Linux.
Podemos ver que estamos en Linux Kernel 4.4.0-116 en una caja Ubuntu 16.04.4 LTS. Una búsqueda rápida en Google de "PoC" linux 4.4.0-116-generic exploit
nos muestra este exploit. A continuación, lo descargamos al sistema mediante wget
u otro método de transferencia de archivos. Podemos compilar el código del exploit mediante gcc y configurar el bit ejecutable mediante chmod +x
.
A continuación, ejecutamos el exploit y, con suerte, logramos ingresar a un shell root.
Finalmente podemos confirmar el acceso root a la máquina:
Caso práctico
Aumentar los privilegios utilizando un exploit de kernel diferente. Enviar el contenido del archivo flag.txt en el directorio /root/kernel_exploit.
Verificar versión del Kernel
Búsqueda de exploits
Buscando en Google encontramos el siguiente exploit:
Vamos a usarlo de la siguiente manera:
Nos descargamos el repositorio en local
Entramos al directorio
Creamos un servidor local con python para enviar el exploit
Recibimos el exploit con wget
Compilamos el exploit con gcc y le damos permisos de ejecución
Ejecutamos el exploit
Recibimos un shell de root
Accedemos al directorio
/root
y nos hacemos con la flag
Última actualización