¿Puede cargar un archivo de modelo de ML descargado ejecutar código del atacante?
Respuesta breve
Sí. Los archivos de modelo basados en pickle (formato por defecto de los pesos de PyTorch) pueden ejecutar código arbitrario al deserializarse; la documentación de Python indica deserializar solo datos de confianza. Los escáneres ayudan pero no son infalibles. Prefiere un formato solo de datos como safetensors, carga únicamente desde fuentes fiables y verificadas, y trata los artefactos de modelo como cualquier entrada ejecutable de la cadena de suministro.
Un archivo de modelo parece datos, y por eso es una pregunta favorita de seguridad de IA para perfiles senior. En muchos ecosistemas se parece más a un programa.
El mecanismo
La documentación de Python sobre pickle empieza con una advertencia: el módulo «no es seguro», los datos pickle maliciosos pueden «ejecutar código arbitrario durante la deserialización» y nunca debes deserializar datos de origen no fiable. La documentación de Hugging Face Hub señala que pickle es el formato por defecto de los pesos de PyTorch y explica que los opcodes pueden importar funciones integradas como exec o eval y llamarlas, de modo que un archivo de modelo puede ejecutar código en cuanto se carga.
Defensas y límites
- Formatos más seguros: la documentación del Hub sugiere alternativas como
safetensors; la de Python sugiere formatos como JSON para datos no fiables. - Confianza y procedencia: carga desde fuentes de confianza; los commits firmados prueban el origen, no la inocuidad.
- Escaneo: el Hub lista los imports de los pickle y resalta los sospechosos, pero aclara que no es infalible.
- Restringir globales con un unpickler propio es posible según la documentación de Python, pero exige mucho cuidado.
Por qué importa en un pipeline
Los trabajos automáticos que descargan modelos de la comunidad corren con las credenciales de la CI o del notebook, así que un archivo envenenado es un compromiso de la cadena de suministro. Aísla la carga, prefiere formatos solo de datos y fija y verifica los artefactos.
Por qué tientan los distractores
«Solo números» ignora el formato contenedor. «El antivirus lo detecta» lo contradice la nota del Hub: ClamAV no cubre exploits de pickle. «Solo en inferencia» es falso: el código se ejecuta al cargar.
Qué buscan los entrevistadores
Nombrar pickle, la ejecución de código al cargar, y safetensors más controles de procedencia como solución.
Posibles preguntas de seguimiento
- ¿Por qué un escáner de pickle que lista imports es útil pero insuficiente?
- ¿Cómo evita safetensors esta clase de riesgo?
- ¿Qué controles añadirías a un pipeline que descarga modelos de la comunidad automáticamente?