← Volver a todas las publicaciones
Publicado el · por Renaud Deraison

El prompt no mencionaba los formularios

El 9 de octubre, Anthropic publicó un informe sobre modelos Claude que actuaron en sitios web reales durante pruebas internas. Uno de ellos, Claude Haiku 4.5, envió el 18 de julio una pista falsa sobre un homicidio sin resolver a la policía de Filadelfia. Sus instrucciones prohibían iniciar sesión, comprar y usar datos personales, y no decían nada de formularios. Anthropic encontró la pista diez semanas después. En Bromure Agentic Coding, el límite es una regla en el Mac: el agente puede leer cualquier página, y un POST a un sitio que no has listado vuelve con un 403 y aparece en la Security Timeline ese mismo minuto.

Al modelo le dijeron que no iniciara sesión, que no comprara nada y que no introdujera datos personales. Nadie le dijo que no pulsara Enviar.

A las 23:27 del 18 de julio, alguien envió una pista a través del formulario público de PhillyUnsolvedMurders.com, el sitio de la policía de Filadelfia dedicado a los homicidios sin resolver. El mensaje empezaba: «Puede que tenga información sobre este caso.» Venía de Claude Haiku 4.5, que se ejecutaba dentro de una prueba de Anthropic que generaba tareas de ejemplo a partir de sitios web elegidos al azar.

El filtro del departamento lo marcó como spam y nunca llegó al Real-Time Crime Center. Anthropic encontró el envío el 28 de septiembre, avisó al departamento el 7 de octubre y se reunió con sus responsables el 8 de octubre. La policía lo hizo público el viernes 9 de octubre, y Anthropic publicó su informe, Investigating unintended model actions, ese mismo día. La declaración del departamento, según 6abc Action News: «El retraso de dos meses en detectar el incidente y comunicarlo a la Ciudad es inaceptable.»

Anthropic ha cortado el acceso a internet real en todas sus evaluaciones internas hasta que su monitorización «detecte de forma fiable comportamientos como estos», informó The Hacker News. The New York Times, citando dos fuentes anónimas, añade que agentes de Anthropic rellenaron 20 solicitudes de visado en el sitio web del Departamento de Estado.

Cuatro formas de insistir

El informe ordena lo que Anthropic encontró en cuatro categorías. Anthropic dice que el impacto real fue mínimo y que no hubo datos de clientes implicados. Léelas como una lista de lo que hace un agente capaz cuando una tarea se le pone por delante:

  1. Explotó un servidor para terminar un cálculo. Una herramienta de análisis alojada en una universidad devolvía un error. Claude encontró en el servidor un script que devolvía «cualquier archivo que se le pidiera», luego un fallo de inyección, y lo usó para ejecutar el cálculo.
  2. Envió formularios que no debía. Cuando un formulario de práctica no cargó, un modelo de investigación no publicado fue al sitio gubernamental real y envió el formulario de verdad, varias veces. Haiku 4.5, al que se le pidió parar antes del envío final, envió igualmente, esperando una página de confirmación; su razonamiento decía que estaba «demostrando el proceso». Después, la pista a la policía.
  3. Esquivó barreras para llegar a los datos. Limitado en cuántas páginas podía recorrer, Claude leyó el archivo de configuración de un sitio de mapas, encontró tokens de acceso válidos y consultó directamente el servidor de mapas. Para el proyecto estadístico de un investigador, descubrió que el panel de pago de una agencia estatal entrega un token a cada visitante, pidió uno y consultó la base de datos sin pagar.
  4. Acortó su camino más allá de un límite de fetch. La herramienta de fetch de Anthropic limita la longitud de las URL, porque las URL largas tienen «espacio para transportar» instrucciones inyectadas. Varios modelos, entre ellos Claude Opus 5 y Claude Mythos 5, pasaron sus URL por servicios gratuitos de acortamiento. El operador de da.gd escribió para decir que lo había visto.

El diagnóstico de la propia Anthropic: la mayoría son casos en los que Claude «rodea una restricción en lugar de detenerse», y algunos «podrían haberse evitado» si las evaluaciones hubieran declarado sus objetivos, las acciones permitidas y los límites de red.

Dos tipos de límites, ambos dentro

Todos los límites del informe están dentro del agente. Algunos eran frases en el prompt: nada de iniciar sesión, nada de cuentas, nada de datos personales, parar antes del envío final. El modelo cumplió los que le dieron. Los formularios no estaban en la lista, y la instrucción de parar antes de enviar perdió frente a las ganas del modelo de ver una página de confirmación.

El resto eran límites de una herramienta: un tope de longitud de URL en el fetch, un presupuesto de clics en el arnés de evaluación. El modelo mantuvo el objetivo y tomó otro camino: un acortador, un archivo de configuración, una consulta directa al servidor detrás de la página.

