Descripción general
Se ha identificado una vulnerabilidad crítica en la biblioteca HuggingFace Transformers que permite la ejecución de código arbitrario durante la carga de checkpoints de entrenamiento. El fallo reside específicamente en la clase Trainer, componente central del flujo de entrenamiento de modelos de IA en esta biblioteca ampliamente utilizada.
Detalle técnico
El método _load_rng_state(), ubicado en src/transformers/trainer.py en la línea 3059, invoca la función torch.load() sin especificar el parámetro weights_only=True. Esta omisión es significativa porque torch.load(), cuando opera sin dicha restricción, puede deserializar objetos Python arbitrarios mediante el módulo pickle, lo que abre la puerta a la ejecución de código malicioso en el momento de la carga.
El fragmento problemático se puede representar conceptualmente de la siguiente forma:
# Código vulnerable en trainer.py, línea 3059
torch.load(rng_file) # Sin weights_only=True
# Forma segura recomendada
torch.load(rng_file, weights_only=True)
Condiciones de explotación
La vulnerabilidad afecta a todas las versiones de la biblioteca que soporten torch>=2.2 cuando se utilizan junto con versiones de PyTorch inferiores a 2.6. En este rango de versiones, el gestor de contexto safe_globals() no ofrece ninguna protección efectiva, lo que deja el vector de ataque completamente expuesto.
Un atacante puede explotar esta vulnerabilidad suministrando un archivo de checkpoint malicioso, como por ejemplo rng_state.pth, diseñado para ejecutar código arbitrario en el momento en que el proceso de entrenamiento intente restaurar el estado del generador de números aleatorios. Este escenario es especialmente relevante en entornos colaborativos, plataformas de entrenamiento distribuido o pipelines de MLOps donde los checkpoints se comparten o descargan de fuentes externas.
Vector de ataque
El flujo de explotación sigue los siguientes pasos:
- El atacante genera un archivo
rng_state.pthcon un payload serializado mediantepickleque contiene código malicioso. - El archivo es colocado en la ruta esperada por el proceso de entrenamiento, ya sea mediante acceso directo al sistema de archivos, un repositorio de modelos comprometido o una fuente de descarga controlada por el atacante.
- Cuando
Trainer._load_rng_state()es invocado durante la reanudación del entrenamiento,torch.load()deserializa el archivo sin restricciones y ejecuta el código embebido. - El código malicioso se ejecuta con los privilegios del proceso de entrenamiento, que en muchos entornos de producción dispone de acceso a recursos sensibles como credenciales, datos de entrenamiento o infraestructura de red.
Impacto
La explotación exitosa de esta vulnerabilidad permite a un atacante ejecutar código arbitrario en el sistema donde se ejecuta el proceso de entrenamiento. Las consecuencias potenciales incluyen el robo de datos de entrenamiento y modelos propietarios, la instalación de malware o backdoors, el movimiento lateral dentro de la infraestructura afectada y la exfiltración de credenciales y secretos del entorno.
Dado el uso masivo de HuggingFace Transformers en entornos de investigación, empresas tecnológicas y plataformas de IA en producción, el alcance potencial de esta vulnerabilidad es considerable.
Versiones afectadas y solución
La vulnerabilidad afecta a todas las versiones de HuggingFace Transformers que soporten torch>=2.2 cuando se combinan con PyTorch en versiones anteriores a 2.6. El problema ha sido corregido en la versión v5.0.0rc3 de la biblioteca.
Se recomienda a los equipos afectados actualizar a la versión corregida a la mayor brevedad posible. Como medida de mitigación temporal, se aconseja no cargar checkpoints provenientes de fuentes no confiables y auditar los pipelines de entrenamiento que reanuden estados desde archivos externos.
