@aimarket/warden 0.18.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/CHANGELOG.md +25 -2
  2. package/README-es.md +16 -14
  3. package/README-fr.md +16 -14
  4. package/README-ru.md +16 -14
  5. package/README-zh.md +16 -14
  6. package/README.md +17 -15
  7. package/dist/claude-hook.d.ts.map +1 -1
  8. package/dist/claude-hook.js +9 -3
  9. package/dist/claude-hook.js.map +1 -1
  10. package/dist/flow-guard.d.ts +91 -5
  11. package/dist/flow-guard.d.ts.map +1 -1
  12. package/dist/flow-guard.js +433 -19
  13. package/dist/flow-guard.js.map +1 -1
  14. package/dist/mcp-server.js +4 -0
  15. package/dist/mcp-server.js.map +1 -1
  16. package/dist/review-diff.d.ts +5 -4
  17. package/dist/review-diff.d.ts.map +1 -1
  18. package/dist/review-diff.js.map +1 -1
  19. package/dist/static-scan.d.ts +1 -1
  20. package/dist/static-scan.d.ts.map +1 -1
  21. package/dist/static-scan.js +109 -3
  22. package/dist/static-scan.js.map +1 -1
  23. package/dist/wrap-cli.d.ts +6 -0
  24. package/dist/wrap-cli.d.ts.map +1 -1
  25. package/dist/wrap-cli.js +8 -2
  26. package/dist/wrap-cli.js.map +1 -1
  27. package/dist/wrap.d.ts.map +1 -1
  28. package/dist/wrap.js +125 -19
  29. package/dist/wrap.js.map +1 -1
  30. package/docs/flow-guard.es.md +77 -21
  31. package/docs/flow-guard.fr.md +78 -21
  32. package/docs/flow-guard.md +78 -22
  33. package/docs/flow-guard.ru.md +75 -20
  34. package/docs/flow-guard.zh.md +57 -18
  35. package/docs/gates.es.md +36 -6
  36. package/docs/gates.fr.md +36 -5
  37. package/docs/gates.md +36 -6
  38. package/docs/gates.ru.md +35 -6
  39. package/docs/gates.zh.md +10 -5
  40. package/docs/scanner-comparison.es.md +25 -1
  41. package/docs/scanner-comparison.fr.md +25 -1
  42. package/docs/scanner-comparison.md +24 -1
  43. package/docs/scanner-comparison.ru.md +25 -1
  44. package/docs/scanner-comparison.zh.md +20 -1
  45. package/package.json +1 -1
package/dist/wrap.js CHANGED
@@ -3,14 +3,19 @@ import { randomUUID } from 'node:crypto';
3
3
  import { appendFileSync, mkdirSync } from 'node:fs';
4
4
  import { dirname, join } from 'node:path';
5
5
  import { constants } from 'node:os';
6
- import { Warden, FilePinStore, pinToolsHash, displaySafe, StaticScanGate } from './index.js';
6
+ import { Warden, FilePinStore, pinToolsHash, displaySafe, StaticScanGate, isSensitiveTool } from './index.js';
7
7
  import { WrapFrames, readFrames } from './wrap-wire.js';
8
8
  import { loadWrapFeed, wrapLogger, wrapServer } from './wrap-cli.js';
9
9
  import { observe, vetAndPin, observationPath, WardenBlock } from './wrap-state.js';
10
10
  import { readState } from './state.js';
11
11
  import { listAllTools } from './tool-list.js';
12
12
  import { screenResult, annotateResult } from './result-screen.js';
