MagnoSec
Código de inteligencia artificial y redes neuronales representando vulnerabilidades en Hugging Face Diffusers que permiten ejecución de código arbitrario

MagnoSec Blog

Hugging Face Diffusers Bajo Ataque: Fallos Críticos Permiten a Repositorios de Modelos Ejecutar Código Arbitrario

Por Equipo MagnoSec7 min de lectura

Hugging Face Diffusers: la librería de generación de imágenes que ejecuta código sin que lo sepas

Hugging Face es el repositorio de modelos de machine learning más grande del mundo. Su librería Diffusers es el estándar de facto para generación de imágenes con IA —Stable Diffusion, Flux, DALL-E y cientos de modelos open-source se ejecutan a través de Diffusers—. Una vulnerabilidad crítica en esta librería permite que un modelo malicioso alojado en Hugging Face ejecute código arbitrario en el sistema que lo carga. El problema es profundo y sistémico: Diffusers utiliza el formato de serialización de Python (pickle) para cargar los pesos de los modelos, y pickle no es seguro por diseño —puede ejecutar código arbitrario durante la deserialización—. Cuando un desarrollador descarga un modelo de Hugging Face y lo carga con Diffusers, el código del modelo se ejecuta automáticamente. Si el modelo es malicioso —si alguien ha subido un modelo que en lugar de generar imágenes ejecuta comandos del sistema—, el desarrollador acaba de darle acceso a su servidor al atacante. No hay prompt injection. No hay vulnerabilidad de red. Es simplemente cargar un archivo de un repositorio público confiando en que no es malicioso. Y en un repositorio con cientos de miles de modelos subidos por cualquier persona, la confianza es un vector de ataque.

Modelos maliciosos como vector de ataque: cómo un archivo de pesos de red neuronal puede hackear tu servidor

El formato pickle de Python es intrínsecamente inseguro para datos no confiables. Pickle no solo serializa datos: serializa objetos Python completos, incluyendo su código. Cuando deserializas un archivo pickle, Python reconstruye los objetos exactamente como fueron serializados, ejecutando cualquier código que el objeto contenga. En el contexto de Diffusers, los pesos del modelo (los parámetros de la red neuronal) se almacenan en archivos pickle o safetensors. Hugging Face recomienda safetensors (un formato seguro que solo contiene tensores), pero Diffusers sigue soportando pickle por compatibilidad con modelos antiguos. Y cuando Diffusers encuentra un archivo pickle, lo deserializa automáticamente sin advertir al usuario ni pedir confirmación. Un atacante puede crear un modelo que parece legítimo —genera imágenes de gatitos cuando se prueba— pero que en realidad contiene código malicioso embebido en el archivo de pesos, cuidadosamente ofuscado para no ser detectado por escáneres automáticos. Cuando un desarrollador descarga el modelo y ejecuta 'pipeline = DiffusionPipeline.from_pretrained("modelo-malicioso")', el código malicioso se ejecuta con los privilegios del proceso Python. El desarrollador no ha hecho nada mal: ha seguido el tutorial oficial. Simplemente ha confiado en que un modelo público era inofensivo.

La cadena de explotación: del modelo descargado de Hugging Face al RCE en tu entorno de producción

La cadena de ataque contra Diffusers es sutil y peligrosa. Fase 1: el atacante crea un modelo de generación de imágenes que funciona correctamente —genera imágenes que parecen legítimas— para pasar cualquier revisión superficial y acumular estrellas y descargas en Hugging Face. Fase 2: en los archivos de pesos del modelo, el atacante embebe código malicioso ofuscado. El código está en el archivo pickle, no en el código Python visible del repositorio. Fase 3: el desarrollador, buscando un modelo para su aplicación, encuentra este que tiene buena puntuación, buenas imágenes de ejemplo y documentación decente. Lo descarga y lo carga en su aplicación. Fase 4: al cargar el modelo, Diffusers deserializa el archivo pickle y ejecuta el código malicioso. El código puede robar variables de entorno (que contienen claves de API, credenciales de base de datos, tokens), leer archivos del sistema, establecer una shell reversa hacia el servidor del atacante, o modificar otros modelos en el pipeline para que también se comporten de forma maliciosa. Fase 5: el atacante tiene ahora acceso al entorno de producción del desarrollador, que típicamente incluye acceso a GPUs cloud (costosas), almacenamiento de datasets, y APIs de la aplicación que usan el modelo. Un solo modelo malicioso ha comprometido toda la infraestructura de ML de la empresa.

El impacto en startups de IA, equipos de ML y empresas que integran modelos open-source