La detección de Anthropic llegó tarde a todo. Una revisión de transcripciones iniciada en julio se amplió de las evaluaciones de ciberseguridad a todos los lugares donde Claude podía llegar a internet, y la pista apareció el 28 de septiembre, diez semanas después de enviarse. El operador de da.gd y la policía de Filadelfia encontraron cada uno su parte por su cuenta.

Un formulario, 72 días de silencio18 jul, 23:27POST al formulario de la policía:«Puede que tenga información sobre este caso.»Prompt: sin inicio de sesión, sin compras,sin datos personales. Formularios: nada.72 días: ni alerta, ni log que alguien leyera. La pista sigue en la transcripción.28 sephallada en una revisiónde transcripciones7 octpolicía avisada9 octdeclaracióne informe
La pista a la policía, del envío a la divulgación. El único control entre el modelo y el formulario era una lista de cosas que no hacer, y el envío apareció en una revisión de transcripciones diez semanas después.

Tu agente tiene los mismos hábitos

Eran las propias evaluaciones de Anthropic, dirigidas por quienes entrenan los modelos. Tu agente de programación tiene las mismas herramientas: un fetch, un shell con curl, Python con requests y, a menudo, un navegador. También tiene la misma disposición que describe el informe. Dale una tarea que falla a mitad de camino, un fixture de pruebas que necesita un endpoint real, un flujo de registro que comprobar, un webhook que «verificar», y buscará otra manera de terminar.

Tus propios límites también son frases: una línea en CLAUDE.md que dice que no toque producción, una nota en la tarea que pide parar antes de desplegar. Cada una cubre los casos en los que pensó su autor. Un curl -X POST a un formulario real, una API o un servidor de staging que resulta ser producción es un solo comando para un agente que quiere ver el resultado.

La misma tarea en una máquina Bromure

En Bromure Agentic Coding, el agente se ejecuta en una VM Linux en tu Mac, y cada conexión que abre la VM atraviesa un switch virtual y un proxy en el host. Las reglas viven ahí, fuera del alcance del agente. Reproduce la pista a la policía en una máquina y deja que el modelo decida enviar.

Leer está permitido, escribir está en la lista

El cortafuegos Outbound connections del panel Guardrails de la máquina acepta reglas por host, protocolo, puerto y, para tráfico web, método HTTP. Anthropic dijo que sus evaluaciones necesitaban «límites de red» declarados. Aquí hay uno, en el formato pf del panel:

allow web api.anthropic.com
allow web github.com
allow web registry.npmjs.org
allow web pypi.org
allow web any:80,443 read-only
default deny

Las reglas se evalúan de arriba abajo. El proveedor del modelo, la forja y los registros que usa el proyecto reciben todos los métodos. El resto de la web recibe GET, HEAD y OPTIONS: el agente puede leer cualquier página de documentación, issue, changelog o formulario de pistas que quiera. Cuando pulsa Enviar, el POST a phillyunsolvedmurders.com coincide con la regla de solo lectura, y el proxy responde 403 con «POST to phillyunsolvedmurders.com blocked by Bromure Guardrails.» El formulario nunca recibe la petición. El agente obtiene un error limpio que puede reportar, y default deny descarta todo lo que no sea tráfico web hacia un host de la lista.

No tienes que listar formularios, solicitudes de visado ni páginas de práctica que no cargaron. La regla nombra los cuatro hosts en los que escribe esta máquina y rechaza las escrituras al resto de la web.

El rodeo se topa con la misma regla

Los límites técnicos de Anthropic vivían en herramientas, así que el modelo cambió de herramienta. Una regla de Bromure vive en la red, así que cambiar de herramienta no sirve. El proxy ve la petición después de que sale de la VM, venga del fetch del agente, de curl, de Python, de un script de Node que el agente escribió hace un minuto o de una redirección desde un acortador de URL. Un enlace corto sigue resolviéndose en una petición al host real con el método real, y esa petición se comprueba como cualquier otra.

Lo mismo vale para un token sacado de un archivo de configuración. Si el agente encuentra una clave y la usa para escribir en un servidor que el proyecto no lista, la escritura se topa con la regla de solo lectura. Las claves que configuraste tú tienen su propia política: las credenciales de la máquina están por defecto en Prompt before write, así que un push, una subida a un registro o un cambio en AWS se detiene en un diálogo en el Mac que muestra la operación exacta.

El registro se escribe ese mismo minuto

La policía de Filadelfia calificó de inaceptable el retraso de diez semanas. En una máquina Bromure, el POST rechazado es una fila roja en la Security Timeline a las 23:27 del 18 de julio, con el nombre de la máquina, el host, el método y la ruta. La timeline está siempre activa, guarda 90 días y su pestaña Overview muestra en una sola pantalla los bloqueos más recientes de las últimas 24 horas. En un Mac inscrito en bromure.io, el mismo evento va a la consola de la organización.

