@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.
- package/CHANGELOG.md +25 -2
- package/README-es.md +16 -14
- package/README-fr.md +16 -14
- package/README-ru.md +16 -14
- package/README-zh.md +16 -14
- package/README.md +17 -15
- package/dist/claude-hook.d.ts.map +1 -1
- package/dist/claude-hook.js +9 -3
- package/dist/claude-hook.js.map +1 -1
- package/dist/flow-guard.d.ts +91 -5
- package/dist/flow-guard.d.ts.map +1 -1
- package/dist/flow-guard.js +433 -19
- package/dist/flow-guard.js.map +1 -1
- package/dist/mcp-server.js +4 -0
- package/dist/mcp-server.js.map +1 -1
- package/dist/review-diff.d.ts +5 -4
- package/dist/review-diff.d.ts.map +1 -1
- package/dist/review-diff.js.map +1 -1
- package/dist/static-scan.d.ts +1 -1
- package/dist/static-scan.d.ts.map +1 -1
- package/dist/static-scan.js +109 -3
- package/dist/static-scan.js.map +1 -1
- package/dist/wrap-cli.d.ts +6 -0
- package/dist/wrap-cli.d.ts.map +1 -1
- package/dist/wrap-cli.js +8 -2
- package/dist/wrap-cli.js.map +1 -1
- package/dist/wrap.d.ts.map +1 -1
- package/dist/wrap.js +125 -19
- package/dist/wrap.js.map +1 -1
- package/docs/flow-guard.es.md +77 -21
- package/docs/flow-guard.fr.md +78 -21
- package/docs/flow-guard.md +78 -22
- package/docs/flow-guard.ru.md +75 -20
- package/docs/flow-guard.zh.md +57 -18
- package/docs/gates.es.md +36 -6
- package/docs/gates.fr.md +36 -5
- package/docs/gates.md +36 -6
- package/docs/gates.ru.md +35 -6
- package/docs/gates.zh.md +10 -5
- package/docs/scanner-comparison.es.md +25 -1
- package/docs/scanner-comparison.fr.md +25 -1
- package/docs/scanner-comparison.md +24 -1
- package/docs/scanner-comparison.ru.md +25 -1
- package/docs/scanner-comparison.zh.md +20 -1
- 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
|
-
|
|
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
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
if (
|
|
237
|
-
|
|
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
|
-
|
|
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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"}
|
package/docs/flow-guard.es.md
CHANGED
|
@@ -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;
|
|
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.
|
|
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
|
|
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
|
-
**
|
|
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
|
|
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** |
|
|
50
|
-
| **total** | **593 de 609** | **0 de
|
|
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
|
|
55
|
-
de
|
|
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
|
|
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
|
|
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
|
-
- **
|
|
176
|
-
|
|
177
|
-
|
|
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
|
-
|
|
184
|
-
- **
|
|
185
|
-
|
|
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
|