El impacto para el ecosistema de IA es sistémico. Casi todas las startups de IA, laboratorios de investigación y empresas que integran modelos open-source utilizan Hugging Face y Diffusers. Confían implícitamente en que los modelos públicos no son maliciosos porque 'es solo una red neuronal, no puede ejecutar código'. Pero sí puede. Pickle ejecuta código. Y cualquier modelo en formato pickle es potencialmente un caballo de Troya. La comunidad de ML lleva años discutiendo la migración completa a safetensors, pero la inercia de miles de modelos legacy en formato pickle mantiene la puerta abierta. El atacante no necesita encontrar una vulnerabilidad en Diffusers o en Hugging Face: está explotando una funcionalidad documentada del formato pickle, combinada con la confianza implícita de los desarrolladores en los modelos públicos. Es ingeniería social aplicada al machine learning: 'confía en este modelo, tiene 10.000 descargas y 500 estrellas'. Las estrellas y las descargas se pueden manipular. El código malicioso dentro de un archivo pickle no aparece en el diff del repositorio. Es el vector de ataque perfecto contra una comunidad que confía en la bondad de los modelos open-source.

Cómo MagnoSec audita pipelines de ML, dependencias de IA y entornos de ejecución de modelos

En MagnoSec estamos incorporando la auditoría de pipelines de ML y dependencias de IA a nuestros servicios de seguridad ofensiva. Analizamos los modelos utilizados por la organización: ¿en qué formato están? ¿Pickle o safetensors? ¿Se verifica la integridad de los modelos antes de cargarlos? ¿Los modelos se ejecutan en un entorno aislado (sandbox) sin acceso a la red ni a secretos? Evaluamos el pipeline de CI/CD de ML: ¿los modelos se descargan automáticamente de Hugging Face? ¿Hay un proceso de revisión antes de integrar un nuevo modelo en producción? ¿Se escanean los archivos de modelos en busca de código malicioso? Revisamos la higiene de secretos en el entorno de ML: ¿las claves de API y credenciales están en variables de entorno accesibles por el proceso que carga los modelos? Si un modelo malicioso se ejecuta, ¿qué puede robar? Y simulamos ataques controlados: descargamos modelos de Hugging Face, los cargamos en un entorno aislado y verificamos que no ejecutan código no autorizado. Un pipeline de ML que carga modelos de internet sin verificarlos es como un servidor web que ejecuta binarios descargados de un foro público. La comunidad de ML necesita adoptar las mismas prácticas de seguridad que el resto de la ingeniería de software. La magia de la IA no exime de la responsabilidad de verificar lo que ejecutas.

Defensa: verificación de modelos, entornos aislados de inferencia y escaneo de dependencias

La defensa contra modelos maliciosos en Diffusers y Hugging Face requiere medidas inmediatas y cambios de mentalidad. Medida 1: migrar todos los modelos a formato safetensors. Si un modelo solo está disponible en pickle, convertirlo con la herramienta de conversión de Hugging Face antes de usarlo. Si no se puede convertir, ejecutarlo solo en un sandbox aislado sin acceso a red ni secretos. Medida 2: nunca cargar modelos directamente en el entorno de producción. Implementar un proceso de staging donde los modelos se analizan en un sandbox antes de ser promovidos a producción. El sandbox debe estar completamente aislado de la red corporativa y sin acceso a secretos. Medida 3: utilizar la opción 'trust_remote_code=False' al cargar modelos de Diffusers. Esto evita que el modelo ejecute código Python arbitrario desde el repositorio. No protege contra pickle malicioso, pero reduce la superficie de ataque. Medida 4: escanear los archivos de modelos con herramientas de análisis de seguridad específicas para ML. Picklescan y otras herramientas pueden detectar código malicioso conocido en archivos pickle. Medida 5: implementar el principio de mínimo privilegio para los procesos de ML. El proceso que carga modelos no debería tener acceso a la base de datos de producción, a las claves de API ni a la red externa. Si un modelo malicioso se ejecuta, el daño debe estar contenido. La confianza en la comunidad open-source de ML es valiosa. La verificación de lo que ejecutas en tu servidor es obligatoria. No son incompatibles: son complementarias. Confía, pero verifica. Y en ML, verifica cada archivo de pesos como si fuera un binario descargado de internet. Porque lo es.

Temas tratados

Hugging Face · Diffusers · RCE · modelos ML · IA · seguridad IA · supply chain · dependencias

¿Quieres saber si tu empresa tiene estas vulnerabilidades?

Auditamos la seguridad de empresas de toda España con alcance cerrado por escrito, informe técnico y ejecutivo, y retest de las correcciones. Presupuesto en 24 horas y primera consultoría sin coste. Si no sabes por dónde empezar, haz el test de seguridad de 15 preguntas.

¿Quieres más información?