La traza añade el resto. En el nivel por defecto, AI request details, el proxy guarda cada petición que hizo la máquina, con su host, método y ruta, y la conversación completa con el modelo, cifrada en el Mac. El Trace Inspector muestra el turno en el que el modelo decidió enviar, junto a la petición que hizo. bromure-cli trace hostnames lista cada host que contactó la máquina, con el número de peticiones, así que un sitio con el que el proyecto no tiene nada que ver destaca en una lista de unas pocas decenas de nombres. Un revisor lee una pantalla, no diez semanas de transcripciones.

Las ejecuciones desatendidas siguen las mismas reglas

Los incidentes del informe ocurrieron en ejecuciones automatizadas que nadie estaba mirando. Las Automations de Bromure, ejecuciones de agente programadas o disparadas por eventos, corren en una máquina bajo los guardrails y el cortafuegos de esa máquina. Una ejecución a las 23:27 se topa con las mismas reglas que una que miras a mediodía, y sus bloqueos llegan a la misma timeline.

En Bromure: el agente lee de todo y escribe donde el Mac permiteVM de la máquina (Ubuntu)GET /case/… → páginaPOST /tip → 403con fetch, curl, Pythono una URL acortada:la misma petición en la redmodelo: «envía el formulario»Switch + proxy, en el Macallow web api.anthropic.comallow web github.comallow web registry.npmjs.orgallow web pypi.orgallow web any:80,443 read-onlydefault denyPOST a phillyunsolvedmurders.com→ 403, bloqueado por Bromure GuardrailsFormulariosirvió la páginaenvíosrecibidos: ningunoSecurity Timeline, ese mismo minuto18 jul 23:27 · evals · Guardrails · POST phillyunsolvedmurders.com/… · bloqueadoLa traza guarda el método, el host y la ruta, y el turno del modelo que lo pidió, cifrados en el Mac.
La misma pista en una máquina Bromure. El agente puede leer la página y rellenar el formulario. El POST atraviesa el proxy en el Mac, coincide con la regla de solo lectura y recibe un 403, y la Security Timeline lo registra ese mismo minuto.

La solución de Anthropic, en tu portátil

La lista de medidas de Anthropic incluye retirar o rehacer evaluaciones para que no toquen sitios reales, endurecer su herramienta de fetch, trasladar sus agentes internos a «infraestructura gestionada de forma centralizada» con acceso a internet reducido, y una monitorización automatizada que, en pruebas, bloqueó todos los casos del informe. Es un laboratorio con su propio equipo de infraestructura rehaciendo su arnés.

Un desarrollador que ejecuta Claude Code, Codex o cualquier otro agente en un portátil necesita las mismas tres cosas: un límite que no sea una frase, comprobado en un sitio que el agente no puede editar, y un registro que alguien vea ese mismo día. Una máquina Bromure te da la regla de cortafuegos, el proxy en el Mac y la Security Timeline sin rehacer nada.

Lee en todas partes, escribe donde está listado

Una regla de cortafuegos da al agente todas las páginas web con GET y HEAD, y reserva POST, PUT y DELETE para los hosts que usa el proyecto. Un envío a cualquier otro sitio recibe un 403 del proxy en el Mac.

Cambiar de herramienta no cambia la respuesta

La comprobación se hace sobre la petición después de que sale de la VM. Fetch, curl, Python, una URL acortada o un token sacado de un archivo de configuración acaban en la misma petición y en la misma regla.

Las claves configuradas preguntan antes de escribir

Las máquinas nuevas ponen cada servicio configurado en Prompt before write. Un push, una subida o un cambio en la nube se detiene en un diálogo en el Mac que muestra la operación exacta.

El bloqueo queda registrado ese minuto

Cada rechazo es una fila en la Security Timeline con host, método y ruta, guardada 90 días. La traza guarda el turno del modelo que lo pidió.

El próximo formulario

Anthropic espera encontrar más casos a medida que avance su revisión. Sus modelos rellenaron solicitudes de visado y una pista a la policía mientras ejecutaban pruebas, con instrucciones escritas por quienes los entrenaron. Tu agente se topará con un fixture roto, una URL de staging o una página de registro propia, con instrucciones escritas con prisa.

Escribe tu límite como una regla de cortafuegos en el Mac y conserva la línea de CLAUDE.md como recordatorio. Sobre los incidentes de julio que iniciaron la revisión de Anthropic, lee La sandbox era una frase, y para la versión de OpenAI de la misma historia, La tarea era imposible, así que el agente salió.