Artefactos ML no confiables y deserialización segura
- Parte
- 08
- Estado
- Revisado
- Edición
- v2 / 01.09.2026
- Tiempo estimado de lectura
- 3 min
Edición del 1 de septiembre de 2026
Las fuentes conservan sus fechas de consulta. El laboratorio identifica la simulación determinística y la integración con modelo por separado.
Superficie: Artefactos de modelo ATLAS: AML.T0011.000 (Unsafe AI Artifacts), AML.T0010.001 (AI Supply Chain Compromise: AI Software) OWASP: ML06:2023 AI Supply Chain Attacks (ML Top 10, draft 2023), LLM04:2026 Supply Chain Riesgo: Crítico
Qué importa
El equipo propone abrir el checkpoint para comprobar si es seguro. Justamente ahí está el problema: con algunos formatos, abrirlo ya puede ejecutar instrucciones. En PhiloCorp, la primera decisión ocurre antes del loader.
Python pickle serializa objetos, pero puede reconstruirlos invocando funciones arbitrarias
durante la carga. Las rutas basadas en pickle de joblib, dill y PyTorch heredan ese riesgo.
No confundas una extensión con una garantía: NumPy también puede cargar objetos serializados con
pickle en archivos de arrays. Su opción allow_pickle=False evita esa ruta; los arrays numéricos
ordinarios no requieren pickle. La prueba de esta página observa el rechazo previo a la carga.
No todos los formatos tienen la misma semántica. ONNX usa Protobuf y SafeTensors representa tensores sin intérprete Python; ninguno de ellos autoriza a asumir seguridad integral. También hay que evaluar runtime, parsers, operadores personalizados, tokenizers, configuración, dependencias y procedencia.
Cómo evaluar de forma segura
- Inventariá formato, loader y versión. Registrá extensión, hash, biblioteca, versión y si el loader puede interpretar objetos o código. La tabla de riesgo la define el loader, no la extensión. Registrá también opciones de carga y formatos admitidos realmente.
- Verificá la política antes de cargar. Exigí digest inmutable, firma, procedencia aprobada y SBOM/ML-BOM. El artefacto de laboratorio debe ser rechazado por el gate, sin deserialización.
- Revisá PyTorch con precisión. Desde PyTorch 2.6,
torch.loadusaweights_only=Truecuando no se pasapickle_module, según la documentación de esa versión. Esa restricción reduce la superficie; no reemplaza la confianza en el origen ni el parcheo. CVE-2025-32434 afectó incluso aweights_only=Truehasta 2.5.1 y se corrigió en 2.6.0. Una excepción aweights_only=Falseexige origen verificado, revisión y aislamiento. - Sumá inspección estática. Analizá instrucciones y referencias sin deserializar objetos. Registrá herramienta, versión y cobertura. Un análisis incompleto es «no verificado», no «limpio». Rechazá referencias fuera de política y aislá también el analizador. Su aprobación no prueba ausencia de comportamiento malicioso.
- Probá el aislamiento. La carga permitida debe ejecutarse con privilegios mínimos, sin secretos, sin egress por defecto y con límites de CPU, memoria y tiempo.
- Medí evidencia. Conservá el veredicto de firma, hash, política aplicada, identidad del publicador y el evento de rechazo o aprobación.
Marcador y resultado esperado
artifact:
id: philocorp-lab-model-001
marker: PHILO_TEST_08_ARTIFACT
expected_sha256: "<sha256_completo_del_fixture_aprobado>"
observed_sha256: "<sha256_completo_del_fixture_presentado>"
expected_signer: "philocorp-model-release"
observed_signer: null
expected_result: reject_before_load
evidence_event: ARTIFACT_VERIFICATION_FAILEDLos hashes son campos por completar con valores calculados de los archivos de laboratorio. Un digest inventado o abreviado sirve para explicar el formato, pero no verifica integridad.
Límite de la prueba: presentá metadatos y archivos sintéticos inertes al verificador autorizado; no construyas ni cargues un pickle que ejecute código. Abortá si el gate intenta deserializar un artefacto rechazado, pierde auditoría o supera los límites de recursos. Retirá los archivos de prueba y conservá los veredictos en el Attack Intelligence Brief.
Criterios de verificación
- El sistema conoce el formato, loader y versión del artefacto.
- La política de procedencia, firma y digest se evalúa antes de la carga.
- Los checkpoints no confiables no usan rutas que interpreten objetos Python.
- El rechazo queda registrado sin ejecutar contenido del artefacto.
- La inspección estática corre antes y de forma independiente de la carga.
- La carga permitida está aislada y tiene privilegios mínimos.
Remediación
Preferí formatos de datos sin ejecución cuando correspondan, cargá state_dict con restricciones,
fijá referencias por digest, verificá firma y procedencia, y ejecutá el loader en un entorno aislado.
SafeTensors reduce una clase de riesgo, pero no reemplaza validación de dependencias ni controles
de release.

