Saltar al contenido
PhiloCyber logo
Índice de la guía

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

  1. 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.
  2. 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.
  3. Revisá PyTorch con precisión. Desde PyTorch 2.6, torch.load usa weights_only=True cuando no se pasa pickle_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 a weights_only=True hasta 2.5.1 y se corrigió en 2.6.0. Una excepción a weights_only=False exige origen verificado, revisión y aislamiento.
  4. 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.
  5. 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.
  6. 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_FAILED

Los 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.

Artefactos ML no confiables y deserialización segura | PhiloCyber