
# Simulador educativo en Python de CVE-2026-22807 Simulador educativo en Python que replica CVE-2026-22807, una vulnerabilidad de ejecución remota de código (RCE) en la cadena de suministro de IA mediante TOCTOU en la carga de modelos. Incluye biblioteca vulnerable, script de PoC y generación dinámica de payloads para investigación y enseñanza en seguridad.
⚠️ Aviso legal / Disclaimer
Este proyecto es exclusivamente para fines de investigación y educación en seguridad, y tiene como objetivo demostrar el principio de ataque a la cadena de suministro (Remote Code Execution) durante el proceso de carga de modelos de IA. No utilice los modelos maliciosos generados en entornos de producción, y está estrictamente prohibido utilizar este proyecto para cualquier actividad de ataque ilegal. Los desarrolladores no asumen ninguna responsabilidad legal derivada del uso indebido.
Este es un campo de entrenamiento ligero en Python, diseñado para simular y reproducir CVE-2026-22807 (una lógica típica de vulnerabilidad en la cadena de suministro de IA).
Este campo de entrenamiento demuestra el problema de condición de carrera (TOCTOU) cuando los frameworks de inferencia de IA (como vLLM, Transformers, etc.) cargan modelos:
Si el cargador, antes de verificar trust_remote_code=False, importa prematuramente el código Python proporcionado por el usuario para analizar la arquitectura del modelo (AutoConfig/AutoModel), un atacante puede eludir los controles de seguridad y lograr ejecución remota de código (RCE).
| Nombre de archivo | Rol | Descripción |
|---|---|---|
vulnerable_lib.py | 🎯 Víctima (Victim) | Simula una biblioteca cargadora de modelos de IA vulnerable (MiniLLM). Contiene el orden lógico erróneo. |
poc_dynamic.py | 🔫 Atacante (Attacker) | Script de ataque automatizado. Se encarga de generar el directorio del modelo malicioso y desencadenar el proceso de carga. |
dynamic_evil_model/ | 📦 Carga maliciosa | Directorio generado automáticamente tras la ejecución del script, que contiene config.json y malicious.py con código inyectado. |
Asegúrese de tener instalado Python 3.x. Este campo de entrenamiento no tiene dependencias de bibliotecas de terceros.
Ejecute directamente el script de ataque; por defecto ejecuta el comando whoami.
python poc_dynamic.py
Salida esperada: Verá que la consola imprime la cadena PWNED junto con el nombre de usuario actual del sistema, y solo después el programa lanzará la excepción "Remote code not allowed". Esto demuestra que la defensa ha sido eludida.
Puede pasar cualquier comando del sistema como parámetro al script para generar una "bomba" específica.
Ejemplo en Windows (abrir calculadora):
python poc_dynamic.py calc
Ejemplo en Linux/Mac (ver archivo):
python poc_dynamic.py cat /etc/passwd
Este campo de entrenamiento reproduce el siguiente flujo peligroso:
config.json.auto_map y, para confirmar la clase del modelo, ejecuta directamente importlib para importar el archivo Python objetivo.import de Python, el os.system() en la parte superior del archivo malicioso se ejecuta inmediatamente.trust_remote_code. Aunque en este punto intercepta y reporta el error, el ataque ya se ha completado.❌ Código vulnerable (vulnerable_lib.py):
# 1. Primero se desencadena la carga de código (el RCE ocurre aquí)
self._resolve_model_class()
# 2. Luego se realiza la verificación de seguridad (después del daño)
if not self.trust_remote_code:
raise RuntimeError("Aborted!")
✅ Solución:
# 1. Primero se realiza la verificación de seguridad
if not self.trust_remote_code and self._needs_remote_code():
raise RuntimeError("Aborted!")
# 2. Solo después de pasar la verificación se carga el código
self._resolve_model_class()