Caso B - PhiloCorp Model Release Gate: del artefacto a la decisión de promoción
- Parte
- 11
- Estado
- Revisado
- Edición
- v2 / 01.09.2026
- Tiempo estimado de lectura
- 5 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.
Tipo: Capstone sintético Superficies: Supply chain, registry, ML-BOM, CI/CD, admisión Kubernetes y loader OWASP: LLM04:2026 Supply Chain, ML06:2023 AI Supply Chain Attacks (ML Top 10, draft 2023) Riesgo potencial: Crítico cuando la cadena permite ejecutar contenido no confiable
Escenario
El release llega con una firma válida y un nombre conocido. En el expediente ficticio de PhiloCorp, eso todavía no lo convierte en un release aprobado: falta comprobar quién firmó, qué bytes evaluó el equipo y si son los mismos que el despliegue intenta usar.
registry.philocorp.invalid representa el registro de un clasificador sintético.
deploy.philocorp.invalid representa su promoción a un namespace de laboratorio. Todos los
artefactos son inertes; resolución, promoción y admisión se evalúan sin instalar paquetes,
deserializar modelos ni crear workloads.
Qué tomamos de los antecedentes
El incidente de PyTorch-nightly, de diciembre de 2022, involucró una dependencia con el mismo nombre en otro índice. Eso es dependency confusion. Un nombre parecido con una letra de diferencia corresponde a typosquatting: conviene separarlos porque requieren pruebas distintas.
PoisonGPT fue una demostración de investigación de 2023 sobre modificación dirigida y distribución de un modelo. ReversingLabs documentó en febrero de 2025 modelos maliciosos cuyo contenido podía ejecutarse antes de que la deserialización terminara con un error. Un análisis incompleto no equivale a un resultado limpio.
ATLAS v2026.07 registra estos antecedentes como AML.CS0015, AML.CS0019 y AML.CS0031. La secuencia de PhiloCorp reúne decisiones inspiradas en ellos; no afirma que fueran un mismo incidente.
RoE y preparación
Usá catálogos locales, manifiestos y archivos sintéticos sin código ejecutable. Bloqueá red, instalación, carga y despliegue. Registrá presupuesto de intentos y tiempo, namespace lógico, identidad, versiones del verificador y políticas. Incluí una entrada válida como control positivo.
Cada variante negativa debe fallar una sola condición. Si cambiás firma, publicador y digest a la vez, el primer rechazo puede ocultar que las otras dos comprobaciones nunca se ejecutaron.
Arquitectura
Catálogo local -> Resolución -> Manifiesto -> Promoción -> Admisión en dry-run
| | |
Digest y firma Aprobación Política efectivaLa frontera final de carga se revisa por configuración y eventos; este capstone no la cruza.
| Etapa | Intento de la prueba | ATLAS | Control evaluado |
|---|---|---|---|
| 1. Dependencia | Resolver el mismo nombre desde un origen no aprobado | AML.T0010.001 (AI Software) | Origen explícito, digest y resolución restringida |
| 2. Procedencia | Aceptar una firma válida de un publicador ajeno | AML.T0018.000, AML.T0115.001 como antecedentes del riesgo | Autorización del publicador y procedencia |
| 3. Formato | Aprobar un artefacto que exige una ruta de carga prohibida | AML.T0011.000 (Unsafe AI Artifacts) | Política de formato y loader antes de carga |
| 4. Promoción | Reutilizar aprobación de otro digest, contexto o vigencia | AML.T0010.003 (Model), según el alcance del cambio | Aprobación vinculada al artefacto y al despliegue |
| 5. Admisión | Aceptar una referencia que el control de promoción rechaza | AML.T0010 (AI Supply Chain Compromise) | Validación independiente al desplegar |
Material de prueba
Resolución entre orígenes:
resolution_fixture:
marker: PHILO_TEST_11_B_CONFUSION
package_name: philocorp-tokenizer
approved_candidate:
index: internal-lab-catalog
version: 1.0.0
digest: "<sha256_del_archivo_inerte_aprobado>"
competing_candidate:
index: unapproved-lab-catalog
version: 9.9.9
digest: "<sha256_del_archivo_inerte_alternativo>"
mode: offline_resolution_only
expected_decision: select_only_explicitly_approved_originNo se publica ni instala un paquete. El orden visual de índices no basta: comprobá la semántica del resolver. Elegir «el interno primero» no garantiza que la herramienta excluya candidatos de otros índices.
Publicador no autorizado:
model_fixture:
id: philocorp-lab-classifier-02
marker: PHILO_TEST_11_B_POISON
content: inert_model_metadata
signature: "<firma_de_laboratorio_verificable_sobre_el_digest>"
signer: philocorp-unapproved-lab-publisher
other_policy_requirements: valid
expected_decision: reject_unapproved_publisherEste fixture demuestra una decisión de procedencia. No contiene ni prueba un modelo envenenado. La evaluación del comportamiento dirigido requiere el experimento independiente de data poisoning. Una firma autorizada tampoco certifica que el comportamiento del modelo sea correcto.
Formato no permitido y resultado de inspección:
format_fixture:
id: philocorp-lab-model-003-format
marker: PHILO_TEST_11_B_LOADER
declared_format: pickle-legacy
declared_loader: torch.load
origin: approved-lab
scan_result_fixture: complete
other_policy_requirements: valid
deserialization_allowed: false
expected_decision: reject_forbidden_format_before_load
scan_fixture:
id: philocorp-lab-model-003-scan
declared_format: approved_data_only_format
scan_result_fixture: incomplete
other_policy_requirements: valid
deserialization_allowed: false
expected_decision: reject_unverified_artifactSon dos corridas independientes: una falla por formato y la otra por inspección incompleta. El resultado de escaneo es simulado. Para verificar el analizador real, prepará otra prueba con un archivo inerte y malformado de origen conocido, sin instrucciones ejecutables. En ambos casos, un resultado incompleto debe quedar como «no verificado».
Aprobación asociada a otros bytes:
promotion_attempt:
artifact_id: philocorp-lab-classifier-02
digest: "<sha256_completo_del_fixture_B>"
attestation_subject_digest: "<sha256_completo_del_fixture_A>"
signer: philocorp-approved-lab-publisher
other_policy_requirements: valid
expected_decision: reject_attestation_subject_mismatchCalculá ambos hashes de archivos inertes distintos y generá firmas con claves exclusivas del laboratorio. Los campos anteriores son una especificación de entradas, no evidencia criptográfica por sí mismos. Probá vigencia o entorno incorrectos como variantes separadas.
Pasos
| Paso | Acción | Resultado esperado | Evidencia mínima |
|---|---|---|---|
| 1. Congelar entradas | Registrá variantes, hashes y política | Una condición inválida por variante | Matriz de entradas y resultados |
| 2. Probar control positivo | Evaluá un release íntegramente aprobado, sin desplegar | Aprobación bajo la política esperada | Decisión y versión |
| 3. Probar resolución | Evaluá el catálogo local con dos orígenes para el mismo nombre | Selección restringida al origen autorizado | Candidatos, origen y regla |
| 4. Probar procedencia | Presentá la firma verificable del publicador no autorizado | Denegación por identidad no aprobada | Resultado criptográfico y decisión de autorización |
| 5. Probar formato e inspección | Presentá las dos variantes en corridas separadas | Rechazo por formato en una, por inspección incompleta en la otra, antes del loader | Motivo por variante y ausencia de carga |
| 6. Probar aprobación ajena | Presentá una attestation válida para otro digest | Rechazo por sujeto distinto | Digests y regla |
| 7. Probar admisión | Suministrá cada referencia rechazada al evaluador de admisión en dry-run | Denegación bajo su propia política | Veredicto, versión y namespace lógico |
| 8. Restaurar | Retirá entradas de prueba y compará inventarios | Sin paquetes instalados, cargas ni workloads | Inventario inicial/final y auditoría |
Un reintento del mismo ID no es necesariamente un replay indebido: una política puede volver a evaluarlo y aprobar una versión corregida. Lo que no debe aceptar es una aprobación fuera de su digest, identidad, entorno o vigencia.
Métrica: independencia de controles
Reportá la matriz entrada × regla × resultado, incluido el control positivo. El número de reglas que producen un deny no mide por sí solo la calidad de una defensa. Lo que importa es comprobar que cada condición declarada se valida y que la prueba llega al control que querés observar.
Un deny de admisión en dry-run demuestra la decisión evaluada, no que una solicitud real atraviese esa misma configuración. Verificá el enlace con la política activa y su auditoría antes de afirmar que el despliegue queda protegido. La ausencia de Pods durante un ensayo que nunca crea Pods no es, por sí sola, evidencia de bloqueo.
Detención y cierre
Abortá ante instalación, descarga no prevista, deserialización, creación de workloads, pérdida de auditoría o presupuesto excedido. El criterio de éxito combina rechazo por el motivo correcto, aprobación de la entrada válida y trazabilidad entre artefacto, identidad y política.
Sumá al Attack Intelligence Brief la matriz y los límites de cada ensayo. El cierre tiene que responder:
- ¿La firma está ligada a los bytes y a un publicador autorizado?
- ¿El SBOM, ML-BOM y las attestations corresponden al mismo release?
- ¿La admisión verifica por sí misma los requisitos de promoción?
- ¿Qué falta observar en ejecución antes de dar por verificado el control?

