Hugging Face: Vulnerabilidades RCE en Datasets e Inyección
Análisis técnico de la brecha en Hugging Face con más de 17.000 eventos maliciosos mediante inyección de plantillas y deserialización de datasets.

La divulgación técnica del compromiso en la infraestructura de Hugging Face, caracterizado por más de 17.000 eventos maliciosos registrados, ha colocado en el centro del debate la vulnerabilidad intrínseca del ecosistema de distribución de modelos de inteligencia artificial: la ejecución remota de código (RCE) mediante deserialización insegura de datasets y la inyección de plantillas en servidores de evaluación (Server-Side Template Injection).
A medida que los equipos de ingeniería de datos integran repositorios públicos de pesos y conjuntos de datos directamente en sus canalizaciones de entrenamiento e inferencia, la suposición de que los datasets representan datos estáticos e inofensivos ha demostrado ser una de las brechas conceptuales más peligrosas en la ciberseguridad moderna.
Vectores de Intrusión: Deserialización de Código y SSTI
El ataque se estructuró a partir de dos vulnerabilidades primarias encadenadas para obtener control de nodos y exfiltrar tokens de infraestructura en la nube:
[Dataset o Modelo Malicioso en Hub]
│
▼
[Carga con `trust_remote_code=True`] ──> Deserialización Arbitraria de Código
│
▼
[Inyección SSTI en Motor de Plantillas] ──> Escape de Contenedor y Acceso a Nodo
│
▼
[Robo de Credenciales Cloud / IAM] ──> Compromiso de Infraestructura de Clúster
- Carga Insegura con Código Remoto: Al invocar métodos de carga de datasets con el indicador
trust_remote_code=Trueactivado, los scripts auxiliares alojados junto a los archivos de datos se ejecutan en el espacio de usuario local sin ningún filtro de inspección de sintaxis. - Deserialización de Archivos Obsoletos: El uso persistente de formatos basados en
picklepermite que un atacante defina métodos__reduce__en clases personalizadas, forzando la ejecución de comandos del shell durante la reconstrucción del archivo tensorial. - Inyección en la Interfaz de Demostración: Los motores de renderizado de documentación y pruebas interactivas evaluaban plantillas Jinja2 sin saneamiento estricto, permitiendo a los atacantes saltar el contexto de la aplicación web y leer secretos de memoria del clúster Kubernetes subyacente.
Para verificar si tus claves de API o tokens de infraestructura de servicios de IA han sufrido exposiciones públicas, utiliza nuestro Verificador de Brechas de Seguridad.
Comparativa Técnica: Formatos de Almacenamiento de Modelos y Datasets
La siguiente tabla evalúa los riesgos y mecanismos de protección entre los distintos estándares utilizados en la industria de la inteligencia artificial:
| Formato de Distribución | Ejecución de Código Arbitrario | Verificación Criptográfica Nativa | Velocidad de Carga en Memoria | Nivel de Riesgo DevSecOps |
|---|---|---|---|---|
| PyTorch Pickle (.pt / .bin) | Permitida (Clases ejecutables) | No nativa (requiere hash externo) | Media (deserialización en CPU) | Crítico |
| Hugging Face Transformers Scripts | Permitida (trust_remote_code) |
Ausente en scripts dinámicos | Baja (interpretación Python) | Muy Alto |
| Apache Arrow / Parquet | Bloqueada (Estructura columnar pura) | Soportada vía esquemas rígidos | Muy Rápida (Zero-copy memory) | Bajo |
| Safetensors (.safetensors) | Imposible por diseño | Soportada por cabeceras JSON seguras | Ultra Rápida (Mmap directo a GPU) | Mínimo (Estándar Seguro) |
Modelo Probabilístico de Compromiso por Ingesta de Datos No Confiables
La probabilidad $P_i$ de que un clúster de cómputo sufra una intrusión al procesar $n$ conjuntos de datos externos sin filtrado se calcula según la distribución binomial:
$$P_i = 1 - (1 - heta)^n$$
Donde $ heta$ representa la tasa empírica de artefactos contaminados en repositorios públicos ($ heta pprox 0.0018$). En organizaciones que entrenan modelos fundacionales o realizan fine-tuning sobre cientos de datasets comunitarios ($n \ge 500$), la probabilidad de ejecutar al menos una carga maliciosa supera el 60% en ausencia de entornos de contención.
Script de Detección de Payloads en Archivos Tensoriales
El siguiente script en Python examina archivos descargados en busca de firmas sospechosas de serialización basada en Pickle antes de permitir su carga en entornos de producción:
import os
import sys
SUSPICIOUS_PICKLE_OPCODES = [b'c__builtin__', b'cposix', b'cnt', b'cos
system', b'subprocess']
def inspect_tensor_file(file_path: str) -> bool:
print(f"[*] Auditando estructura interna de: {file_path}")
is_safe = True
try:
with open(file_path, "rb") as f:
header = f.read(1024 * 64) # Leer primeros 64KB
for opcode in SUSPICIOUS_PICKLE_OPCODES:
if opcode in header:
print(f"[PELIGRO] Opcode de ejecución arbitraria detectado: {opcode}")
is_safe = False
break
except Exception as e:
print(f"[-] Error al leer el archivo: {e}")
return False
return is_safe
if __name__ == "__main__":
if len(sys.argv) < 2:
print("Uso: python scan_weights.py <archivo>")
sys.exit(1)
safe = inspect_tensor_file(sys.argv[1])
sys.exit(0 if safe else 1)
Protocolo de Limpieza y Respuesta ante Incidentes de Deserialización
Ante la sospecha de haber cargado un artefacto contaminado en tus servidores de cálculo o pods de Kubernetes, ejecuta inmediatamente este procedimiento:
- Destrucción de Contenedores Afectados: Termina de forma irreversible los pods que ejecutaron la carga para purgar procesos huérfanos en memoria.
- Rotación de Tokens de Hugging Face y Cloud: Revoca todos los tokens de acceso con permisos de lectura y escritura en la plataforma.
- Cálculo de Hash Criptográfico SHA-256: Verifica la suma de verificación de los pesos descargados contra los manifiestos oficiales mediante nuestro Generador y Verificador de Hashes.
- Análisis de Vulnerabilidad en APIs: Inspecciona el blindaje de tus microservicios de inferencia consultando nuestra guía sobre Seguridad en Servidores de Modelos y APIs de IA.
Medidas Defensivas Permanentes para Ingenieros de ML
Para prevenir de forma definitiva este vector en tus tuberías de datos:
- Prohibición Absoluta de
trust_remote_code=True: Deshabilita de manera centralizada en las configuraciones de los entornos de desarrollo la ejecución de código embebido en datasets. - Migración Obligatoria a Safetensors: Rechaza la ingesta de archivos
.bino.pten favor de formatos modernos con separación estricta entre metadatos y tensores binarios. - Micro-Segmentación de Red en Pods de Inferencia: Los nodos de computación no deben tener acceso a metadatos de instancia de nube ni capacidad de conexión arbitraria a internet.
La seguridad en la era de la inteligencia artificial exige tratar los pesos de modelos y los datasets con el mismo rigor de análisis forense que el código binario ejecutable.