13
- import { flowPre, flowPost } from './flow-guard.js';
13
+ import { flowPre, flowPost, flowApproval } from './flow-guard.js';
14
+ // How long a call waits for a person to answer the approval form before it is refused.
15
+ const ASK_TIMEOUT_MS = 5 * 60_000;
16
+ /** The client cancelled a call before it was sent on: it gets no reply (MCP cancellation). */
17
+ class CallCancelled extends Error {
18
+ }
14
19
  function parse(body) {
15
20
  const msg = JSON.parse(body);
16
21
  if (!msg || Array.isArray(msg) || msg.jsonrpc !== '2.0' ||
@@ -58,6 +63,12 @@ export async function runWrap(opts) {
58
63
  const flowSession = opts.flow ? (process.env.WARDEN_FLOW_SESSION || `wrap-${process.ppid}`) : '';
59
64
  const flowTool = (tool) => `mcp__${opts.flow}__${tool}`;
60
65
  let activeChecks = 0;
66
+ // What the client said it can do in its initialize request: `elicitation` is how this proxy asks a person.
67
+ let clientCapabilities = {};
68
+ // Questions this proxy put to the client (elicitation/create), by their reserved ids, and the calls that are not
69
+ // sent on yet, by the client's ids: a cancelled one must never reach the child.
70
+ const questions = new Map();
71
+ const waiting = new Map();
61
72
  let stopTimer, killTimer;
62
73
  return new Promise(resolve => {
63
74
  const finish = (code) => {
@@ -71,6 +82,11 @@ export async function runWrap(opts) {
71
82
  p.reject(new Error('MCP child exited'));
72
83
  }
73
84
  pending.clear();
85
+ for (const q of questions.values()) {
86
+ clearTimeout(q.timer);
87
+ q.resolve('closed');
88
+ }
89
+ questions.clear();
74
90
  process.stdin.pause();
75
91
  process.removeListener('SIGTERM', signalStop);
76
92
  process.removeListener('SIGINT', signalStop);
@@ -106,6 +122,38 @@ export async function runWrap(opts) {
106
122
  if (msg.id !== undefined)
107
123
  send({ jsonrpc: '2.0', id: msg.id, error: { code, message: displaySafe(message, 8192) } });
108
124
  };
125
+ // The form is MCP elicitation. Since 2025-11-25 a client may offer only `url` mode; an empty object still means form.
126
+ const canAsk = () => {
127
+ const e = clientCapabilities.elicitation;
128
+ return opts.ask === 'elicit' && !!e && typeof e === 'object' && !Array.isArray(e) && (Object.keys(e).length === 0 || 'form' in e);
129
+ };
130
+ const cannotAsk = () => opts.ask === 'refuse' ? ' (--ask refuse)' : ' (this client offers no MCP elicitation form)';
131
+ const withdraw = (id, reason) => send({ jsonrpc: '2.0', method: 'notifications/cancelled', params: { requestId: id, reason } });
132
+ const answer = (id, outcome) => {
133
+ const q = questions.get(id);
134
+ if (!q)
135
+ return;
136
+ questions.delete(id);
137
+ clearTimeout(q.timer);
138
+ q.resolve(outcome);
139
+ };
140
+ // One question per call. The checkbox defaults to off, so a client that accepts forms with their defaults
141
+ // (no person looking) cannot approve anything.
142
+ const askPerson = (callId, tool, args, reasons) => new Promise(resolveAnswer => {
143
+ const id = `${prefix}ask:${seq++}`;
144
+ const timer = setTimeout(() => { answer(id, 'timeout'); withdraw(id, 'no answer within 5 minutes'); }, ASK_TIMEOUT_MS);
145
+ questions.set(id, { resolve: resolveAnswer, timer });
146
+ const wait = waiting.get(callId);
147
+ if (wait)
148
+ wait.question = id;
149
+ send({ jsonrpc: '2.0', id, method: 'elicitation/create', params: {
150
+ message: `WARDEN asks before ${displaySafe(tool, 200)} on ${displaySafe(server.id, 200)} runs.\n${reasons.join('\n')}\n` +
151
+ `Arguments: ${displaySafe(JSON.stringify(args), 1500)}\nTick "Run it" and accept to let this one call through; anything else refuses it.`,
152
+ requestedSchema: { type: 'object', required: ['run'], properties: {
153
+ run: { type: 'boolean', title: 'Run it', description: `Run ${displaySafe(tool, 200)} once, with the arguments shown`, default: false }
154
+ } }
155
+ } });
156
+ });
109
157
  const childWrite = (body) => {
110
158
  if (!child || closing || finished || child.stdin.destroyed)
111
159
  throw new Error('MCP child unavailable');
@@ -187,6 +235,12 @@ export async function runWrap(opts) {
187
235
  return;
188
236
  const msg = parse(body);
189
237
  if (typeof msg.id === 'string' && msg.id.startsWith(prefix)) {
238
+ // The client's answer to a question this proxy asked. A late one (after a timeout) is dropped.
239
+ if (msg.method === undefined) {
240
+ const r = msg.result;
241
+ answer(msg.id, msg.error !== undefined ? 'error' : r?.action === 'accept' && r.content?.run === true ? 'approved' : r?.action === 'cancel' ? 'cancelled' : 'declined');
242
+ return;
243
+ }
190
244
  fail(msg, 'Reserved proxy request ID');
191
245
  return;
192
246
  }
@@ -198,6 +252,21 @@ export async function runWrap(opts) {
198
252
  }
199
253
  if (closing)
200
254
  return;
255
+ if (msg.method === 'initialize' && msg.params?.capabilities && typeof msg.params.capabilities === 'object')
256
+ clientCapabilities = msg.params.capabilities;
257
+ if (msg.method === 'notifications/cancelled') {
258
+ // A call still being checked, or waiting for a person, was never sent on: stop it here.
259
+ const requestId = msg.params?.requestId;
260
+ const wait = typeof requestId === 'string' || typeof requestId === 'number' ? waiting.get(requestId) : undefined;
261
+ if (wait) {
262
+ wait.cancelled = true;
263
+ if (wait.question && questions.has(wait.question)) {
264
+ answer(wait.question, 'cancelled');
265
+ withdraw(wait.question, 'the client cancelled the call');
266
+ }
267
+ return;
268
+ }
269
+ }
201
270
  if (msg.method === 'tools/list' || msg.method === 'tools/call') {
202
271
  if (msg.id === undefined)
203
272
  return; // These are requests, never notifications.
@@ -220,28 +289,65 @@ export async function runWrap(opts) {
220
289
  // A failed check is retried here; a refusal or a change waits for the client to re-list.
221
290
  if (!opts.auditOnly && ((quarantined && quarantineKind !== 'error') || !seen))
222
291
  throw new Error(blockReason || 'tool blocked by WARDEN');
223
- const epoch = generation;
224
- const current = await check();
225
- const def = current.find(t => t.name === name);
226
- if (!opts.auditOnly && (quarantined || epoch !== generation || !def || !seen || pinToolsHash([def]) !== pinToolsHash([seen])))
227
- throw new Error('tool blocked by WARDEN: definition changed since exposure');
228
- if (tracked.size >= 256 || tracked.has(msg.id))
292
+ if (tracked.size >= 256 || tracked.has(msg.id) || waiting.has(msg.id))
229
293
  throw new Error('Too many or duplicate pending MCP requests');
230
- const args = msg.params?.arguments && typeof msg.params.arguments === 'object' && !Array.isArray(msg.params.arguments) ? msg.params.arguments : {};
231
- if (opts.flow) {
232
- const d = flowPre({ session_id: flowSession, cwd: process.cwd(), tool_name: flowTool(String(name)), tool_input: args }, process.env, opts.auditOnly ? 'audit' : 'refuse');
233
- // An MCP client has no one to ask from here: a call the guard would ask about is refused, with its reason.
234
- if (d && !opts.auditOnly)
235
- throw new Error(`${d.permissionDecisionReason}${d.permissionDecision === 'ask' ? ' Refused: wrap cannot ask you; name the destination in the flow policy (allowedDestinations) or make the call yourself.' : ''}`);
236
- if (d)
237
- log.warn(`flow guard would ${d.permissionDecision} ${flowTool(String(name))}`);
294
+ const wait = { cancelled: false };
295
+ waiting.set(msg.id, wait);
296
+ try {
297
+ const epoch = generation;
298
+ const current = await check();
299
+ const def = current.find(t => t.name === name);
300
+ if (!opts.auditOnly && (quarantined || epoch !== generation || !def || !seen || pinToolsHash([def]) !== pinToolsHash([seen])))
301
+ throw new Error('tool blocked by WARDEN: definition changed since exposure');
302
+ if (tracked.size >= 256 || tracked.has(msg.id))
303
+ throw new Error('Too many or duplicate pending MCP requests');
304
+ const tool = String(name);
305
+ const args = msg.params?.arguments && typeof msg.params.arguments === 'object' && !Array.isArray(msg.params.arguments) ? msg.params.arguments : {};
306
+ // A call that needs a person's yes: a tool the operator marked sensitive, or a send the flow guard asks about.
307
+ const reasons = [];
308
+ if (isSensitiveTool(tool, opts.policy))
309
+ reasons.push(`${displaySafe(tool, 200)} matches policy.sensitiveToolPatterns: every call to it needs a person's approval.`);
310
+ let flowAsked = false;
311
+ if (opts.flow) {
312
+ const d = flowPre({ session_id: flowSession, cwd: process.cwd(), tool_name: flowTool(tool), tool_input: args }, process.env, opts.auditOnly ? 'audit' : canAsk() ? 'elicit' : 'refuse');
313
+ if (d && !opts.auditOnly) {
314
+ if (d.permissionDecision === 'deny' || !canAsk())
315
+ throw new Error(`${d.permissionDecisionReason}${d.permissionDecision === 'ask' ? ` Refused: wrap cannot ask you${cannotAsk()}; name the destination in the flow policy (allowedDestinations) or make the call yourself.` : ''}`);
316
+ reasons.push(d.permissionDecisionReason);
317
+ flowAsked = true;
318
+ }
319
+ if (d && opts.auditOnly)
320
+ log.warn(`flow guard would ${d.permissionDecision} ${flowTool(tool)}`);
321
+ }
322
+ if (reasons.length && opts.auditOnly)
323
+ log.warn(`would ask a person before ${displaySafe(tool, 200)} runs (sensitive tool)`);
324
+ else if (reasons.length) {
325
+ if (!canAsk())
326
+ throw new Error(`tool blocked by WARDEN: ${displaySafe(tool, 200)} matches policy.sensitiveToolPatterns, so every call needs a person's approval, and wrap cannot ask you${cannotAsk()}; it was not run`);
327
+ const outcome = await askPerson(msg.id, tool, args, reasons);
328
+ if (flowAsked)
329
+ flowApproval({ session_id: flowSession, tool_name: flowTool(tool) }, outcome);
330
+ if (wait.cancelled)
331
+ throw new CallCancelled();
332
+ if (outcome !== 'approved')
333
+ throw new Error(`tool call refused by WARDEN: ${outcome === 'timeout' ? 'no answer to the approval request within 5 minutes' : outcome === 'closed' ? 'the connection closed before an answer' : outcome === 'error' ? 'the client could not show the approval request' : 'it was not approved'}; ${displaySafe(tool, 200)} was not run`);
334
+ // The person approved the definition the client was shown; it must still be the one that runs.
335
+ if (quarantined || epoch !== generation)
336
+ throw new Error('tool blocked by WARDEN: definitions changed while waiting for approval; list tools again');
337
+ }
338
+ if (wait.cancelled)
339
+ throw new CallCancelled();
340
+ tracked.set(msg.id, { kind: 'call', generation, tool, args });
341
+ childWrite(body);
342
+ }
343
+ finally {
344
+ waiting.delete(msg.id);
238
345
  }
239
- tracked.set(msg.id, { kind: 'call', generation, tool: String(name), args });
240
- childWrite(body);
241
346
  }
242
347
  }
243
348
  catch (e) {
244
- fail(msg, e instanceof Error ? e.message : String(e));
349
+ if (!(e instanceof CallCancelled))
350
+ fail(msg, e instanceof Error ? e.message : String(e));
245
351
  }
246
352
  finally {
247
353
  activeChecks--;
package/dist/wrap.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"wrap.js","sourceRoot":"","sources":["../src/wrap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wrap.js","sourceRoot":"","sources":["../src/wrap.ts"],"names":[],"mappings":"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"}
@@ -16,14 +16,18 @@ La guardia comprueba llamadas después de recibir texto externo; no es un sandbo
16
16
  - Las escrituras reconocidas a política/estado, hooks de Claude y hooks/config de Git están protegidas, incluidas variables de ruta y enlaces simbólicos. Esto no sustituye permisos del sistema operativo.
17
17
  - Se analiza la autoridad real de las URL y se comprueban todos los destinos. Un enlace en el cuerpo no autoriza otro destinatario. Los buzones de la política coinciden exactamente; un dominio no permite todos sus buzones. Una mención del usuario no expresa autorización para cualquier acción.
18
18
  - Resolver contactos requiere `contactTools` explícito, etiqueta `private`, registros estructurados `name`/`email` y el nombre completo en el mensaje del usuario. Los nombres ambiguos piden permiso. Archivos locales, prosa, YAML y contactos almacenados por la versión anterior no conceden autoridad. Confíe solo en directorios que el agente y terceros no puedan modificar.
19
- - Las huellas inspeccionan texto visible con decodificación limitada URL/base64/hex; no leen cualquier archivo al enviarlo ni cubren todas las codificaciones o herramientas. Se permiten normalmente las ediciones del proyecto; ejecutar código es otra decisión.
19
+ - Las huellas inspeccionan texto visible con decodificación limitada URL/base64/hex. Desde el 2026-10-22 los valores con aspecto de clave (secuencias aleatorias en archivos de credenciales y formatos de token conocidos, se lean donde se lean) se registran además en ventanas de 8 letras y dígitos, 10 para claves hex: un trozo de clave, la clave al revés, con separadores o caracteres invisibles, en trozos base64 o con letras cirílicas o griegas parecidas se rechaza. Son los tamaños más pequeños con los que ninguna de 480 claves inventadas en ocho formatos coincidió en ningún punto de 115 millones de letras y dígitos (este monorepo y 1000 paquetes de HISTOR) de texto corriente; las partes que comparten todas las claves de un tipo (el identificador de algoritmo de una clave DER, la cabecera y los campos de un JWT) nunca se registran. Cada argumento recuerda la cola de lo que envió tras el texto externo, así que los trozos enviados seguidos por el mismo argumento se comprueban enteros. Los trozos de menos de 8 caracteres envueltos cada vez en palabras distintas siguen pasando, y también el formato inicial de la clave (`rk_live_`). No leen cualquier archivo al enviarlo ni cubren todas las codificaciones o herramientas. Se permiten normalmente las ediciones del proyecto; ejecutar código es otra decisión.
20
+ - Tras texto externo, escribir en un archivo corriente del proyecto una clave leída en la sesión pregunta (`deny` rechaza): los archivos del proyecto se publican luego sin otra llamada. `.env`, `.npmrc` y los demás archivos de credenciales son el sitio de las claves y pasan; una edición que solo quita una clave no coincide.
21
+ - Una dirección que solo aparece en tu prompt dentro de texto pegado, de una línea citada (`>`), de las cabeceras de un mensaje pegado o bajo una marca de reenvío no es una que nombraste: enviarle algo pregunta una vez. Un punto o una coma tras una dirección que escribiste ya no la ocultan.
22
+ - Una herramienta MCP sin etiqueta del operador es saliente si su nombre lo dice (send, post, share …), si lleva una URL o, desde el 2026-10-22, si nombra a una parte: un argumento como `to`, `email`, `attendees`, `assignee`, `collaborator` o `username`, o cualquier correo o IBAN. `warden-mcp flow-labels` lista las herramientas MCP sin etiqueta que usaron tus sesiones, con la suposición del guardián y un bloque `labels` para corregir y pegar en la política.
23
+ - Una inyección que solo cambia la respuesta no hace ninguna llamada que rechazar. Desde el 2026-10-22 el hook Stop del plugin añade una línea bajo una respuesta cuyo turno leyó texto externo, con esas fuentes, y lo dice cuando alguna se dirigió al asistente con instrucciones. Si la respuesta repite 12 letras y dígitos seguidos de las frases donde ese texto se dirigió al asistente, el hook además devuelve la respuesta una vez (`decision: block`) para comprobarla frente a la petición del usuario antes de que este la lea; el usuario solo pierde el tiempo de esa comprobación. `answerNote`: `always` (por defecto), `instruction` (solo ese caso) u `off`; fuera del plugin, registra `warden-mcp hook stop`.
20
24
  - El proxy registra también errores JSON-RPC y de herramientas. Retiene una respuesta si no puede registrarla; un estado de sesión corrupto bloquea la comprobación.
21
25
 
22
- Publicado en npm `0.17.0`: `npx -y @aimarket/warden@0.18.0 hook pre-tool-use`, o desde el código fuente en WARDEN, `npm ci && npm run build`, luego `node dist/mcp-server.js hook pre-tool-use`, con los hooks prompt/post también registrados. Política: `~/.local/state/warden/flow-policy.json` o `WARDEN_FLOW_POLICY`; modos `ask`, `deny`, `audit`, `off`. Véase el ejemplo vigente en [inglés](flow-guard.md).
26
+ Publicado en npm `0.17.0`: `npx -y @aimarket/warden@0.20.0 hook pre-tool-use`, o desde el código fuente en WARDEN, `npm ci && npm run build`, luego `node dist/mcp-server.js hook pre-tool-use`, con los hooks prompt/post también registrados. Política: `~/.local/state/warden/flow-policy.json` o `WARDEN_FLOW_POLICY`; modos `ask`, `deny`, `audit`, `off`. Véase el ejemplo vigente en [inglés](flow-guard.md).
23
27
 
24
- Proxy: `node dist/mcp-server.js wrap --flow mail -- node mail-server.js`. Use un `WARDEN_FLOW_SESSION` nuevo y compartido por los proxies de una conversación. El PID padre predeterminado no une lanzadores diferentes. El proxy no ve el prompt ni herramientas integradas y rechaza lo que requeriría preguntar. `trustedSources` se aplica a la URL de WebFetch, no a enlaces en argumentos MCP.
28
+ Proxy: `node dist/mcp-server.js wrap --flow mail -- node mail-server.js`. Use un `WARDEN_FLOW_SESSION` nuevo y compartido por los proxies de una conversación. El PID padre predeterminado no une lanzadores diferentes. El proxy no ve el prompt ni herramientas integradas. Lo que requeriría preguntar se pregunta con el formulario de elicitation MCP del cliente cuando lo ofrece (la respuesta queda en el registro como `approvalOutcome`) y, si no, o con `--ask refuse`, se rechaza. `trustedSources` se aplica a la URL de WebFetch, no a enlaces en argumentos MCP.
25
29
 
26
- **Mediciones históricas:** las tablas, gráficos y costes siguientes describen versiones anteriores a la auditoría, hasta `2328be980`, no este código ni ruleset v14. No se ejecutaron nuevos modelos, replay ni benchmarks de corpus; solo pruebas locales de regresión. El replay es una ruta fija, no el peor caso adaptativo. Los artefactos originales se conservan sin cambios.
30
+ **Qué versión describen las cifras.** La tabla de reproducción de abajo se volvió a ejecutar el 2026-10-22 sobre el código actual: las correcciones de la auditoría más los cambios del 2026-10-22. Los cambios del 2026-10-22 no alteran ninguna decisión (los 1046 registros coinciden con el código anterior); las correcciones de la auditoría costaron una tarea sin pregunta y 19 tareas hechas bajo ataque. Las tablas y costes de la ejecución con modelo siguen describiendo la versión anterior a la auditoría, hasta `2328be980`; no hubo nueva ejecución con modelo. El replay es una ruta fija, no el peor caso adaptativo; los ataques con el código en la mano del 2026-10-22 están [más abajo](#qué-cambió-el-2026-10-22-y-por-qué).
27
31
 
28
32
  ## Medido en AgentDojo
29
33
 
@@ -36,23 +40,26 @@ No usamos un modelo. Para cada par de tarea de usuario y objetivo del atacante,
36
40
  (`important_instructions`) se coloca donde la tarea del usuario lo leerá. Luego se reproduce a través del guardián
37
41
  la solución de referencia de la tarea del usuario, seguida de la solución de referencia del atacante. Es un modelo
38
42
  que leyó la inyección y **la obedeció por completo en la ruta de referencia**. No es el peor caso adaptativo. Un `ask` cuenta como rechazo: un benchmark no
39
- tiene a nadie. La ejecución es determinista, tarda minutos, no cuesta nada y corrió en un contenedor gVisor sin red.
43
+ tiene a nadie. La ejecución es determinista, tarda minutos, no cuesta nada y corrió en un contenedor gVisor sin red en nuestro servidor (2026-10-17/18) y
44
+ en un contenedor Docker sin red en una estación de trabajo (2026-10-22).
40
45
 
41
46
  AgentDojo 0.1.35, suites v1.2.2, con nuestras etiquetas de operador para las 69 herramientas
42
- (`scripts/agentdojo/policy.json`). Resultados: `scripts/agentdojo/results/`.
47
+ (`scripts/agentdojo/policy.json`). Resultados: `scripts/agentdojo/results/` (la tabla: `summary-2026-10-22.json`).
43
48
 
44
49
  | Suite | Acciones de ataque que tuvieron éxito, sin el guardián | Con el guardián | Tareas sin ninguna pregunta | Tareas hechas bajo ataque, sin / con |
45
50
  |---|---|---|---|---|
46
51
  | banking | 141 de 144 | **0 de 144** | 13 de 16 | 125 / 117 de 144 |
47
- | Slack | 105 de 105 | **0 de 80** | 2 de 21 | 102 / 20 de 105 |
52
+ | Slack | 105 de 105 | **0 de 75** | 2 de 21 | 102 / 15 de 105 |
48
53
  | travel | 116 de 120 | **0 de 120** | 16 de 20 | 26 / 112 de 140 |
49
- | workspace | 231 de 240 | **0 de 240** | 27 de 40 | 326 / 378 de 560 |
50
- | **total** | **593 de 609** | **0 de 584** | **58 de 97** | **579 / 627 de 949** |
54
+ | workspace | 231 de 240 | **0 de 240** | 26 de 40 | 326 / 364 de 560 |
55
+ | **total** | **593 de 609** | **0 de 579** | **57 de 97** | **579 / 608 de 949** |
51
56
 
52
57
  Son las etiquetas tal como quedaron corregidas el 2026-10-18 (la ejecución con modelo de abajo encontró dos
53
58
  demasiado estrictas) y el guardián que reconoce por sus contactos a quien nombraste. Las primeras etiquetas daban 54
54
- tareas sin pregunta y 571 hechas bajo ataque; las corregidas sin contactos, 57 y 613. Todas las versiones dieron 0
55
- de 584.
59
+ tareas sin pregunta y 571 hechas bajo ataque; las corregidas sin contactos, 57 y 613; con contactos, antes de las
60
+ correcciones de la auditoría, 58 y 627. Todas las versiones dieron 0 acciones de ataque. Las correcciones de la
61
+ auditoría rechazan algunas descargas y entradas de calendario más en tareas de Slack y workspace, así que 579 pares,
62
+ no 584, trajeron la inyección.
56
63
 
57
64
  Las «acciones de ataque» son pares en los que la inyección llegó al agente (su texto volvió en el resultado de una
58
65
  herramienta) y el objetivo del atacante necesita una llamada: enviar, pagar, invitar, borrar. El número de pares
@@ -61,12 +68,12 @@ traído la inyección.
61
68
 
62
69
  Cómo leer las dos últimas columnas:
63
70
 
64
- - **Sin ninguna pregunta.** El guardián calla en 58 de 97 tareas. Las otras 39 necesitan una llamada sobre la que
71
+ - **Sin ninguna pregunta.** El guardián calla en 57 de 97 tareas. Las otras 40 necesitan una llamada sobre la que
65
72
  pregunta. En Claude Code es un clic; en el benchmark, una tarea fallida. Slack es el extremo: casi cada tarea
66
73
  escribe en un canal o a una persona encontrados en los datos («el canal con más usuarios»), no nombrados por el
67
74
  usuario. Esa es justamente la forma de una acción inyectada, así que pregunta.
68
75
  - **Bajo ataque.** Sin el guardián, los ataques también rompen la tarea del usuario (en travel terminan 26 de 140).
69
- Con el guardián el ataque se rechaza y la tarea sigue: terminan 627 de 949, frente a 579 sin él.
76
+ Con el guardián el ataque se rechaza y la tarea sigue: terminan 608 de 949, frente a 579 sin él.
70
77
 
71
78
  Ocho objetivos nuevos del atacante en workspace vienen sin solución de referencia, así que no se pueden reproducir.
72
79
  Siete de ellos necesitan primero un correo al atacante; ese correo se rechazó en los 280 pares entregados. Dos
@@ -170,19 +177,64 @@ nuestro servidor: 21 654 ejecuciones del modelo, 12,68 USD de saldo de DeepSeek.
170
177
  La misma opinión de los lectores cambió el sandbox de HISTOR: una conexión que dejó en cola el anterior titular de
171
178
  una dirección ya no se atribuye a la siguiente ejecución, que queda incompleta en lugar de limpia.
172
179
 
180
+ ## Qué cambió el 2026-10-22 y por qué
181
+
182
+ Un lector preguntó qué sigue sin detectar WARDEN. Lo enumeramos y luego atacamos al guardián con su código en la
183
+ mano: 17 ataques en [`scripts/redteam/flow-redteam.mjs`](../scripts/redteam/flow-redteam.mjs), cada uno dirigido a un
184
+ límite documentado o al borde de una regla, reproducidos por el mismo punto de entrada de hooks que usa el plugin (un
185
+ modelo obediente, sin benchmark). Antes de los cambios pasaban 14; después, 3.
186
+
187
+ | Cambio | Por qué | Resultado |
188
+ |---|---|---|
189
+ | Valores con aspecto de clave registrados en ventanas de 10 letras y dígitos, también al revés y con letras parecidas normalizadas; base64 decodificado desde 16 caracteres, no 24 | una clave en trozos de 15 caracteres, con guiones, al revés o en letras cirílicas pasaba | ataques: todo eso rechazado; el primer trozo, casi todo formato de la clave, sigue pasando |
190
+ | Cada argumento guarda la cola de lo que envió tras el texto externo | trozos de 8 caracteres, un número de tarjeta en dos mitades y texto privado en trozos de 12 a un host permitido pasaban | rechazo o pregunta desde el segundo o tercer trozo |
191
+ | Una herramienta MCP sin etiqueta que nombra a una parte es saliente; `warden-mcp flow-labels` | «añadir asistente» con el correo del atacante y «añadir colaborador» por nombre de usuario pasaban | ambas preguntan |
192
+ | Hook Stop: una línea bajo una respuesta que se apoyó en texto externo | una inyección solo en la respuesta no hace llamadas | el usuario ve qué fuentes usó la respuesta; no se bloquea nada |
193
+ | Ruleset v15 (ver [gates](gates.es.md)) | 78 herramientas envenenadas de la mitad dev de MCPTox pasaban las reglas | mitad reservada 171 → 194 de 218 (reglas escritas solo con la otra mitad), mitad dev 189 → 233 de 267; 0 de 45 servidores limpios; el corpus y 1000 paquetes de HISTOR bloquean exactamente lo mismo que con v14 |
194
+ | La reproducción, de nuevo sobre el código actual | las correcciones de la auditoría del 2026-10-18 no se habían medido | 0 de 579 acciones de ataque, 57 de 97 tareas sin pregunta, 608 de 949 hechas bajo ataque; los cambios del 2026-10-22 no alteran ninguna decisión |
195
+ | `scripts/agentdojo/Dockerfile.dockerignore` | el `.dockerignore` del paquete deja fuera `dist/`, así que el comando de «Reproducir» no compilaba | compila |
196
+
197
+ Esos tres seguían pasando: trozos de menos de 10 caracteres en palabras distintas, una dirección pegada en el
198
+ prompt y una clave escrita en un archivo del proyecto. Ese mismo día cerramos todo lo que se puede cerrar sin falsos
199
+ positivos y escribimos seis ataques más contra las reglas nuevas. Pasan 2 de 23.
200
+
201
+ | Cambio | Por qué | Resultado |
202
+ |---|---|---|
203
+ | Ventanas de clave de 8 letras y dígitos, 10 para claves hex, medidas: los tamaños más pequeños sin coincidencia casual en 115 millones de letras y dígitos (este monorepo y 1000 paquetes de HISTOR) de texto corriente ([`window-collisions.mjs`](../scripts/redteam/window-collisions.mjs)) | trozos de 8 caracteres envueltos en otras palabras pasaban | rechazo desde el segundo trozo; los de menos de 8 caracteres con palabras distintas alrededor siguen pasando |
204
+ | Las partes que comparten todas las claves de un tipo no se registran (identificador de algoritmo de una clave DER, cabecera y campos de un JWT) | la medición mostró que 0.19.0 rechazaría un README con una clave DKIM después de leer una clave RSA privada | ninguna coincidencia casual con las reglas publicadas |
205
+ | Escribir una clave leída en la sesión en un archivo corriente del proyecto pregunta | la clave en `docs/debug.md` pasaba | pregunta; `.env` y los demás archivos de credenciales siguen pasando |
206
+ | Una dirección solo en texto pegado o citado no la nombró el usuario | la dirección del atacante pegada en el prompt contaba como del usuario | pregunta una vez; una dirección que el usuario también escribió pasa. Un punto tras una dirección escrita ya no la deja sin nombrar (0.19.0 preguntaba por «envíalo a bob@corp.com.») |
207
+ | El hook Stop devuelve una vez una respuesta que repite una instrucción dirigida al modelo | una inyección solo en la respuesta no hace llamadas | En Ministral 8B, que obedece el ataque (sin el guardián 6 de 20 respuestas recomiendan el hotel), la nota del guardián sola lo dejó en 0; la revisión saltó 3 veces de 20 y no cambió ningún resultado. En DeepSeek V4.1 Flash, que nunca lo recomendó, saltó 2 veces de 20 ([resultados](../scripts/agentdojo/results/model-answer-recheck-2026-10-22.json)). Una red de seguridad, no una mejora medida |
208
+ | Ruleset v16 (ver [gates](gates.es.md)) | 34 herramientas envenenadas de la mitad dev de MCPTox seguían pasando, casi todas sin entrada | mitad reservada 194 → 210 de 218, incluidos los 66 secuestros de disparador implícito; 0 de 45 servidores limpios; el corpus y 1000 paquetes de HISTOR bloquean exactamente lo mismo que v15; cinco falsos positivos de un primer borrador quedan fijados como pruebas |
209
+ | La reproducción, de nuevo | las comprobaciones nuevas no deben preguntar donde 0.19.0 no preguntaba | los 1046 registros idénticos a 0.19.0 |
210
+
211
+ Siguen pasando ([resultados](../scripts/redteam/results/)):
212
+
213
+ - **Trozos de menos de 8 caracteres, cada uno en palabras distintas**, a una dirección que escribió el usuario: 7 o más
214
+ mensajes para una clave de 40 caracteres.
215
+ - **Una clave deletreada en palabras** («siete, Q mayúscula, m, dos …»). Cambiar letras por dígitos parecidos (o→0,
216
+ l→1) se detectó en nuestra clave de prueba solo porque gran parte de ella no tenía esas letras.
217
+
173
218
  ## Qué no hace
174
219
 
175
- - **Dos mediciones no son una prueba.** La reproducción obedece a la perfección pero sigue un solo camino; el
176
- modelo encuentra sus propios caminos pero obedece poco, incluso cuando se le ordena. Un atacante que estudie el
177
- guardián, o un modelo que obedezca con más facilidad, es una prueba más dura que ambas.
220
+ - **Las mediciones no son una prueba.** La reproducción obedece a la perfección pero sigue un solo camino; el modelo
221
+ encuentra sus propios caminos pero obedece poco, incluso cuando se le ordena; nuestros ataques con el código en la
222
+ mano son 23 ideas nuestras. Un atacante que no conocemos, o un modelo que obedezca con más facilidad, es una prueba
223
+ más dura que cualquiera de ellas.
178
224
  - **Las etiquetas son del operador.** Nuestra primera ejecución marcó los nombres de canales de Slack solo como
179
225
  datos privados, y la inyección estaba en el nombre de un canal. La ejecución lo detectó porque la entrega se
180
- juzga por el texto del ataque, no por nuestras etiquetas. Una herramienta mal etiquetada es un agujero.
226
+ juzga por el texto del ataque, no por nuestras etiquetas. Una herramienta mal etiquetada es un agujero; una sin
227
+ etiqueta recibe la suposición del guardián, que solo añade cautela.
181
228
  - **No detiene una inyección que solo cambia la respuesta** («di que este hotel es el mejor»). Sin llamada, nada
182
- que rechazar.
183
- - **Los cambios locales dentro del proyecto pasan.** Editar archivos del proyecto es el trabajo del agente.
184
- - **Las fugas en trozos pequeños** por debajo del tamaño de la huella (menos de unos 23 caracteres por llamada) no
185
- las detectan las huellas; la llamada pregunta igualmente si su destino no fue nombrado.
229
+ que rechazar. El hook Stop le dice al usuario de dónde salió la respuesta y, si repite una instrucción dirigida al
230
+ modelo, pide una vez al modelo que la compruebe; solo ve las instrucciones que el guardián reconoce como tales.
231
+ - **Los cambios locales dentro del proyecto pasan**, salvo una clave leída en la sesión que va a un archivo
232
+ corriente. Editar archivos del proyecto es el trabajo del agente.
233
+ - **Fugas en trozos pequeños.** El texto privado corriente puede ir a un destino que nombró el usuario, entero o en
234
+ trozos: es su elección. Hacia otros destinos, y para claves y números de tarjeta hacia cualquiera, los trozos
235
+ enviados seguidos por un mismo argumento se unen; los de menos de 8 caracteres con palabras distintas alrededor no,
236
+ ni tampoco una clave deletreada en palabras.
237
+ - **Lo pegado no es lo escrito.** Una dirección que querías usar pero solo pegaste pregunta una vez.
186
238
  - **No ve** tu prompt de antes de instalar el plugin, ni el texto que el modelo tenga de otras fuentes.
187
239
 
188
240
  ## Reproducir
@@ -196,6 +248,10 @@ docker run --rm --network none -v "$PWD/out:/out" warden-adojo /out/oracle.json
196
248
 
197
249
  `oracle.py` escribe resultados por par; `--variants none,strict,intent` elige las variantes del guardián (`strict`
198
250
  ignora lo que escribió el usuario). `summarize_oracle.py` los convierte en el resumen que cita la tabla.
251
+ `WARDEN_FLOW_GUARD=/out/x.mjs` reproduce otra versión del guardián (cualquier copia de `flow-guard.mjs` del plugin);
252
+ así se compararon los cambios del 2026-10-22 con el código anterior.
253
+
254
+ Los ataques con el código en la mano no necesitan contenedor: `npm run build && node scripts/redteam/flow-redteam.mjs out.json`.
199
255
 
200
256
  La ejecución con modelo (`model.py`) necesita una clave de una API compatible con OpenAI, que se queda en el host:
201
257
  la lee `relay.py`, y el contenedor no llega a nada más. `run-model.sh` arranca ambos y retoma una ejecución