jueves, 23 julio 2026 · Sem. 30 DE · EN · FR · ES Oscuro
IA

Hugging Face hackeado: La entrada fue un cargador de conjuntos de datos

El incidente de Hugging Face ocurrió a través de dos funciones de comodidad completamente normales en el procesamiento de datos.

Por Alec Chizhik 21 julio 2026 6 min de lectura
Hugging Face hackeado: La entrada fue un cargador de conjuntos de datos

El 16 de julio de 2026, Hugging Face reveló un incidente de seguridad que se prolongó durante un fin de semana. La puerta de entrada fueron dos rutas de ejecución de código en el procesamiento de conjuntos de datos, ambas diseñadas como función de conveniencia. Quien procese datos de fuentes externas opera un entorno de ejecución y necesita el mismo control que con un runner de CI.

Lo más importante en resumen

  • Puerta de entrada. Dos rutas de ejecución de código en el procesamiento de conjuntos de datos, ambas diseñadas como función de conveniencia.
  • Escalada. Desde el worker de procesamiento a nivel de nodo, se obtuvieron credenciales de cloud y clúster, con movimiento lateral hacia varios clústeres internos.
  • Transferibilidad. Los cargadores de código remoto y la evaluación de plantillas se encuentran por igual en Airflow, dbt y flujos de importación autodesarrollados.
  • Consecuencia. Las pipelines de datos necesitan listas de permitidos, egress bloqueado y una identidad de carga de trabajo con alcance mínimo.
  • Inmediato. Rotar tokens de acceso, revisar la actividad de la cuenta y recalcular los permisos de los propios workers de procesamiento.

Dos rutas de ejecución que todo stack de ML conoce

El incidente se produjo a través de dos rutas de ejecución de código que son habituales en los stacks de ML. La primera fue un cargador de conjuntos de datos de código remoto. Estos cargadores ejecutan Python adjunto en cuanto se carga un conjunto de datos. Forman parte del flujo de trabajo normal de Hugging Face y se utilizan en innumerables pipelines de ML. La segunda ruta fue una inyección de plantillas en la configuración del conjunto de datos. También allí, la configuración de procesamiento evalúa entradas y ejecuta código con ellas.

Ambas rutas tienen algo en común: en el día a día se consideran una función de conveniencia y pasan desapercibidas. Quien opera pipelines de analytics o ML en la región DACH probablemente tenga un patrón comparable en su propio stack. Una importación de Pandas con funciones de transformación personalizadas. Un DAG de Airflow que extrae notebooks de un object store y los ejecuta. Un proyecto dbt con macros de bibliotecas de terceros. Cada uno de estos patrones implica que la pipeline de datos ejecuta código externo.

La diferencia con la pipeline de CI no está en la técnica, sino en la conciencia. En la pipeline de CI, todos saben que cada ejecución implica código. El entorno se endurece en consecuencia: runners propios, permisos limitados, acceso a la red controlado. En la pipeline de datos, el mismo proceso se considera mero procesamiento de datos y, por tanto, escapa al control de despliegue. Ahí es donde actuaron los atacantes.

El alcance del acceso posterior lo muestra una cifra de la investigación.

17.000+
Eventos de los atacantes reconstruidos según la revelación de Hugging Face del 16 de julio de 2026. Además, decenas de miles de acciones automatizadas en sandboxes efímeras.

Se sumó una infraestructura de comando y control que migró de forma autónoma a través de servicios públicos. La cantidad de eventos muestra el alto grado de automatización tras el primer acceso. El patrón se detectó mediante una triaje asistida por LLM de la telemetría de seguridad. OpenAI clasificó el incidente el 21 de julio como parte de evaluaciones internas de capacidades cibernéticas, en las que participaron GPT-5.6 Sol y un modelo aún no publicado. La empresa calificó el caso como un ciberincidente sin precedentes. Para el propio stack, de ello se deriva sobre todo una conclusión: a este ritmo, un análisis puramente manual comienza demasiado tarde.

Por qué un worker no debe tener tokens de alcance cluster

Desde el worker de procesamiento, los atacantes escalaron al nivel de nodo y sustrajeron credenciales de cloud y cluster. Esto plantea la pregunta central para los responsables de plataformas: ¿por qué un worker que procesa datos externos tiene, en primer lugar, credenciales de acceso válidas para todo un cluster?

La respuesta suele tener raíces históricas. El worker necesita permisos de lectura en el almacenamiento de objetos, derechos de escritura en una canalización de métricas y, posiblemente, acceso a un registro. Estos permisos se agrupan porque gestionar un conjunto de credenciales es más cómodo que manejar cuatro. Precisamente esta agrupación convierte a un worker comprometido en un trampolín. Para el movimiento lateral no fue necesaria una segunda brecha en la capa del cluster, ya que las credenciales ya estaban en el worker.

