
Exploit de prueba de concepto para CVE-2024-48990, que demuestra la escalada local de privilegios en needrestart mediante la manipulación de PYTHONPATH. Incluye script de ejecución y binario de payload para pruebas.
Needrestart es una utilidad ampliamente utilizada en sistemas Linux (viene por defecto en muchas versiones de Ubuntu) que comprueba, tras una actualización de software, si algún servicio o el propio sistema necesita reiniciarse. Analizando los procesos en ejecución, determina si están utilizando librerías actualizadas o si necesitan reiniciarse para que los cambios surtan efecto.
Cuando needrestart detecta un proceso que ejecuta un intérprete de Python, lee la variable de entorno PYTHONPATH asociada a ese proceso desde /proc/[pid]/environ y la establece antes de lanzar su propio intérprete de Python para el análisis.
Si el proceso original pertenece a un atacante local, el atacante puede manipular PYTHONPATH para que apunte a una librería maliciosa.
Como resultado, cuando needrestart ejecuta el intérprete de Python con privilegios de root y el PYTHONPATH manipulado, termina ejecutando el código del atacante, lo que conduce a una escalada de privilegios a root.
Esta vulnerabilidad afecta únicamente a las versiones de needrestart anteriores a la 3.8. Las versiones 3.8 y posteriores incluyen un parche que sanea adecuadamente variables de entorno como PYTHONPATH antes de invocar al intérprete de Python, evitando la escalada de privilegios mediante la manipulación maliciosa del entorno.
Clona el repositorio.
En runner.sh, modifica la IP utilizada para descargar el binario compilado de modo que apunte a tu propia máquina.
En la máquina del atacante, otorga permisos de ejecución y ejecuta binary.sh.
Configura un servidor HTTP:
$ python3 -m http.server
