El artículo no mide si un modelo de lenguaje resiste una prompt injection. Plantea una pregunta más fundamental: ¿basta la telemetría registrada para reconstruir de forma determinista una ruta a través de varios componentes, atribuirla de manera unívoca y clasificarla como segura o insegura? Esto se aplica también cuando los eventos se ejecutan en paralelo o la telemetría está dañada. Sin esta base, cualquier prueba de agentes se queda en una corazonada.
Agentic AI Security Testing: La evidencia que hace verificables a los agentes de IA
Un trace compartido solo demuestra que unos eventos están relacionados entre sí. No muestra si un agente de IA ha respetado la aprobación, el destino, la autorización y la procedencia de los datos. Nuestro artículo, aceptado en la ICSPIS 2026 (IEEE), muestra qué telemetría se necesita para ello. Esta página traslada los resultados al OWASP Agent Control Standard (ACS).
Actualizado: octubre de 2026 · Valeri Milke, Lead Auditor ISO 27001 e ISO 42001
Accepted version con aviso de copyright de IEEE
92,9 %Recall de seguridad del perfil threat-guided P3 en las siete condiciones de telemetría: con un 100 % de precisión y un 0 % de falsos positivos en casos benignos
16,7 %Recall con correlación puramente causal (P2), aunque el 85,7 % de los efectos se atribuyó de forma unívoca. Atribución y evaluación de seguridad son requisitos distintos
50 %Recall de P3 cuando faltan todos los eventos de decisión (F1). Las comprobaciones de aprobación, alcance y destino pierden su punto de comparación
3024Celdas perfil-fallo-trace: 36 plantillas de workflow sintéticas × 3 repeticiones deterministas × 4 perfiles de evidencia × 7 condiciones de telemetría
Las aplicaciones agénticas conectan decisiones del modelo con herramientas que leen datos, delegan trabajo y modifican sistemas externos. Por ello, un incidente de seguridad abarca desde el contenido ingerido, pasando por la planificación, la aprobación y la llamada a la herramienta, hasta el efecto en el sistema de destino. En el artículo “Threat-Model-Guided Security Testing for Agentic AI: MCP Traces with MAESTRO and STRIDE”, Valeri Milke deriva de MAESTRO y STRIDE un Evidence Contract para flujos de trabajo con Model Context Protocol. Se puso a prueba con 3024 celdas de perfil, fallo y trace. El resultado central: los identificadores causales de trace mejoran la atribución, pero no aportan la semántica necesaria para evaluar la autorización o la procedencia. Solo las vinculaciones relevantes para la seguridad elevan el recall del 16,7 % al 92,9 %. El OWASP Agent Control Standard (ACS) ofrece para ello una especificación abierta: v0.1.0, release 0.1.2, descrita por su Project Lead como «public preview» y proyecto del OWASP GenAI Security Project desde septiembre de 2026. Aporta hooks, dispositions, provenance y mappings de trace. Mostramos campo por campo cómo encajan ambos. También mostramos dónde presenta todavía lagunas ACS v0.1 y cómo puede usted construir a partir de ellas pruebas de seguridad sólidas para sus agentes.
De un vistazo
Los resultados en cinco frases
En resumen: para que la seguridad de un agente de IA pueda ponerse a prueba, la telemetría debe respaldar cada etapa, desde la entrada, pasando por la decisión de política y la llamada a la herramienta, hasta el efecto observado, con hechos comparables. Los IDs de correlación por sí solos no bastan. El OWASP Agent Control Standard aporta para ello hooks, provenance y mappings de trace. Los Decision Receipts y la evidencia de efectos independiente deben completarlos los operadores.
- 92,9 %Las vinculaciones semánticas decidenEl perfil threat-guided P3 alcanzó, en todas las condiciones de telemetría, un 92,9 % de recall con un 100 % de precisión y un 0 % de falsos positivos. La correlación puramente causal llegó al 16,7 %.
- 85,7 %La atribución no es evaluaciónP2 y P3 atribuyeron de forma unívoca el mismo número de efectos. Solo P3 pudo valorar si se respetaron la aprobación, el scope, la procedencia y el destino.
- 50 %Los Decision Receipts son críticosSin eventos de decisión, el recall de P3 cayó a la mitad. La reconstrucción y la atribución cayeron al 0 %. En ACS, según nuestra interpretación, esto corresponde a un Guardian fail-open sin comprobante de decisión.
- +255 %La evidencia tiene su precioP3 generó una mediana de 2341 bytes de JSON canónico por workflow, frente a 659 bytes de logs fragmentados. Por ello, conviene introducir primero receipts completos para las operaciones privilegiadas.
- 6Seis familias, un límite claro de la conclusiónEl experimento prueba la fuerza probatoria de fixtures deterministas de tipo MCP. No es un benchmark de LLM ni de prompt injection. El siguiente paso es un SDK de MCP real.
Del modelo de amenazas al estándar de control
Los pilares sobre los que se asientan el artículo y ACS, y lo que viene a continuación. Abra un hito para ver los detalles.
feb. 2025
MAESTRO publicado
La Cloud Security Alliance presenta MAESTRO: un framework de threat modeling para IA agéntica con siete capas que interactúan y foco en los efectos entre capas. En el artículo, MAESTRO aporta los límites de datos, orquestación y despliegue afectados.
dic. 2025
OWASP Top 10 for Agentic Applications
El OWASP GenAI Security Project publica el Top 10 for Agentic Applications for 2026 (ASI01–ASI10). El artículo utiliza la lista como contraste para el vocabulario de los escenarios. Entre sus riesgos figuran ASI01 Agent Goal Hijack, ASI02 Tool Misuse and Exploitation, ASI03 Identity and Privilege Abuse, ASI06 Memory & Context Poisoning y ASI08 Cascading Failures.
28 jul. 2026
Especificación MCP 2026-07-28
La Protocol Revision 2026-07-28 del Model Context Protocol describe el host, los clientes y los servidores, así como la interfaz de herramientas. El host es responsable de la autorización, el consentimiento y los límites de seguridad. De ahí surgen las transiciones observables host→cliente, cliente→servidor y servidor→efecto.
1 sept. 2026
Relanzamiento de ACS en el OWASP GenAI Security Project
El OWASP GenAI Security Project incluye el Agent Control Standard como recurso desde el 1 de septiembre de 2026; el relanzamiento del repositorio como proyecto de OWASP concluye el 10 de septiembre. La especificación v0.1.0 es del 5 de junio de 2026 y el tag de release 0.1.2, del 21 de septiembre. ACS incluye 19 hooks nativos steps/* (16 de ciclo de vida y tres de skills), cinco dispositions, envelopes JSON-RPC 2.0, 44 JSON Schemas y mappings de OpenTelemetry y OCSF. Las lagunas conocidas figuran abiertamente en el README: el Guardian de referencia (prueba de concepto) todavía no autentica el wire, aunque ACS-Core exige firmas, y la failure posture por defecto es proceed (fail-open).
oct. 2026
Artículo aceptado en la ICSPIS 2026
“Threat-Model-Guided Security Testing for Agentic AI: MCP Traces with MAESTRO and STRIDE” ha sido aceptado para el Track 5 (Cybersecurity & Resilience) de la 9th International Conference on Signal Processing and Information Security. La versión camera-ready ha superado la comprobación de IEEE PDF eXpress.
10–12 nov. 2026
Ponencia en Dubái
Valeri Milke presenta los resultados en la ICSPIS 2026, en el Palace Downtown de Dubái. La conferencia está organizada por la IEEE UAE Section y la University of Dubai. El horario de la ponencia aún no se ha publicado.
Objetivo: marzo de 2027
ACS v0.2.0 previsto
Según la hoja de ruta del proyecto, v0.2.0 está programada para marzo de 2027. Todavía no hay fecha para v1.0. El response envelope de v0.1 solo conoce el tipo final; v0.2 debe añadir progress e interruption.
Conceptos clave del artículo y del estándar
Abra una tarjeta para leer el concepto en detalle. El orden sigue el del artículo: de la pregunta de partida, pasando por el Evidence Contract, hasta los costes y la operación.
La unidad observable es una ruta dirigida: un prompt desencadenante o un registro recuperado p, una decisión de política explícita d, una llamada a una herramienta MCP t y uno o varios efectos observados externamente e. Cada evento lleva un ID de evento inmutable, componente, etapa, versión de esquema y marca de tiempo. Los campos relevantes para la seguridad vinculan hechos cuya igualdad u orden aplica un oráculo de prueba.
W3C Trace Context estandariza los IDs de trace y de parent para correlacionar solicitudes distribuidas. Esto es necesario para una reconstrucción robusta, pero esos IDs no dicen por qué se permitió una acción. En el experimento, el perfil causal P2 atribuyó de forma unívoca el 85,7 % de los efectos. Sin embargo, su recall de seguridad fue de solo el 16,7 %, porque la estructura causal no contiene semántica de aprobación, alcance, procedencia ni destino.
Un análisis MAESTRO/STRIDE se traduce en una tupla H = (boundary, precondition, invariant, evidence, oracle). Ejemplo Approval Replay: el límite se sitúa entre la política y la herramienta. La invariante exige que la herramienta, los argumentos, el principal y el destino coincidan en la llamada con los valores aprobados. El evaluador informa de la regla vulnerada y de la primera etapa en la que la evidencia la demuestra. Así se separan la detección y la localización.
Si faltan los eventos de decisión (fallo F1), la reconstrucción exacta y la atribución caen al 0 % en P1 a P3. El recall de P3 baja al 50 %. La autoridad de la fuente, la memoria y los duplicados siguen siendo detectables, pero las comprobaciones de aprobación, alcance y destino pierden su punto de comparación. Un Decision Receipt duradero y que minimiza los datos vincula a un ID de acción el principal, la versión de la política, el reason code, la operación aprobada, el destino normalizado, el digest de argumentos, las capabilities delegadas y el tiempo de expiración.
Un trace que termina con una respuesta correcta de la herramienta puede pasar por alto si se produjo una escritura externa, si se ejecutó dos veces o si alcanzó otro destino. Por ello, el contract exige un evento de efecto con destino observado, digest de la operación, audience, aprobación y clave de idempotencia. Lo importante es que este efecto se registre en el sistema de destino con independencia del agente, y no solo como respuesta de la herramienta.
El OWASP Agent Control Standard (especificación v0.1.0, release 0.1.2, parte del OWASP GenAI Security Project desde septiembre de 2026) aporta los puntos de control en los que se apoya el Evidence Contract: hooks como steps/toolCallRequest, cinco dispositions, provenance en los argumentos, chain_hash en el envelope de respuesta y mappings de OpenTelemetry y OCSF. Esta página solo trata los componentes que generan evidencia de prueba. La arquitectura del Guardian, los 19 hooks, los perfiles y la madurez se explican en el análisis en profundidad del estándar.
Análisis en profundidad: Agent Control Standard (ACS) →Con el fallo F3 (parent links ausentes en los efectos), la reconstrucción exacta de P2 y P3 cayó al 0 %. La atribución unívoca se mantuvo en el 100 % gracias al fallback por Action-ID. De ello se deriva una regla de ingeniería: una recuperación mediante Action-IDs no debe convertir silenciosamente evidencia dañada en un trace exacto. Una prueba de seguridad en CI debe fallar o poner la evidencia en cuarentena cuando faltan etapas obligatorias o aristas de parent.
El perfil threat-guided P3 generó una mediana de 2341 bytes de JSON canónico por workflow. Eso supone un 255,2 % más que la baseline fragmentada P0, con 659 bytes, y un 88,0 % más que P2, con 1245 bytes. El valor es un indicador de serialización, no una medición de latencia, CPU o costes. Consecuencia práctica: introducir primero Decision, Invocation y Effect Receipts completos para las operaciones privilegiadas, con plazos de conservación explícitos. El sampling no debe eliminar Decision Receipts.
Cuatro perfiles de evidencia y lo que realmente demuestra cada uno
Los perfiles se construyen unos sobre otros. Cada nivel añade campos. Las tasas se refieren a las siete condiciones de telemetría (Tabla II del artículo); los valores en bytes son medianas bajo F0.
Recall 84,5 % · Falsos positivos 85,7 %659 bytes por workflow
- Solo IDs y marcas de tiempo locales a cada componente. La reconstrucción atribuye un efecto a la herramienta más cercana en el tiempo.
- Atribución unívoca 0 %: los workflows paralelos de la misma familia se fusionan en cadenas falsas.
- El recall aparentemente alto no es un rendimiento de seguridad. Las cadenas fusionadas erróneamente disparan la alarma en el 85,7 % de los casos benignos y la precisión cae al 66,4 %.
sin ACSheurística temporalsolo el recuento de duplicados es fiable
Atribución 71,4 % · Recall 16,7 %843 bytes (+27,9 %)
- Un trace ID común agrupa los eventos por solicitud.
- Solo detecta efectos duplicados, porque la cardinalidad no necesita campos semánticos.
- El fallo F2 (trace IDs sustituidos en el límite de la herramienta) rompe por completo la reconstrucción y la atribución.
W3C Trace ContextAgrupación por solicitudvulnerable a trace splits
Atribución 85,7 % · Recall 16,7 %1245 bytes (+88,9 %)
- Los IDs de span y de parent al estilo W3C, más el Action-ID, hacen que la ruta sea reconstruible de forma causal.
- Resiste los trace splits (F2) mediante IDs de parent y de acción. Si se pierden los parents de los efectos (F3), el fallback por Action-ID salva la atribución, pero la reconstrucción exacta cae al 0 %.
- El recall de seguridad se mantiene en el 16,7 %, porque la estructura causal no contiene semántica de aprobación, alcance, procedencia ni destino.
≈ correlación de ACS-Corerequest_id · session_id · turn_idCausalidad ≠ autorización
Recall 92,9 % · Precisión 100 %2341 bytes (+255,2 %)
- Añade las vinculaciones threat-guided: confianza en la fuente, ID de aprobación, digest de argumentos, destino, capability set, profundidad de delegación e idempotencia.
- Cinco grupos de invariantes deterministas: autoridad de la fuente, vinculación de la aprobación, alcance delegado, coherencia de memoria y de destino, y multiplicidad de efectos.
- Regla correcta y primera etapa de la violación en el 92,9 % de los casos inseguros, 0 % de falsos positivos. La laguna restante es F1 (eventos de decisión ausentes).
ACS-Core + Provenance + vinculaciones propias en policy_dataDecision ReceiptsEvidencia de efectos
Interactivo · Trace Replay
Evidence Contract × ACS: comprobar la ruta de un agente etapa por etapa
Elija una familia de ataque del artículo, el perfil de evidencia y, opcionalmente, el fallo F1. Los nombres de campo y los valores proceden del experimento; las reglas de comprobación son las mismas que las del evaluador. Marcada en rojo aparece la etapa en la que la evidencia demuestra primero la violación.
Escenario
Perfil de evidencia
La aprobación era para mail.send con determinados argumentos. Se ejecuta el mismo nombre de herramienta con los argumentos sustituidos. El digest de argumentos difiere.
Prompt o registro recuperado con procedencia, operación solicitada, scope y destino previsto.
- trace_id
- "4bf92f3577b34da6a3ce929d0e0e4736"
- span_id
- "00f067aa0ba902b7"
- parent_span_id
- null
- action_id
- "act-9c41e2d07a"
- source_trust
- "trusted"
- requested_operation
- "read"
- requested_scope
- "kb.read"
- principal_id
- "principal-vamisec"
- memory_trust
- "trusted"
- memory_age_s
- 30
- intended_target
- "tenant-a/resource-17"
Equivalente en ACS v0.1
- Hook / Fuente
- steps/userMessage · steps/knowledgeRetrieval · steps/memoryContextRetrieval
- Campos
- Provenance { origin, source_id, derived_from }
- OpenTelemetry
- acs.message.user · acs.knowledge.retrieval · acs.memory.retrieval + acs.provenance.origin
- OCSF
- 6002 Application Lifecycle (ACS: Application Activity) · 6005 Datastore Activity + acs_provenance_origin
Decisión de política explícita: ¿quién ha aprobado qué, con qué, hacia dónde y con qué capabilities?
- trace_id
- "4bf92f3577b34da6a3ce929d0e0e4736"
- span_id
- "a1b2c3d4e5f60718"
- parent_span_id
- "00f067aa0ba902b7"
- action_id
- "act-9c41e2d07a"
- decision
- "allow"
- approval_id
- "apr-7f3c2a91d0be"
- approval_subject
- "principal-vamisec"
- approved_tool
- "mail.send"
- approved_args_hash
- "a3f9e0…c21e"
- approved_target
- "recipient:security@example.org"
- approved_audience
- "mcp://server-a"
- approved_capabilities
- ["mail.send"]
- max_delegation_depth
- 1
- idempotency_required
- true
Equivalente en ACS v0.1
- Hook / Fuente
- AcsResult (response envelope) · policy_data
- Campos
- decision · reasoning · reason_codes · policy_references · cited_provenance_ids · ask_details · chain_hash
- OpenTelemetry
- span event acs.decision (acs.decision, acs.evaluator)
- OCSF
- 2004 Detection Finding (deny · modify · ask · defer)
Llamada a una herramienta MCP que repite los valores realmente ejecutados, en lugar de limitarse a remitir a la decisión.
- trace_id
- "4bf92f3577b34da6a3ce929d0e0e4736"
- span_id
- "b7ad6b7169203331"
- parent_span_id
- "a1b2c3d4e5f60718"
- action_id
- "act-9c41e2d07a"
- approval_id
- "apr-7f3c2a91d0be"
- approval_subject
- "principal-vamisec"
- tool_name
- "mail.send"
- args_hash
- "9d02b7…e4f8"
- target
- "recipient:security@example.org"
- audience
- "mcp://server-a"
- effective_capabilities
- ["mail.send"]
- delegation_depth
- 1
- idempotency_key
- "idem-5be04d1c"
Equivalente en ACS v0.1
- Hook / Fuente
- steps/toolCallRequest · steps/subagentStart
- Campos
- tool · operation · capability · arguments[].provenance · intent
- OpenTelemetry
- gen_ai.tool.call (ACS span · gen_ai.tool.name, acs.capability)
- OCSF
- 1007 Process Activity
Efecto observado de forma independiente en el sistema de destino, con destino, digest, aprobación y clave de idempotencia.
- trace_id
- "4bf92f3577b34da6a3ce929d0e0e4736"
- span_id
- "5f1e0c2b9d8a7e64"
- parent_span_id
- "b7ad6b7169203331"
- action_id
- "act-9c41e2d07a"
- tool_name
- "mail.send"
- args_hash
- "9d02b7…e4f8"
- target
- "recipient:security@example.org"
- audience
- "mcp://server-a"
- approval_id
- "apr-7f3c2a91d0be"
- idempotency_key
- "idem-5be04d1c"
Equivalente en ACS v0.1
- Hook / Fuente
- steps/toolCallResult + effect sink
- Campos
- exit_status · request_id_ref (ACS) · observed target, digest, idempotency key (sink)
- OpenTelemetry
- gen_ai.tool.result (ACS span · gen_ai.tool.name, acs.exit_status)
- OCSF
- 1007 Process Activity
!Invariante vulneradaRegla: Vinculación de la aprobación · Primera etapa: t (Tool)P3: todas las vinculaciones threat-guided. Las invariantes se pueden comprobar.
Representación esquemática. En ACS, los campos del contract se encuentran en parte en el payload del hook (Input: Provenance; Tool: tool, arguments, capability), las vinculaciones en policy_data del response envelope (Decision) o en un sumidero de efectos independiente (Effect). El Guardian deriva la confianza en la fuente de origin/source_id; no es un campo del esquema v0.1. Valores como example.org son marcadores de posición.
Interactivo · datos de medición reales
Matriz de fallos: dónde se sostiene la detección y dónde se rompe
Cuatro perfiles de evidencia × siete condiciones de telemetría, con 108 instancias de workflow por celda. Elija una métrica y haga clic en una celda para ver los resultados por familia de ataque. Todos los valores proceden de la ejecución reproducible del artículo.
Métrica
| Profil | F0sin modificar | F1sin decision | F2trace split | F3sin parent de efecto | F4desfase temporal | F5efecto duplicado | F6intercambio de Action-ID |
|---|---|---|---|---|---|---|---|
| P0Logs locales | |||||||
| P1+ Trace-ID | |||||||
| P2+ Span/Parent/Action | |||||||
| P3+ Security Bindings |
Celda seleccionada
P3 + Security Bindings × F1 sin decision
Todos los eventos de decisión eliminados. En ACS, aproximadamente un Guardian inaccesible con la failure posture proceed, eventos acs.decision muestreados o un sumidero de trace caído (Trace es best-effort y nunca bloquea la aplicación).
50 %Recall de seguridad
0 %Atribución unívoca
0 %Reconstrucción exacta
0 %Tasa de falsos positivos
100 %Precisión
50 %Regla correcta
Casos inseguros por familia de ataque
- Authority Inversion
- Approval Replay
- Scope Amplification
- Memory Substitution
- Target Redirection
- Duplicate Effect
detectados (12) Falsos positivos en gemelos benignos (6)
Interpretación
La debilidad residual dominante: sin evento de decisión siguen siendo detectables la autoridad de la fuente, la memoria y los duplicados. Las comprobaciones de aprobación, scope y destino pierden su punto de comparación.
Corpus sintético y determinista con 36 plantillas × 3 repeticiones. Las tasas solo son válidas para las seis familias codificadas. Los intervalos de confianza serían engañosos, porque las repeticiones solo varían los IDs y el jitter.
Mapping
Crosswalk de ACS: familia de ataque → predicado → hook → reacción del Guardian
Para cada una de las seis familias del artículo: qué evidencia demuestra la violación, dónde la registra ACS y cómo debería reaccionar un Guardian. MAESTRO, STRIDE y OWASP ASI sirven para contextualizar.
Familia de ataquePredicado de evidenciaMAESTRO · STRIDE · OWASPHook y campos de ACSReacción del GuardianPrimera etapa
Authority InversionProcedencia no fiable Y operación solicitada de escrituraL2 Data Operations · L3 Agent FrameworksSpoofing · Elevation of PrivilegeASI01
steps/ knowledgeRetrieval → Provenance. origin; steps/ toolCallRequest. capabilitydeny, o ask con un aprobador humano; reason code untrusted_into_consequentialpApproval Replay / sustitución de argumentosID de aprobación, sujeto, herramienta o digest de argumentos en la llamada ≠ valores aprobadosL3 Agent Frameworks · L6 Security & ComplianceTampering · RepudiationASI02 · ASI09
AcsResult. policy_ data ↔ steps/ toolCallRequest. argumentsdeny; tras un modify, volver a vincular el receipt a los valores reescritostDelegation Scope AmplificationCapabilities efectivas ⊄ conjunto aprobado O profundidad de delegación > límiteL3 Agent Frameworks · L7 Agent EcosystemElevation of PrivilegeASI03
steps/ subagentStart · steps/ toolCallRequest. capabilitymodify (atenuar las capabilities) o denytMemory Provenance SubstitutionMemoria no fiable o caducada Y destino ≠ destino previstoL2 Data OperationsTampering · SpoofingASI06
steps/ memoryContextRetrieval → Provenance. derived_ fromdeny; entrada de memoria en cuarentenatPost-Decision Target RedirectionDestino aprobado ≠ destino ejecutadoL3 Agent Frameworks · L4 Deployment & InfrastructureTampering · Information DisclosureASI02
steps/ toolCallRequest. arguments (target) ↔ policy_ datadeny; normalizar el destino antes de la comparación (resolución de alias)tDuplicate Effect under RetryMás de un efecto por aprobación (evaluador del artículo); adicionalmente, clave de idempotencia ausente o rotadaL4 Deployment & Infrastructure · L5 Evaluation & ObservabilityRepudiation · TamperingASI08
steps/ toolCallResult + effect sink (idempotency key)Exigir idempotencia; el sumidero de efectos notifica el duplicado como findingeLa asignación a MAESTRO, STRIDE y OWASP ASI, así como las reacciones recomendadas del Guardian, son interpretaciones de VamiSec basadas en el artículo. Los nombres de hooks y campos se corresponden con los ACS Schemas v0.1.0. El reason code untrusted_into_consequential figura allí como categoría de ejemplo.
Interactivo · Threat-to-Assertion
Test compiler: convertir una amenaza en una invariante comprobable
El artículo traduce cada hipótesis MAESTRO/STRIDE en la tupla H = (boundary, precondition, invariant, evidence, oracle). Elija uno de los cinco grupos de invariantes. El compiler muestra la tupla y dos esquemas: una política del Guardian sobre entradas de ACS y una prueba negativa para CI.
Hipótesis H = (boundary, precondition, invariant, evidence, oracle)
- Límite
- Input → Decision
- Precondición
- Un contenido procede de una procedencia no fiable (tool_output, retrieved, external, a2a_inbound).
- Invariante
- Los contenidos no fiables no pueden autorizar ninguna operación de escritura o con consecuencias.
- Evidencia
- Provenance origin/source_id en el input, requested_operation, capability en la llamada a la herramienta
- Oráculo
- Alarma si source_trust ≠ trusted Y operación ∈ {send, write, delete, execute, transfer}. Primera etapa: p
Hipótesis H = (boundary, precondition, invariant, evidence, oracle)
- Límite
- Decision → Tool
- Precondición
- Existe una aprobación (allow o ask con consentimiento).
- Invariante
- El ID de aprobación, el sujeto, la herramienta y el digest de argumentos de la llamada coinciden exactamente con los valores aprobados.
- Evidencia
- Decision Receipt en policy_data, eco de la herramienta en el steps/toolCallRequest
- Oráculo
- Alarma ante cualquier desviación de uno de los cuatro campos. Primera etapa: t
Hipótesis H = (boundary, precondition, invariant, evidence, oracle)
- Límite
- Decision → Tool (Delegation)
- Precondición
- La tarea se delega a un subagente (steps/subagentStart). La delegación A2A no está especificada en ACS v0.1 (v0.2); el Guardian solo ve los encargos A2A entrantes mediante steps/agentTrigger con trigger_type a2a_inbound.
- Invariante
- Capabilities efectivas ⊆ capabilities aprobadas, profundidad de delegación ≤ máximo registrado.
- Evidencia
- approved_capabilities y max_delegation_depth en el receipt, effective_capabilities y delegation_depth en la llamada
- Oráculo
- Alarma ante un superconjunto o una superación de la profundidad. Primera etapa: t
Hipótesis H = (boundary, precondition, invariant, evidence, oracle)
- Límite
- Input (Memory) → Tool
- Precondición
- La memoria es ajena, no está firmada, es entre tenants o tiene más de 24 horas.
- Invariante
- Una memoria contaminada de este modo no puede modificar el destino respecto al destino previsto.
- Evidencia
- memory_trust y memory_age_s en el input (Provenance retrieved), intended_target, target en la llamada
- Oráculo
- Alarma si la memoria está contaminada Y target ≠ intended_target. Primera etapa: t
Hipótesis H = (boundary, precondition, invariant, evidence, oracle)
- Límite
- Tool → Effect
- Precondición
- La operación es de escritura y exige idempotencia.
- Invariante
- Por aprobación, exactamente un efecto observado con clave de idempotencia estable.
- Evidencia
- Sumidero de efectos independiente: IDs de evento, clave de idempotencia, ID de aprobación
- Oráculo
- Alarma ante más de un evento de efecto distinto (así en el evaluador del artículo); clave ausente o rotada como comprobación adicional de VamiSec. Primera etapa: e
package acs.guardian.approval_binding
# Sketch: an approval is valid only for the exact call it approved.
# data.receipts holds the bound values the Guardian wrote into policy_data.
receipt := data.receipts[input.params.metadata.session_id][input.params.payload.tool.name]
# Digest over argument values only (provenance labels excluded).
values := {k: v.value | some k, v in input.params.payload.arguments}
exercised := {
"args_hash": crypto.sha256(json.marshal(values)),
"target": input.params.payload.arguments.target.value,
"principal": input.params.metadata.user_context.user_id,
}
decision := {
"decision": "deny",
"reasoning": "Call does not match the bound approval",
"reason_codes": ["approval_binding_mismatch"],
} if {
input.method == "steps/toolCallRequest"
some field in ["args_hash", "target", "principal"]
exercised[field] != receipt[field]
}Esquemas ilustrativos, no normativos. Rutas como input.params.payload siguen el ACS Request Envelope v0.1.0; los campos de policy_data son las vinculaciones del Evidence Contract.
Calculadora
Presupuesto de evidencia: qué implica el Evidence Contract en almacenamiento
La base son los bytes medianos por workflow del artículo. La calculadora muestra el volumen de JSON canónico por perfil y la priorización del artículo (receipts completos para las operaciones privilegiadas) y, como supuesto de VamiSec, tracing causal para el resto. Allí, sin embargo, desaparece la detección semántica.
Conservación
Volumen durante el período de conservación
- P024 GB
- P131 GB
- P245 GB
- P385 GB
Mezcla recomendada53 GBP3 para workflows privilegiados, P2 para el resto · 146 MB por día
Indicador del volumen de serialización: JSON canónico sin transport envelopes, compresión, indexación, replicación ni controles de protección de datos. No es una medición en producción (artículo §V-C).
Deep Dive · 10 capítulos
Del artículo a la práctica: pruebas de agentes con Evidence Contract y ACS
Problema, modelo de amenazas, Evidence Contract, el OWASP Agent Control Standard, el mapping entre ambos, diseño experimental, resultados, costes, un playbook práctico y los límites de la conclusión. Las cifras proceden del artículo aceptado en la ICSPIS 2026; los datos de ACS, de la especificación v0.1.0.
Por qué las pruebas de agentes necesitan evidencia
Los agentes de IA que usan herramientas cruzan límites de confianza antes de que una operación elegida por el modelo se convierta en un efecto externo. Justamente ahí falta la evidencia en la mayoría de los entornos.
En el Model Context Protocol (MCP), un host crea un cliente por cada servidor. El host debe hacer cumplir la autorización, el consentimiento y los límites de seguridad. Las herramientas se descubren e invocan mediante operaciones de protocolo estructuradas. Sus descripciones y anotaciones pueden influir en el comportamiento del modelo y no son fiables per se. Por ello, un incidente se extiende desde la ingesta de contenidos, pasando por la planificación, la aprobación y la llamada a la herramienta, hasta el efecto remoto. No se queda en una única llamada al modelo.
De esta arquitectura se derivan tres transiciones observables: host→cliente, cliente→servidor y servidor→efecto. Un trace que termina con una respuesta correcta de la herramienta puede aun así pasar por alto si se produjo una escritura externa, si se ejecutó dos veces o si alcanzó otro destino. Los logs habituales de los componentes o un identificador de trace compartido rara vez registran si la aprobación coincidía, en el momento de la ejecución, con el principal, los argumentos, el destino y la autoridad delegada.
Tres preguntas de investigación
- RQ1: ¿Qué perfiles de evidencia reconstruyen un efecto bajo fallos de telemetría controlados y lo atribuyen de forma unívoca?
- RQ2: ¿Mejoran las vinculaciones semánticas derivadas de amenazas la detección de seguridad más allá de la mera correlación?
- RQ3: ¿Qué cuesta la evidencia y qué modos de fallo persisten?
La contribución tiene tres partes: un Evidence Contract de cuatro etapas que traslada los hallazgos de MAESTRO y STRIDE a campos de runtime; un corpus determinista de fault injection con seis familias de ataque, variantes benignas muy próximas y un ledger de ground truth que el reconstructor nunca ve; y una comparación de perfiles fragmentados, correlacionados, causales y threat-guided sobre 3024 celdas.
MAESTRO × STRIDE: del modelo de amenazas a la hipótesis de prueba
El threat modeling encuentra transiciones peligrosas. Una prueba operativa necesita además evidencia que conecte la transición con lo que realmente ocurrió.
MAESTRO organiza las amenazas en siete capas que interactúan de un sistema agéntico y subraya los efectos entre capas. Las capas van desde los Foundation Models, pasando por las operaciones de datos, los frameworks de agentes, la infraestructura de despliegue, la evaluación y la observabilidad, y la seguridad y el cumplimiento, hasta el ecosistema de agentes. STRIDE aporta seis categorías de propiedades: Spoofing, Tampering, Repudiation, Information Disclosure, Denial of Service y Elevation of Privilege.
El artículo utiliza ambos frameworks para seleccionar escenarios relevantes para los límites. No pretende una validación empírica de los frameworks. El OWASP Top 10 for Agentic Applications 2026 sirve como contraste del vocabulario. Sus riesgos, entre ellos ASI01 Agent Goal Hijack, ASI02 Tool Misuse and Exploitation, ASI03 Identity and Privilege Abuse, ASI06 Memory & Context Poisoning y ASI08 Cascading Failures, se consideran allí problemas a nivel de sistema.
| Familia de ataque | Límite comprobado | Pregunta de STRIDE | Relación con OWASP Agentic |
|---|---|---|---|
| Authority Inversion (untrusted source) | Confianza en la fuente en la entrada | Spoofing, Elevation of Privilege | ASI01 Agent Goal Hijack |
| Approval Replay / sustitución de argumentos | Vinculación decisión ↔ llamada | Tampering, Repudiation | ASI02 Tool Misuse and Exploitation, ASI09 Human-Agent Trust Exploitation |
| Delegation Scope Amplification | Autoridad delegada | Elevation of Privilege | ASI03 Identity and Privilege Abuse |
| Memory Provenance Substitution | Procedencia y coherencia de destino | Tampering, Spoofing | ASI06 Memory & Context Poisoning |
| Post-Decision Target Redirection | Destino aprobado | Tampering, Information Disclosure | ASI02 Tool Misuse and Exploitation |
| Duplicate Effect under Retry | Cardinalidad de ejecución | Repudiation, Tampering | ASI08 Cascading Failures |
La selección está organizada con una finalidad concreta según predicados de evidencia en los cuatro límites del contract, y no según la frecuencia de los ataques. La correspondencia con STRIDE y OWASP ASI es una interpretación de VamiSec basada en el artículo y no una cobertura completa de los frameworks.
El Evidence Contract: cuatro etapas que se respaldan mutuamente
La unidad observable es la ruta P = (p, d, t, e). Solo adquiere relevancia para la seguridad cuando las etapas contiguas repiten los mismos hechos y, con ello, se vuelven comparables.
Cada evento lleva un ID de evento inmutable, componente, etapa, versión de esquema y marca de tiempo. Los campos de correlación añaden IDs de trace, span, parent y acción. Los campos threat-guided vinculan hechos cuya igualdad u orden aplica un oráculo de prueba. Lo decisivo es que el evento de la herramienta repita los valores ejecutados, en lugar de limitarse a apuntar a la decisión. Solo la comparación de etapas contiguas hace visibles las sustituciones que permanecen invisibles en traces de mera correlación.
| Etapa | Campos registrados (artículo §III-A) |
|---|---|
| p · Input | Confianza en la fuente, operación y scope solicitados, destino previsto, memory provenance |
| d · Decision | allow/deny, principal, ID de aprobación, herramienta aprobada, digest de argumentos, destino, audience, capability set, límite de profundidad de delegación, requisito de idempotencia |
| t · Tool | Repetición de los valores realmente ejecutados: herramienta, argumentos o digest, destino, capabilities, delegación |
| e · Effect | Destino observado, digest de la operación, audience, aprobación, clave de idempotencia |
Lo que el contract deliberadamente no registra
Ningún perfil registra chain-of-thought oculta. La evidencia de decisión se limita a resultados de política explícitos, reason codes concisos, atributos aprobados y hashes adecuados para pruebas controladas. No es necesario almacenar contenidos sensibles de prompts ni el reasoning del modelo. Las etiquetas de provenance, los identificadores estables y los keyed digests bastan para las pruebas y reducen la exposición.
El OWASP Agent Control Standard (ACS) en diez minutos
ACS es una especificación de wire abierta. Con ella, un Guardian Agent puede revisar las acciones de un agente de IA antes de su ejecución y permitirlas, bloquearlas, reescribirlas, someterlas a aprobación o aplazarlas (allow, deny, modify, ask, defer), mediante envelopes firmados (ACS-Core los exige; la implementación de referencia, una prueba de concepto, aún no lo aplica) y con audit trail.
Desde septiembre de 2026, ACS es un proyecto del OWASP GenAI Security Project, en el nivel 2 (Incubator) según sus propios metadatos; la especificación v0.1.0 es del 5 de junio de 2026 y el tag de release actual es 0.1.2. Surgió del Agent Observability Standard (AOS). Según ACS, un agente se considera fiable si es inspectable, traceable e instrumentable. Es decir, los operadores deben poder determinar a posteriori qué hizo un agente y por qué, y limitar de antemano lo que puede hacer.
19hooks nativos steps/* en la especificación v0.1.0, de sessionStart a sessionEnd, incluidos los tres hooks de skills
5Dispositions: allow, deny, modify, ask, defer
44JSON Schemas en /schema/v0.1.0/
3Pilares: Instrument, Trace, Inspect
Los tres pilares
Instrument
Hooks en puntos de ejecución con consecuencias: input, recuperación de conocimiento, memoria, llamadas a herramientas, compactación, subagentes y skills. Las acciones de código, shell, archivos y red pasan por steps/toolCallRequest, que debe dispararse para toda acción que salga del contexto de razonamiento. El Guardian responde con una disposition. El gate principal de aplicación es steps/toolCallRequest. steps/toolCallResult sirve como gate para ocultar (redact) las salidas antes de que lleguen al agente.
Trace
Vocabulario normativo para OpenTelemetry y OCSF. Una llamada a una herramienta se convierte en el span gen_ai.tool.call con gen_ai.tool.name y acs.capability. Las decisiones se registran como span event acs.decision en el span del paso evaluado, no como un span propio. En OCSF, deny, modify, ask y defer pasan a ser Detection Findings (clase 2004). Los mappings tienen el estado «Working draft»; Trace es best-effort y una autodeclaración del entorno observado. Los tres hooks de skills no están mapeados, y gen_ai.tool.call es un nombre de span de ACS, no un span de OpenTelemetry GenAI (allí: execute_tool {gen_ai.tool.name}).
Inspect
Una Agent Bill of Materials (AgBOM) revela las herramientas, los modelos y los datos accesibles del agente, y puede mapearse a CycloneDX, SPDX y SWID. Los métodos agbom/snapshot y agbom/changed se registran en OCSF como clase 5001 Device Inventory Info (ACS la denomina «Inventory Info»). Serialización en CycloneDX 1.6, SPDX 3.0 o SWID (al menos uno; estado «Working draft»).
Wire, provenance y audit chain
- Wire format JSON-RPC 2.0. Namespaces de métodos: steps/* (hooks), protocols/* (MCP encapsulado; A2A está reservado para v0.2), agbom/*, system/* y handshake/*. En caso de conflicto de versión, el handshake termina con UNSUPPORTED_VERSION. La prosa de la especificación aún presupone mecanismos de MCP anteriores a la revisión 2026-07-28, y si el wrapping de MCP forma parte de ACS-Core es contradictorio en el texto; las llamadas a herramientas MCP también pueden pasar por steps/toolCallRequest/-Result.
- Provenance es una etiqueta factual de procedencia en los campos que transportan datos. La asigna código determinista del framework, nunca el LLM: origin (user_input, system, tool_output, retrieved, agent_generated, a2a_inbound, external), source_id y derived_from como aristas de linaje.
- En el perfil acs-provenance, la provenance a nivel de campo es obligatoria para todo campo con datos de la sesión, incluido cada argumento de steps/toolCallRequest. La clasificación de confianza la realiza el Guardian según su política local; no es un campo del esquema v0.1.
- Cada respuesta para un paso que transporta contenido lleva un chain_hash: la cabeza SHA-256 rodante de la audit chain. policy_references (incluida la policy_version opcional) y cited_provenance_ids hacen que la decisión sea reproducible.
- Las firmas son criptoágiles y obligatorias en ACS-Core: cada solicitud y cada respuesta se firma sobre el envelope canónico; HMAC-SHA256 con una clave de sesión derivada mediante HKDF es la base que lo cumple. Hace evidente la manipulación en la red, pero no un Guardian comprometido. El no repudio solo llega con el perfil acs-crypto: ML-DSA-65 (obligatorio) y SLH-DSA-128s (recomendado como respaldo).
Evidence Contract ↔ ACS: qué cubre el estándar y qué debe completar usted
ACS aporta, para input, decision y tool, los hooks, envelopes y mappings de trace; para el efecto, solo la respuesta de la herramienta. Las dos lagunas más importantes son la vinculación de la decisión, cuya ausencia explica en el experimento la debilidad residual dominante F1, y la evidencia de efectos independiente, que el artículo fundamenta como requisito pero no mide por separado.
| Etapa del contract | Equivalente en ACS (v0.1.0) | Necesidad de complemento |
|---|---|---|
| p · Input & Provenance | steps/userMessage, steps/knowledgeRetrieval, steps/memoryContextRetrieval; Provenance origin/source_id/derived_from; atributo OTel acs.provenance.origin; enriquecimiento OCSF acs_provenance_origin | Mantener la confianza en la fuente como política del Guardian (el esquema v0.1 no tiene campo trust) |
| d · Decision | AcsResult: decision, reasoning, reason_codes, policy_references (policy_version), cited_provenance_ids, ask_details (approver, timeout_disposition), chain_hash; span event acs.decision; OCSF 2004 Detection Finding | Vincular en policy_data el digest de argumentos, el destino normalizado, el capability set, la profundidad de delegación, la expiración y el requisito de idempotencia; persistir el Decision Receipt de forma duradera |
| t · Tool & Delegation | steps/toolCallRequest: tool, operation, capability, arguments con provenance, raw_command, intent; steps/subagentStart o agentTrigger (a2a_inbound); turn_id/parent_turn_id; span gen_ai.tool.call; OCSF 1007 | Comparar los valores ejecutados con el receipt: igualdad de digest de argumentos, destino y capability como oráculo de prueba |
| e · Effect | steps/toolCallResult (exit_status, request_id_ref); span gen_ai.tool.result | Observación independiente del efecto en el sistema de destino (gateway, auditoría de BD, sink) con destino observado, digest de la operación y clave de idempotencia, correlacionada mediante el Action-ID |
Los datos de ACS proceden de los JSON Schemas v0.1.0 publicados (hooks/*, provenance.json, response-envelope.json, trace/otel-mapping.json, trace/ocsf-mapping.json). policy_data está previsto expresamente en el estándar como campo estructurado y específico de la política. Según la especificación, los eventos Trace de ACS son autodeclaraciones del entorno observado y best-effort; solo se convierten en evidencia cuando una parte ajena al runtime emisor los atestigua. Las firmas (acs-crypto) y la vinculación de contenido (acs-audit) refuerzan la integridad. El experimento asume telemetría auténtica (capítulo 10).
Por qué la laguna de efectos es estructural
Los hooks de ACS se disparan en el runtime del agente. steps/toolCallResult informa de lo que la herramienta devuelve al agente. No informa de lo que ocurrió realmente en el sistema de destino. El artículo muestra por qué importa esta diferencia: un trace que termina en la respuesta correcta de la herramienta puede pasar por alto escrituras duplicadas o destinos redirigidos. Por ello, la evidencia de efectos debe proceder de una segunda fuente, independiente del agente. Se vincula al trace de ACS mediante Action-IDs y Request-IDs.
Por qué fail-open es el problema F1
Si el Guardian no está accesible con la failure posture proceed, la acción continúa. ACS exige registrar como audit event todo proceed en fail-open, pero no se genera ningún comprobante de decisión con vinculaciones de aprobación. Operativamente, esto corresponde al fallo F1 del experimento (interpretación de VamiSec). Si faltan los eventos de decisión, la reconstrucción exacta y la atribución caen al 0 %, y el recall del perfil threat-guided al 50 %. Por ello, un despliegue de ACS que se tome en serio las pruebas de seguridad negocia on_decision_failure: deny (en la implementación de referencia: ACS_ON_DECISION_FAILURE=deny), establece la startup posture refuse en el Observed Agent y trata un receipt ausente como un fallo de prueba, no como una laguna en el log.
Diseño experimental: corpus, perfiles y fallos
36 plantillas de workflow, tres repeticiones deterministas, cuatro perfiles de evidencia, siete condiciones de telemetría. Además, un ledger de ground truth que el reconstructor nunca llega a ver.
El corpus contiene seis familias de workflows, cada una con cuatro variantes inseguras y dos variantes benignas muy próximas: 36 plantillas, de las cuales 24 son inseguras y 12 benignas. Tres repeticiones deterministas dan 108 instancias de workflow. Las repeticiones varían los identificadores y el jitter de los eventos. Son una comprobación de reproducibilidad, no muestras estadísticas independientes.
Un generador de confianza produce eventos JSON canónicos de tipo MCP. Por separado se crea un ledger de ground truth con las identidades de evento esperadas, las aristas de parent, las etiquetas de unsafe, la regla vulnerada y la primera etapa de la violación. Antes de la reconstrucción se eliminan de los eventos observables los IDs privados de caso. Los workflows de la misma familia comparten una ventana temporal deliberadamente solapada. Es un caso difícil para la atribución por proximidad temporal.
| Condición | Fallo | Equivalente real en la operación de ACS |
|---|---|---|
| F0 | Evidencia sin modificar | Referencia |
| F1 | Todos los eventos de decisión eliminados | Guardian inaccesible con proceed, eventos acs.decision muestreados, Detection Findings descartados, sumidero de trace caído (Trace es best-effort y nunca bloquea la aplicación) |
| F2 | Trace IDs sustituidos en el límite de la herramienta | Context propagation interrumpida entre el cliente y el servidor MCP |
| F3 | Parent links eliminados en los eventos de efecto | Telemetría de efectos de los sistemas de destino sin contexto de trace |
| F4 | Marcas de tiempo desplazadas, orden invertido | Clock skew, exportadores asíncronos |
| F5 | Telemetría de efectos duplicada | Exportación at-least-once, retries en el collector |
| F6 | Action-IDs intercambiados entre workflows paralelos | Errores de concurrencia en la instrumentación o en el collector |
La columna “Equivalente real” es una interpretación de VamiSec, no un resultado del artículo. Los fallos dirigidos a campos que no existen en un perfil se consideran no aplicables para la puntuación de fault detection.
Reconstrucción y métricas
- P0 agrupa un efecto con la herramienta más cercana en el tiempo, P1 por trace ID. P2 y P3 siguen las aristas de parent y recurren a los Action-IDs cuando falta el parent de un efecto.
- La reconstrucción exacta exige prompt, decisión, herramienta, todos los efectos y, en P2/P3, las aristas de parent esperadas.
- La atribución unívoca exige que todos los efectos esperados se asignen exactamente al prompt, la decisión y la herramienta correctos, incluso cuando falta una arista de parent.
- Recall y precisión usan la etiqueta de unsafe; la tasa de falsos positivos benignos, las 12 plantillas benignas. Las tasas de Correct-Rule y First-Stage ponen a prueba el diagnóstico.
La implementación utiliza exclusivamente la biblioteca estándar de Python. Dos ejecuciones limpias produjeron hashes byte-idénticos de configuración, casos, agregados y summary. Tres pruebas unitarias comprueban el tamaño y el equilibrio de la matriz, las salidas deterministas y la comparación de recall de P3 frente a P2.
Resultados: qué se sostiene y qué se rompe
La evidencia causal resiste los trace splits y los parents de efecto perdidos. Sin embargo, la ausencia de la etapa de decisión impide la reconstrucción completa y elimina una parte esencial del significado de seguridad.
| Perfil | Exacto | Atribución | Recall | Precisión | Falsos positivos | Bytes |
|---|---|---|---|---|---|---|
| P0 · IDs locales, tiempo | 0,0 % | 0,0 % | 84,5 % | 66,4 % | 85,7 % | 659 |
| P1 · + Trace-ID | 71,4 % | 71,4 % | 16,7 % | 100 % | 0 % | 843 |
| P2 · + Span/Parent/Action | 71,4 % | 85,7 % | 16,7 % | 100 % | 0 % | 1245 |
| P3 · + Security Bindings | 71,4 % | 85,7 % | 92,9 % | 100 % | 0 % | 2341 |
Tabla II del artículo: tasas agregadas sobre las siete condiciones de telemetría. Bytes = mediana del JSON canónico por workflow bajo F0.
P0 nunca alcanzó una atribución unívoca, porque los workflows solapados en el tiempo se fusionaron. Su recall aparente del 84,5 % no es un rendimiento de seguridad utilizable: las cadenas fusionadas erróneamente dispararon la alarma en el 85,7 % de los casos benignos. P1 solo detectó efectos duplicados. P2 elevó la atribución unívoca al 85,7 %, pero el recall de seguridad se mantuvo en el 16,7 %. P3 conservó la atribución de P2 y elevó el recall, la Correct-Rule-Rate y la localización First-Stage al 92,9 %.
Sensibilidad a los fallos
- 1F0Evidencia sin modificar
P1 a P3 reconstruyen y atribuyen cada workflow. P3 alcanza un 100 % de recall y de precisión sin falsos positivos.
- 2F2Trace split en el límite de la herramienta
P1 pierde por completo la reconstrucción y la atribución. P2 y P3 se mantienen en el 100 %, porque los IDs de parent y de acción salvan el límite de trace modificado.
- 3F3Parents de efecto perdidos
La reconstrucción exacta de P2/P3 cae al 0 %; la atribución unívoca se mantiene en el 100 % gracias al action fallback.
- 4F4–F6Desfase temporal, duplicados, intercambio de Action-IDs
Sin pérdidas en P2/P3: la evidencia restante proporciona una ruta unívoca y las comprobaciones de corrupción detectan la inconsistencia inyectada.
- 5F1Eventos de decisión ausentes
La debilidad residual dominante: la reconstrucción y la atribución caen al 0 % en P1 a P3, y el recall de P3 al 50 %. La autoridad de la fuente, la memoria y los duplicados siguen siendo detectables. La vinculación de la aprobación, del scope y del destino pierde su punto de comparación.
Costes de evidencia y operación: priorizar en lugar de hacer sampling
Más vinculaciones significan más bytes. La respuesta es una priorización consciente, no un sampling que elimine Decision Receipts.
659 BP0 por workflow (mediana, JSON canónico, F0)
843 BP1: +27,9 %
1245 BP2: +88,9 %
2341 BP3: +255,2 % frente a P0, +88,0 % frente a P2
P3 añade 1682 bytes (aproximadamente 1,64 KiB) respecto a P0 y 1096 bytes respecto a P2. Un collector con la misma representación de eventos conservaría, para un workflow de tamaño medio, aproximadamente 3,55 veces los bytes canónicos de P0, o 1,88 veces los de P2. Estos valores responden a RQ3 como comparación del volumen de serialización. No miden latencia, CPU, volumen de transmisión, compresión, indexación ni costes monetarios.
Reglas de operación del artículo, traducidas a ACS
- Receipts de Decision, Invocation y Effect completos primero para las operaciones privilegiadas: en términos de ACS, para capabilities como filesystem.delete, network.egress o process.execute.
- Fijar límites de conservación explícitos. La deduplicación, la compresión y los keyed digests pueden reducir el volumen, pero deben medirse por separado.
- Quien omite un campo relevante para las invariantes o elimina Decision Receipts mediante sampling modifica el Evidence Contract y debe volver a evaluar. F1 muestra lo que entonces se pierde.
- Modelar por separado integridad, relojes, conservación y control de acceso. ACS ofrece para ello la base HMAC (acs-core), firmas asimétricas o PQC (acs-crypto), request_hash (acs-audit) y el chain_hash de la cadena de auditoría.
Playbook práctico: pruebas de seguridad basadas en ACS en la pipeline
Así traslada usted el artículo y el estándar a una batería de pruebas que se ejecuta en CI y se pone en rojo de forma fiable cuando falta evidencia.
- 1Paso 1Traducir las amenazas en hipótesis
Recorrer las capas de MAESTRO y las propiedades de STRIDE para cada workflow de agentes. Para cada transición peligrosa, formular una tupla H = (boundary, precondition, invariant, evidence, oracle).
- 2Paso 2Definir los hooks y perfiles de ACS
ACS-Core como base, más los perfiles acs-trace y acs-provenance. Además de los seis hooks obligatorios de ACS-Core (sessionStart, userMessage o agentTrigger, toolCallRequest, toolCallResult, agentResponse, sessionEnd), instrumentar steps/knowledgeRetrieval, steps/memoryContextRetrieval y steps/subagentStart, y comprobar que el Guardian los incluye en methods_evaluated (si no, rige ALLOW-by-default).
- 3Paso 3Definir el Decision Receipt
Principal, versión de la política, reason code, operación, destino normalizado, digest de argumentos, capabilities, profundidad de delegación, expiración e idempotencia en policy_data. Persistido y vinculado a request_id y chain_hash.
- 4Paso 4Endurecer la failure posture
Establecer la failure posture en fail-closed: on_decision_failure: deny en el ServerHello (implementación de referencia: ACS_ON_DECISION_FAILURE=deny) y, en el Observed Agent, la startup posture refuse por si ya falla el handshake. Firmar los envelopes. Un receipt ausente es un fallo de prueba.
- 5Paso 5Conectar un sumidero de efectos (effect sink) independiente
La auditoría de gateway, de base de datos o de sink aporta el destino observado, el digest de la operación y la clave de idempotencia, correlacionados mediante el Action-ID.
- 6Paso 6Pruebas negativas con gemelos benignos
Por cada familia, casos inseguros y casos benignos muy próximos, como la resolución de alias permitida o los accesos de lectura repetidos. Congelar los predicates antes de probar.
- 7Paso 7Dos gates de CI
Gate 1, reconstrucción: etapas obligatorias y aristas de parent completas; de lo contrario, cuarentena. Gate 2, corrección: invariantes cumplidas; de lo contrario, interrupción indicando la regla vulnerada y la primera etapa.
- 8Paso 8Inyectar fallos de telemetría
Ejecutar F1 a F6 con regularidad contra la propia pipeline. Una prueba que sigue en verde bajo F1 no comprueba aprobaciones.
Prueba negativa: Approval Replay
Conceder la aprobación para la herramienta A con el digest de argumentos X y, a continuación, llamar a la herramienta A con el digest Y. Se espera que la invariante de vinculación de la aprobación (Approval Binding) resulte vulnerada en la etapa t. Gemelo benigno: aprobación nueva y vinculada con retry.
Prueba negativa: Target Redirection
Destino aprobado tenant-a, destino ejecutado tenant-b. Se espera que la igualdad de destino resulte vulnerada en la etapa t o e. Gemelo benigno: resolución de alias permitida al mismo destino canónico.
Prueba negativa: Scope Amplification
El subagente hereda write, aunque solo se delegó read. Se espera: capabilities efectivas ⊄ conjunto aprobado. Gemelo benigno: child atenuado con solo lectura (read-only).
Límites de la conclusión y el siguiente paso de validación
El experimento valida la fuerza probatoria de la evidencia para fixtures deterministas de tipo MCP. No es un benchmark de LLM ni de robustez en producción.
El estudio utiliza fixtures deterministas sintéticos, invariantes escritas a mano y calendarios de eventos fijos. No ejecuta ningún LLM, ninguna implementación de MCP, ningún OAuth, ningún motor de políticas ni ningún servicio externo. No mide el éxito de la prompt injection ni demuestra que un control impida un efecto. Precision y recall solo son válidos para las seis familias codificadas. Dado que el evaluador se diseñó a partir de las mismas hipótesis de amenaza, el experimento prueba la fuerza probatoria y la coherencia de la implementación, no el descubrimiento de nuevas amenazas.
- El ledger de ground truth está separado lógicamente, pero procede de la misma base de código. Implementaciones independientes, mutación property-based y capturas reales de protocolo reducirían los errores de modo común.
- Se da por supuesto que la telemetría es auténtica. Siguen abiertos los productores falsificados, el truncamiento de logs más allá de los fallos inyectados, los collectors comprometidos y la verificación criptográfica.
- Las nuevas clases de amenaza necesitan su propia hipótesis, campos, oráculos y pruebas escritas de forma independiente. Resource Exhaustion, por ejemplo, requiere evidencia de presupuesto y de consumo; la telemetría falsificada requiere identidad del productor y comprobación de integridad.
Divulgación del artículo: OpenAI Codex se utilizó para la organización de la literatura, el andamiaje de la implementación y la revisión del código de evaluación sintético, los primeros borradores y la revisión lingüística, así como el formateo. La formulación de la pregunta, el modelo de amenazas, la ejecución, la comprobación de los resultados y las fuentes, y todas las decisiones finales corresponden al autor.
Autoevaluación
Evidence-Readiness-Radar: ¿se pueden probar realmente sus agentes?
Diez preguntas en cinco dimensiones, derivadas del Evidence Contract del artículo y de los perfiles del OWASP Agent Control Standard. El resultado muestra dónde su telemetría todavía no respalda las aprobaciones, los destinos, la delegación y los efectos.
- 01ProvenanceACS · Provenance¿Recibe todo contenido que llega al agente (entrada del usuario, retrieval, salida de herramientas, memoria) una etiqueta de procedencia asignada de forma determinista, con indicación de la fuente?
- 02ProvenanceArtículo §IV-C¿Impide una política que contenidos de fuentes no fiables autoricen una operación con consecuencias?
- 03Decision ReceiptsArtículo §VI-A¿Existe, para cada ejecución de herramienta con consecuencias, un comprobante de decisión persistido con principal, versión de la política y reason code?
- 04Decision ReceiptsArtículo §III-A¿Vincula el comprobante de decisión el digest de argumentos, el destino normalizado, el capability set, la profundidad de delegación y el tiempo de expiración?
- 05Herramienta y delegaciónACS · steps/toolCallRequest¿Repite el evento de la herramienta los valores realmente ejecutados, en lugar de limitarse a remitir a la decisión?
- 06Herramienta y delegaciónACS · steps/subagentStart¿Se registran las delegaciones a subagentes con sus capabilities efectivas y su profundidad, y se comprueban frente al conjunto aprobado?
- 07Evidencia de efectosArtículo §II-A¿Se observa el efecto en el sistema de destino con independencia del agente, por ejemplo mediante auditoría del gateway, de la base de datos o del sink?
- 08Evidencia de efectosArtículo §III-B¿Llevan los efectos de escritura una clave de idempotencia, de modo que las ejecuciones duplicadas bajo retry sean detectables?
- 09Operación e integridadACS · Failure posture¿Está su Guardian configurado como fail-closed, de modo que sin decisión no se ejecute ninguna acción?
- 10Operación e integridadArtículo §VI-A¿Fallan sus pruebas de seguridad en CI cuando faltan en la evidencia etapas obligatorias o aristas de parent?
Responda a las diez preguntas. El resultado aparecerá aquí.
0de 20 puntos
Registrado en logs, pero no comprobable
Su telemetría muestra, como mucho, que los eventos están relacionados entre sí. No es posible demostrar si se respetaron las aprobaciones, los destinos y las delegaciones. En el experimento, esto corresponde a los perfiles P0 a P2: P1 y P2 atribuyen, pero solo detectan el 16,7 % de los casos inseguros. P0 no atribuye de forma unívoca en absoluto; su recall nominalmente más alto (84,5 %) se debe a cadenas fusionadas erróneamente, con un 85,7 % de falsos positivos.
0de 20 puntos
Parcialmente sólido
Hay vinculaciones importantes, pero falta al menos una etapa del contract o no es comparable. Lo típico son Decision Receipts o evidencia de efectos ausentes. El artículo muestra qué ocurre entonces: sin eventos de decisión, el recall se reduce a la mitad.
0de 20 puntos
Evidence-ready
Su configuración se acerca al perfil threat-guided P3. Próximos pasos: ejecutar los fallos de telemetría F1 a F6 contra su propia pipeline, activar las firmas y la audit chain, y trasladar las pruebas negativas a un SDK de MCP real.
Sus tres mayores lagunas
No se han encontrado lagunas. Verifique el resultado con una fault injection contra su pipeline real.
Research Edition · descarga gratuita
Threat-Model-Guided Security Testing for Agentic AI: artículo y ACS Practitioner Brief
El artículo aceptado en la ICSPIS 2026 como accepted version, complementado con una parte práctica. Muestra cómo puede implantar el Evidence Contract con el OWASP Agent Control Standard y llevarlo a su pipeline en forma de pruebas negativas.

Artículo (5 págs.) + ACS BriefPDF, gratuitoInglésActualizado: 10/2026
- Artículo completo: método, resultados sobre 3024 celdas, análisis de fallos y límites de validez
- Mapping Evidence Contract ↔ ACS v0.1: hooks, provenance, dispositions, OTel y OCSF
- Esquema mínimo del Decision Receipt y recomendaciones sobre la failure posture: fail-closed en lugar de proceed
- Catálogo de pruebas negativas con seis familias de ataque y gates de CI para reconstrucción y corrección
Qué contiene la Research Edition
El artículo completo
La versión aceptada (accepted version) del artículo de la ICSPIS 2026 con método, Tabla I/II, análisis de fallos, costes de evidencia y límites de validez. Publicada con el aviso de copyright de IEEE.
ACS Practitioner Brief
En cuatro páginas: el mapping del Evidence Contract a hooks de ACS, provenance, dispositions, spans de OpenTelemetry y clases OCSF, incluidas las lagunas de ACS v0.1 que debe cerrar usted mismo.
Esquema del Decision Receipt
Los campos mínimos de un comprobante de decisión que minimiza los datos: principal, versión de la política, reason code, operación, destino, digest de argumentos, capabilities, profundidad de delegación, expiración y clave de idempotencia.
Catálogo de pruebas negativas
Seis familias de ataque, cada una con cuatro variantes inseguras y dos benignas, como plantilla para su propia batería de pruebas, más gates de CI para reconstrucción y corrección.
El estándar en detalle
OWASP Agent Control Standard: entender el control en tiempo de ejecución antes de probarlo
Esta página usa ACS como vocabulario de la evidencia de prueba. Cómo funciona el propio estándar – Guardian y Observed Agent, 19 hooks, cinco dispositions, handshake y failure posture, perfiles y la madurez de v0.1.0 – lo explica nuestro análisis en profundidad, con simulador del Guardian, ciclo de vida de los hooks y matriz de riesgos.
19hooks nativos steps/*
5dispositions: allow, deny, modify, ask, defer
7perfiles: ACS-Core y seis opcionales
- Simulador del Guardian con ejemplos de wire fieles al esquema
- Matriz de riesgos OWASP Agentic Top 10 × componentes de ACS
- Autoevaluación de preparación para ACS y whitepaper para CISOs (en alemán)
FAQ
Preguntas frecuentes sobre Agentic AI Security Testing y ACS
Respuestas breves a las preguntas que más nos llegan sobre el artículo, el Evidence Contract y el OWASP Agent Control Standard.
El Threat-Model-Guided Security Testing deriva la telemetría y los oráculos de prueba de un agente de IA directamente de un modelo de amenazas; en el artículo, de MAESTRO y STRIDE. Cada amenaza se convierte en una tupla comprobable formada por límite, precondición, invariante, evidencia y oráculo. La prueba verifica entonces de forma determinista si los hechos registrados cumplen la invariante, por ejemplo si la herramienta, los argumentos y el destino coinciden en la llamada con los valores aprobados.
ACS aporta los puntos de control y el vocabulario: hooks como steps/toolCallRequest, provenance en los argumentos, dispositions, chain_hash y mappings de OpenTelemetry y OCSF. El Evidence Contract del artículo define qué hechos deben vincularse como mínimo en esos puntos para que una prueba pueda comprobar aprobación, destino, alcance y procedencia. Dos componentes los añade el operador: un decision receipt persistente con campos de vinculación en policy_data y efectos observados de forma independiente en el sistema de destino. El propio estándar – Guardian, 19 hooks, cinco dispositions, perfiles y madurez – lo explica nuestro análisis en profundidad «Agent Control Standard (ACS)» del área Agentic AI Security.
No. Los trace IDs y los parent IDs muestran qué eventos están relacionados entre sí. No muestran por qué se permitió una acción. En el experimento, el perfil puramente causal atribuyó de forma unívoca el 85,7 % de los efectos, pero solo detectó el 16,7 % de los casos inseguros. Solo las vinculaciones relevantes para la seguridad, como el ID de aprobación, el digest de argumentos, el destino, las capabilities y la procedencia, elevaron el recall al 92,9 %.
El artículo recomienda un comprobante de decisión duradero y que minimice los datos, que vincule a un ID de acción el principal, la versión de la política, el reason code, la operación aprobada, el destino normalizado, el digest de argumentos relevante, las capabilities delegadas y el tiempo de expiración. En ACS, decision, reasoning, reason_codes, policy_references y chain_hash ya figuran en el response envelope. Los campos de vinculación los añade usted en policy_data.
Con proceed, una acción continúa aunque el Guardian no esté accesible. ACS prescribe registrar como audit event todo proceed en fail-open, pero entonces no existe ningún comprobante de decisión con vinculaciones de aprobación. Según nuestra interpretación, esto corresponde al fallo F1 del experimento: sin eventos de decisión, la reconstrucción y la atribución cayeron al 0 % y el recall al 50 %. La especificación prevé expresamente on_decision_failure: deny (fail-closed) para los despliegues que no aceptan cambiar aplicación por disponibilidad; para los handshakes fallidos se añade la startup posture refuse, configurada fuera del protocolo. Sin ella, un handshake fallido inicia la sesión sin protección (su valor por defecto también es proceed). El README del proyecto aconseja establecer ACS_ON_DECISION_FAILURE=deny antes de confiar en el fail-closed. El propio valor por defecto proceed está en debate en el proyecto (issues #32 y #37).
En la mediana, el perfil threat-guided generó 2341 bytes de JSON canónico por workflow. Eso supone un 255,2 % más que los logs fragmentados (659 bytes) y un 88,0 % más que el tracing causal (1245 bytes). El valor es un indicador del volumen de serialización, sin compresión, transporte ni indexación. En la práctica, introduzca primero los receipts completos para las operaciones privilegiadas.
No. El experimento valida la fuerza probatoria de la evidencia para fixtures deterministas de tipo MCP. No ejecuta ningún LLM, ninguna implementación real de MCP ni ningún motor de políticas, y no mide si una prompt injection tiene éxito. Benchmarks como InjecAgent o AgentDojo responden a la cuestión de la robustez. El artículo parte de ahí y aclara qué evidencia necesita como mínimo un evaluador para reconstruir y clasificar una ruta.
El artículo ha sido aceptado para la 9th International Conference on Signal Processing and Information Security (ICSPIS 2026), que se celebra del 10 al 12 de noviembre de 2026 en Dubái. La versión aceptada está disponible aquí para su descarga como Research Edition, con el aviso de copyright de IEEE y un ACS Practitioner Brief complementario. Tras la publicación añadiremos la cita completa con enlace a IEEE Xplore.
Estándares y fuentes
Los contenidos de esta página se basan en las siguientes guías y estudios disponibles públicamente.
V. Milke, VamiSec GmbH · ICSPIS 2026 (aceptado) · 2026
Threat-Model-Guided Security Testing for Agentic AI: MCP Traces with MAESTRO and STRIDE
Fuente primaria de esta página: Evidence Contract, corpus de fault injection y resultados sobre 3024 celdas. Accepted version con aviso de copyright de IEEE.
OWASP GenAI Security Project · 2026
Agent Control Standard (ACS) ↗
Listado en el área Agentic Security, con fecha del 1 de septiembre de 2026
GenAI Security Project (GitHub) · 2026
agent-control-standard: especificación, esquemas e implementación de referencia (prueba de concepto) ↗
README con las lagunas conocidas de la implementación de referencia (autenticación del wire, failure posture proceed) y hoja de ruta (v0.2.0, objetivo: marzo de 2027). En v0.1.0 la conformidad es autodeclarada, sin suite de pruebas (issue #19).
OWASP GenAI Security Project · 2026
ACS JSON Schema v0.1.0 (44 schemas) ↗
Request/Response envelope, Provenance, hooks y mappings de OpenTelemetry y OCSF: base del mapping de esta página.
Model Context Protocol · 2026
Model Context Protocol: Architecture (Revision 2026-07-28) ↗
Host, clientes y servidores; responsabilidad del host en materia de autorización y consentimiento.
Model Context Protocol · 2026
Model Context Protocol: Tools (Revision 2026-07-28) ↗
Descubrimiento e invocación de herramientas; recomendación de que una persona pueda rechazar las operaciones sensibles.
K. Huang, Cloud Security Alliance · 2025
Agentic AI Threat Modeling Framework: MAESTRO ↗
Siete capas que interactúan, con foco en los efectos entre capas.
Microsoft Learn
Threats: Microsoft Threat Modeling Tool (STRIDE) ↗
Las seis categorías de STRIDE como anclas de propiedades.
W3C · 2021
Trace Context (W3C Recommendation) ↗
Trace IDs y parent IDs estandarizados para la correlación distribuida: base de los perfiles P1/P2.
OWASP GenAI Security Project · 2025
OWASP Top 10 for Agentic Applications for 2026 ↗
ASI01–ASI10 como contraste para el vocabulario de los escenarios.
Zhan, Liang, Ying, Kang · Findings of ACL · 2024
InjecAgent: Benchmarking Indirect Prompt Injections in Tool-Integrated LLM Agents ↗
Benchmark de prompt injection indirecta a través de herramientas.
Debenedetti et al. · NeurIPS Datasets and Benchmarks · 2024
AgentDojo: A Dynamic Environment to Evaluate Prompt Injection Attacks and Defenses for LLM Agents ↗
Entorno ampliable con tareas, ataques y defensas realistas.
NIST · 2008
NIST SP 800-115: Technical Guide to Information Security Testing and Assessment ↗
Procedimientos de prueba repetibles y evidencia clara.
OCSF Project
Open Cybersecurity Schema Framework (OCSF) ↗
Clases de eventos a las que mapea ACS: 3002 Authentication, 6002 («Application Activity» en ACS, Application Lifecycle en OCSF), 1007 Process Activity, 6005 Datastore Activity, 2004 Detection Finding, 5001 Device Inventory Info.
¿Se pueden probar sus agentes, o solo están registrados en logs?
En la consulta inicial comprobamos si la telemetría de sus agentes respalda realmente las aprobaciones, los destinos, la delegación y los efectos. Además, aclaramos cómo llevar hooks de ACS, políticas del Guardian y pruebas negativas a su pipeline.