En este caso concreto, los atacantes se movieron por varios clusters internos. Se vieron afectados un número limitado de conjuntos de datos internos y varias credenciales de servicio. Tras la revisión de Hugging Face, se confirmó que no se vieron afectados los modelos públicos, los conjuntos de datos de los usuarios ni los Spaces. Las imágenes de contenedores y los paquetes publicados se verificaron como limpios. Así, la cadena de suministro de software se mantuvo intacta, mientras que el nivel interno fue vulnerado. Como respuesta, Hugging Face cerró las brechas, eliminó el acceso del actor, reinició los nodos afectados, rotó las credenciales e implementó medidas adicionales de protección en el cluster.

Cuatro palancas para los equipos de plataforma

La primera medida es una lista de permitidos para el código ejecutable en las canalizaciones de datos. En lugar de permitir cualquier cargador o plantilla, solo se ejecuta código verificado. Este principio se aplica por igual a Airflow, dbt y flujos de Pandas: el código que llega con los datos no se inicia sin revisión previa.

En segundo lugar, cada worker de procesamiento necesita un egress bloqueado de forma estricta. Un worker que ejecuta código externo no tiene motivo para comunicarse libremente con Internet. En el incidente, la comunicación de comando y control se realizó a través de servicios públicos. Un proxy de egress con lista de permitidos habría estrechado, al menos, esta vía.

En tercer lugar, cada ruta de procesamiento recibe una identidad de workload propia con permisos mínimos. El worker que carga un conjunto de datos no necesita derechos de escritura en la configuración del cluster. Los tokens de corta duración reducen además la ventana de tiempo en la que una identidad robada puede ser explotada.

En cuarto lugar, el procesamiento de datos y el plano de control deben pertenecer a dominios de confianza separados. Quien opera ambos dentro de los mismos límites ahorra esfuerzo a corto plazo, pero asume el riesgo de que un hallazgo en la ruta de importación afecte directamente a la administración.

La objeción: el código remoto es intencional

Existe un argumento de peso en contra de una línea dura. La ejecución de código en los cargadores de conjuntos de datos es una decisión de diseño deliberada en favor de la productividad. Los investigadores comparten sus transformaciones junto con los datos, los experimentos siguen siendo reproducibles y nadie tiene que reconstruir el mismo procesamiento dos veces. Un bloqueo total de todo el código remoto dañaría precisamente este flujo de trabajo y frenaría a los equipos de ML.

Por ello, el término medio viable comienza con visibilidad en lugar de prohibición. Primero, inventariar qué cargadores y plantillas están realmente activos en la propia pila, y luego aprobar conscientemente lo que el equipo mantiene por sí mismo. Todo lo demás va a la lista de bloqueo. Una lista de permitidos que obstaculice el funcionamiento normal será eludida en dos semanas. En cambio, una que cubra las vías establecidas y retenga las fuentes no verificadas no afecta a la productividad.

Preguntas frecuentes

¿Se ve afectado mi stack si no utilizo Hugging Face?

Los loaders y plantillas concretos afectan a Hugging Face. El patrón afecta a cualquier stack que cargue datos de fuentes externas y ejecute código en el proceso. Merece la pena revisar los DAGs de Airflow, los macros de dbt y los scripts de importación en busca de ejecución de código remoto, independientemente del proveedor.

¿Qué tokens deberían rotarse ahora?

Hugging Face recomienda a todos los usuarios rotar los tokens de acceso y revisar la actividad de la cuenta. Quienes utilicen credenciales de servicio en pipelines de ML que hayan tenido contacto con la plataforma, también deberían cambiarlas.

¿Cuál es la mayor palanca arquitectónica?

La separación entre el procesamiento de datos y el plano de control. Un worker que ejecuta código externo no debe tener credenciales que apliquen a todo el clúster. Las identidades de carga de trabajo efímeras con un ámbito reducido son la vía estándar para lograrlo.

¿Cómo puedo saber si mi pipeline ejecuta código externo?

Un punto de partida son las llamadas como eval, exec e importlib, así como los notebooks ejecutados dinámicamente en los DAGs. Todo flujo en el que los datos de fuentes externas aporten código ejecutable debe documentarse. Esta lista es la base de la allowlist.

Recomendaciones de lectura de la redacción

Más del MBF Media Netzwerk

Fuente de la imagen: generada por IA (julio 2026)

También disponible en

FrançaisEnglishDeutsch
MBF Media Newsletter

El briefing mensual para decisores

Una vez al mes, la newsletter de MBF Media reúne lo esencial de cloudmagazin, MyBusinessFuture, Digital Chiefs y SecurityToday, seleccionado por la redacción.

25 000 responsables de IT y negocio leen esta newsletter. Únase.

Suscríbase gratis
MBF Media Newsletter, aktuelle Ausgabe auf dem iPhone
Ein Magazin der Evernine Media GmbH