← Todos os Posts

A stack de agentes tem um problema de 1998

Na última semana de junho de 2026, um pequeno cluster de CVEs surgiu contra ferramentas de agentes de IA, duas delas no mesmo cliente de agente desktop, ambas falhas de autorização, uma delas bem dentro de um callback OAuth do MCP. Lida isoladamente, cada uma é uma falha de severidade média que um mantenedor corrige em um fim de semana. Lidas em conjunto, o cluster é um sinal, e o sinal é estrutural: o ecossistema de agentes de IA está acumulando superfície de ataque mais rápido do que acumula a cultura de segurança para defendê-la. Isso não é uma falha moral de nenhum projeto em particular. É exatamente a condição em que a web estava por volta de 1998, quando uma linguagem se popularizou com padrões inseguros, credenciais ficavam por toda parte e a base instalada crescia mais rápido do que alguém conseguia protegê-la. As ferramentas que guardam suas chaves e executam seu shell estão sendo lançadas com maturidade de segurança de 1998 dentro de um modelo de ameaças de 2026. {.answer-block}

TL;DR

  • O Cherry Studio, um popular cliente de agente de IA desktop, recebeu dois CVEs em 29 de junho de 2026: uma falha de autorização inadequada em seu servidor de callback OAuth do MCP (CVE-2026-13524) e um bypass de autorização em uma API de preload (CVE-2026-13534).12
  • O padrão não se restringe a um único app. A própria ferramenta de referência do MCP lançou falhas críticas de execução remota de código em 2025: o mcp-remote com CVSS 9.6 (CVE-2025-6514) e o MCP Inspector da Anthropic com CVSS 9.4 (CVE-2025-49596).34
  • As ferramentas de agente são estruturalmente mais expostas do que os webapps jamais foram: elas guardam credenciais, executam código por design e ficam dentro dos seus limites de confiança (IDE, shell, navegador) em vez de atrás deles.
  • O conhecimento para prevenir essas falhas já existe. A especificação do MCP documenta em detalhe as classes de ataque de confused deputy e de fluxo OAuth; a cultura de aplicá-lo em cada integração de ritmo acelerado ainda não se propaga.5
  • A web de 1998 só amadureceu depois que os worms tornaram a insegurança cara. O ecossistema de agentes ainda não tem uma função forçante equivalente, e os mesmos modelos que hoje encontram essas falhas podem escrever aquele que virá a ser ela.

O cluster, concretamente

O Cherry Studio é um cliente desktop multiplataforma que se apresenta como um “estúdio de produtividade de IA com chat inteligente, agentes autônomos e mais de 300 assistentes”, com suporte explícito a servidores do Model Context Protocol. É exatamente o tipo de ferramenta sobre o qual este ensaio trata: um agente voltado ao consumidor que intermedeia suas chaves de API, executa integrações locais e acessa a rede em seu nome.

Em 29 de junho de 2026, o VulDB publicou dois avisos contra ele. O CVE-2026-13524 é uma falha de autorização inadequada (CWE-285) no MCP OAuth Local Callback Server, em src/main/services/mcp/oauth/callback.ts, nas versões 1.9.0 até 1.9.6. A descrição é direta: “A manipulação do argumento code leva a uma autorização inadequada.” Ele pontua CVSS 3.1 em 5,6, média.1 O CVE-2026-13534 é um bypass de autorização (CWE-639) na API de preload do CherryIN, até a versão 1.9.7, com pontuação 5,0.2 Nenhum é manchete. Ambos são o erro silencioso de autorização que uma equipe comete ao avançar rápido por uma superfície nova para todos.

A primeira é o sinal revelador. Um callback OAuth em um cliente MCP é um limite de confiança clássico: o ponto em que um servidor de autorização externo devolve um código à sua máquina e sua máquina decide se confia nele. Lidar mal com isso não é uma classe de bug exótica e nova. É justamente aquela à qual o próprio documento de segurança da especificação do MCP dedica mais tinta.

Descartei dois CVEs vizinhos da mesma janela, porque o cluster precisa ser real: o CVE-2026-13533 é o agentejo Cockpit CMS, um gerenciador de conteúdo em PHP em vez de um framework de agentes, e o CVE-2026-13543 não pôde ser verificado de forma alguma. Alguns exemplos sólidos valem mais do que uma lista inflada.

Por que as ferramentas de agente estão estruturalmente em pior situação

Um webapp clássico por volta de 1998 era inseguro, mas vivia atrás de um limite. Rodava em um servidor dentro do qual você não estava, seu raio de explosão era o banco de dados e a sessão, e uma invasão dava ao atacante os dados do app.

Uma ferramenta de agente inverte essa geometria. Ela roda na sua máquina ou dentro do seu IDE, guarda credenciais de longa duração para sua nuvem e seus repositórios e executa código como um recurso central, não como um exploit. Não há limite atrás do qual se abrigar, porque a ferramenta é o limite, e ela é porosa por design.

Simon Willison nomeou o perigo com precisão em junho de 2025 com a “trifecta letal”: um agente se torna explorável quando combina “acesso aos seus dados privados”, “exposição a conteúdo não confiável” e “a capacidade de se comunicar externamente” de um modo que permite roubar esses dados.7 Todo agente capaz tem os três por padrão, porque ler seus segredos, ingerir conteúdo influenciado por atacantes e fazer requisições de saída são seus recursos, não seus bugs. A trifecta não é um caso extremo. É a configuração padrão.

Essa é a diferença estrutural. O webapp de 1998 precisava ser enganado para vazar o equivalente a um limite de dados. O agente de 2026 chega pré-conectado com toda capacidade de que uma cadeia de exfiltração precisa, e a única coisa entre uma entrada maliciosa e suas credenciais é se a ferramenta traçou corretamente seus limites de confiança internos. O bug de callback do Cherry Studio é como isso se parece quando um desses limites é traçado um pouco errado.

A amplificação do MCP

O Model Context Protocol é o tecido conectivo da stack de agentes de 2026, e multiplica a superfície de uma maneira específica: cada servidor MCP é uma nova integração privilegiada, geralmente escrita às pressas, que o modelo pode invocar. Adicionar uma é algo sem atrito. Auditar uma não é. A base instalada de integrações está superando a população de pessoas que leem o código delas.

A ferramenta de referência mostra que isso não é um problema de projeto de hobby. Em julho de 2025, a JFrog divulgou o CVE-2025-6514, uma injeção de comando de sistema operacional no mcp-remote, um conector usado por Claude Desktop, Cursor e Windsurf, que um servidor malicioso dispara com uma URL authorization_endpoint forjada durante o fluxo OAuth: crítica, CVSS 9.6.3 No mesmo mês, a Tenable divulgou o CVE-2025-49596, uma falha de execução remota de código 9.4 no próprio MCP Inspector da Anthropic, em que a ausência de uma verificação de autenticação permitia que um site malicioso alcançasse uma porta local e, via DNS rebinding, executasse comandos arbitrários.4

Dois dos quatro CVEs deste ensaio são falhas de fluxo OAuth em ferramentas do MCP: uma no servidor de callback, outra na descoberta de endpoint. Isso não é coincidência. O OAuth em um cliente de agente é um limite repetidamente mal executado, e a especificação diz isso em alto e bom som. O documento de melhores práticas de segurança do MCP, datado de 18 de junho de 2025, dedica sua seção mais longa ao “problema do confused deputy” e determina que servidores de proxy implementem consentimento por cliente, validem o parâmetro state do OAuth e correspondam exatamente as redirect URIs.5 Isso foi publicado um ano antes de o Cherry Studio lançar seu bug de callback. A lacuna não é de conhecimento. É a distância entre o apêndice de segurança de uma especificação e a integração mediana escrita na última terça-feira.

A prompt injection torna a amplificação qualitativamente pior do que qualquer coisa que a web antiga enfrentou. Willison cunhou o termo em setembro de 2022, escrevendo “Proponho que o nome óbvio para isso seja prompt injection”, por analogia à SQL injection: instruções confiáveis e entrada não confiável concatenadas em uma única string que um mecanismo então interpreta.6 Para um agente, dados são um vetor, não apenas código. Uma página web envenenada, um arquivo com armadilha, uma descrição de ferramenta hostil: qualquer byte que o modelo leia pode carregar uma instrução. A especificação do MCP é franca sobre isso, alertando que um servidor malicioso pode transformar o cliente em um proxy para exfiltração de dados.5 Você não consegue corrigir isso com escaping de entrada, porque a entrada é linguagem natural e o interpretador é um modelo.

A analogia de 1998, tornada precisa

A analogia precisa sobreviver à verificação de fatos, ou não passa de uma vibe, então aqui está a época, com precisão.

O PHP 3 foi lançado em junho de 1998 e colocou uma linguagem web dinâmica nas mãos de milhões com um padrão que hoje soa imprudente: a entrada externa, vinda da query string, dos cookies ou do servidor, era registrada diretamente no escopo global. O register_globals estava ativado, e uma variável controlada por um atacante podia silenciosamente se tornar uma em que seu código confiava. A correção levou quatro anos. O PHP 4.2.0, lançado em abril de 2002, mudou o padrão, e o anúncio de lançamento afirma isso de forma direta: “Variáveis externas (do ambiente, da requisição HTTP, dos cookies ou do servidor web) não são mais registradas no escopo global por padrão.”8 A outra muleta que definiu a época, as magic quotes, aplicava addslashes para simular segurança contra SQL injection sem substância, e sobreviveu ao register_globals por anos antes de o projeto finalmente eliminá-la. Padrões inseguros, uma ilusão de segurança, um atraso de vários anos até a cultura alcançar. Essa era a camada de aplicação da web jovem.

A cultura não chegou por conta própria. Ela foi forçada. Em 19 de julho de 2001, o worm Code Red explorou um buffer overflow no servidor web IIS da Microsoft e, pela contagem da CAIDA, “mais de 359.000 computadores foram infectados pelo worm Code-Red (CRv2) em menos de 14 horas.”9 Em 25 de janeiro de 2003, o worm Sapphire/Slammer atingiu um buffer overflow no Microsoft SQL Server, se compactou em pacotes de 376 bytes e “infectou a maioria dos hosts vulneráveis que podiam ser encontrados em dez minutos”, o worm de propagação mais rápida da história até aquele momento.10 Aqueles eram worms de infraestrutura, não bugs de PHP, e eu não vou confundi-los. O ponto é o formato da década: padrões inseguros em todas as camadas, e uma cultura de segurança que só amadureceu depois que a insegurança se tornou visceral e publicamente cara. Seguro por padrão foi uma lição que a indústria pagou em worms.

Projete isso sobre 2026 e a correspondência é desconfortável. Padrões inseguros: clientes de agente que confiam em códigos de callback e pulam as verificações de consentimento. A ilusão de segurança: um prompt de permissão sobre um token com escopo admin:*. A base instalada em explosão: um servidor MCP para tudo, adicionado com um clique, auditado por ninguém. O que o ecossistema ainda não tem é o worm. Ele tem os padrões de 1998 e o perfil de alvo de 2001, e está esperando por sua função forçante.

A postura do operador

Você não pode esperar pela cultura. Você usa essas ferramentas agora, então você traça os limites que o ecossistema ainda não traçou para você. O enquadramento que uso é a trifecta como um checklist operacional: para qualquer agente, pergunte o que ele pode ler, o que pode executar e o que pode exfiltrar, e coloque uma proteção determinística em cada um.

Capacidade O que o agente faz Onde dá errado A proteção
Ler Ingere arquivos, páginas web, saída de ferramentas, respostas do MCP Conteúdo não confiável carrega instruções injetadas Trate cada byte obtido como entrada hostil, nunca como instrução; rotule e isole fontes de dados externas
Executar Roda shell, edita arquivos, chama ferramentas por design Dados forjados se tornam um comando (injection, confused deputy) Regras de permissão que são avaliadas antes da chamada; allowlist de ferramentas e servidores MCP; exija consentimento em novos servidores locais
Exfiltrar Faz requisições de saída, escreve em repositórios, publica em APIs Ler mais executar completa a trifecta letal Controles de egress; bloqueie faixas de IP privadas e link-local; use tokens com privilégio mínimo; nunca repasse tokens

A coluna de proteção não é aspiracional. Ela é determinística, e o determinismo é o ponto. Os hooks disparam em eventos de ciclo de vida com códigos de saída com os quais o modelo não pode discutir, e as regras de permissão são avaliadas antes de uma ferramenta rodar, não depois. Essa é a camada em que “o agente não deveria fazer X” se torna “o agente não pode fazer X”, e é a única camada pela qual um payload de prompt injection não consegue passar na conversa. Quando você não pode confiar na entrada, e não pode confiar que o modelo se policie quanto à entrada, você impõe no limite que o modelo não controla.

Um segundo controle soa como um recurso de produtividade, mas é, na verdade, de segurança. Quando um agente compila seu trabalho em um plano revisável antes de executar, revisar esse plano é uma revisão de segurança. Um script de workflow de quarenta linhas que nomeia cada ferramenta que vai chamar e cada arquivo que vai tocar é um modelo de ameaças que você lê em um minuto. Você não consegue auditar dez mil decisões ao vivo; você consegue auditar o plano que as geraria, antes de ele gastar qualquer coisa.

E mantenha a assimetria em vista: a mesma capacidade que produz esses CVEs também os encontra. Um pesquisador da Anthropic usou um agente de codificação e um script de dez linhas para revelar uma vulnerabilidade de 23 anos no kernel do Linux e 22 CVEs do Firefox. A ferramenta na sua mesa é um scanner de vulnerabilidades apontado para sua própria stack, se você o apontar. Os defensores podem automatizar a descoberta hoje e estão construindo a camada de triagem agora. Essa é a única vantagem que a web de 1998 não tinha.

A posição

Aqui está o que eu acho que acontece, específico o bastante para estar errado. O ecossistema de agentes terá seu momento Code Red antes de ter sua cultura de segurança, porque essa foi a ordem em que a web fez isso. A função forçante é, muito provavelmente, um payload de prompt injection autopropagável se movendo entre agentes por meio de servidores MCP compartilhados, ou um evento de exfiltração de credenciais em massa rastreável até uma integração popular e pouco auditada. Será barato de construir, porque os mesmos modelos que encontram bugs de kernel podem escrevê-lo, e o alerta de “uma grande onda vindo” nunca foi só sobre defesa.

Depois que ele acontecer, seguro por padrão deixa de ser opcional. Os clientes MCP passam a vir com diálogos de consentimento ativados por padrão, audiences de token validadas, callbacks que rejeitam redirect URIs não correspondentes, do mesmo modo que o PHP acabou vindo com o register_globals desativado. As camadas de permissão passam de opt-in para negação por padrão. As integrações que sobrevivem são aquelas que trataram o apêndice de segurança da especificação como a própria especificação.

A parte desconfortável é o cronograma. A web levou, grosso modo, de 1998 a 2005 para internalizar o seguro por padrão, com anos entre os worms para pensar. A stack de agentes se acumula mais rápido, com um alvo de maior valor na máquina de cada desenvolvedor e um conjunto de ferramentas de ataque que melhora a cada geração de modelo. O problema de 1998 é real. A única questão em aberto é se vamos agir com base na analogia antes de o worm escrever o final, ou depois.

Principais conclusões

  • Faça a auditoria da trifecta em cada agente. Anote o que cada ferramenta pode ler, executar e exfiltrar, e então confirme uma proteção determinística em cada linha. Uma capacidade sem proteção é a sua exposição, e onde o próximo payload vai cair.
  • Use allowlist para servidores MCP; trate cada parâmetro de comando como execução não confiável. Adicionar uma integração é um clique e auditá-la não é, então restrinja o registro a uma lista revisada. Dois dos quatro CVEs aqui eram bugs de fluxo OAuth em clientes MCP: o handshake é um limite, não uma formalidade.
  • Faça do momento do plano o portão de revisão. Faça os agentes compilarem a intenção em um plano revisável e leia-o como um modelo de ameaças antes da execução. Um script que nomeia suas ferramentas e arquivos é auditável em um minuto; dez mil chamadas de ferramenta ao vivo não são.
  • Aponte o scanner para si mesmo primeiro. A capacidade que produz esses CVEs também os encontra. Faça varreduras de segurança assistidas por agente no seu próprio código e nas suas dependências antes que outra pessoa faça as dela em você.

FAQ

Os servidores MCP são seguros?

Não por padrão, e não de forma uniforme. O MCP é um protocolo; sua segurança depende de como cada servidor e cliente o implementa. As divulgações de 2025 contra o mcp-remote (CVSS 9.6) e o MCP Inspector da Anthropic (CVSS 9.4) mostram que até a ferramenta de referência lançou falhas críticas de RCE.34 A especificação documenta as principais classes de ataque, confused deputy, token passthrough, SSRF, comprometimento de servidor local, e prescreve mitigações concretas.5 Trate cada servidor como uma integração privilegiada: rode apenas aqueles em que você confia ou que auditou, coloque-os em allowlist explicitamente e presuma que qualquer servidor ao qual você se conecta pode influenciar seu agente.

O que é prompt injection?

Prompt injection é quando um atacante contrabandeia instruções para dentro da entrada não confiável que um sistema de IA lê, e o modelo as segue como se viessem de você. Simon Willison cunhou o termo em setembro de 2022 por analogia à SQL injection: instruções confiáveis e entrada não confiável concatenadas em um único prompt que o modelo então interpreta, sem uma maneira confiável de dizer qual parte era a do atacante.6 Para agentes, é especialmente perigoso porque os dados se tornam um vetor, e o escaping não consegue corrigir isso porque o interpretador é um modelo de linguagem.

O que é a trifecta letal?

O nome dado por Simon Willison, em junho de 2025, para as três capacidades que, juntas, tornam um agente explorável: acesso aos seus dados privados, exposição a conteúdo não confiável e a capacidade de se comunicar externamente.7 Um agente com as três pode ser manipulado por conteúdo injetado a ler seus segredos e enviá-los a um atacante. A maioria dos agentes capazes tem as três por padrão, e é por isso que a jogada é proteger cada capacidade em vez de torcer para que o modelo resista.

Como eu protejo um agente que roda na minha máquina?

Comece pelo limite que o modelo não controla. Use regras de permissão e hooks que são avaliados antes de uma ferramenta rodar, para que um prompt comprometido não consiga convencer o caminho até uma ação que você proibiu. Coloque ferramentas e servidores MCP em allowlist, exija consentimento antes que um novo servidor local execute e defina cada credencial com privilégio mínimo, para que um token roubado tenha um pequeno raio de explosão. Bloqueie requisições de saída para faixas de IP privadas e link-local para fechar o caminho de exfiltração. Depois, revise o plano do agente antes de operações grandes, onde a injection que sobreviveu ao limite de leitura é capturada.

Fontes


  1. CVE-2026-13524, CircL Vulnerability-Lookup, vulnerability.circl.lu/vuln/cve-2026-13524 (publicado em 29 de junho de 2026). Autorização inadequada (CWE-285) no MCP OAuth Local Callback Server do CherryHQ cherry-studio 1.9.0 até 1.9.6, arquivo src/main/services/mcp/oauth/callback.ts. “A manipulação do argumento code leva a uma autorização inadequada.” CVSS 3.1 pontuação base 5,6 (média); GHSA-9c5h-h4mj-p5ch; correção proposta no pull request #15388

  2. CVE-2026-13534, CircL Vulnerability-Lookup, vulnerability.circl.lu/vuln/cve-2026-13534 (publicado em 29 de junho de 2026). Bypass de autorização (CWE-639) na API de preload do CherryIN do CherryHQ cherry-studio até a 1.9.7, função sha256 em src/main/services/memory/MemoryService.ts. CVSS 3.1 pontuação base 5,0 (média); GHSA-qwwm-4xhq-q4m4; o fornecedor observa que a memória está prevista para remoção na v2. 

  3. CVE-2025-6514, GitHub Advisory Database, github.com/advisories/GHSA-6xpm-ggf7-wc3p (publicado em 9 de julho de 2025). “Injeção de comando de sistema operacional ao conectar-se a servidores MCP não confiáveis devido a entrada forjada vinda da URL de resposta do authorization_endpoint”, em versões do mcp-remote >= 0.0.5, < 0.1.16; CVSS v3 pontuação base 9.6 (crítica); corrigido na 0.1.16. Descoberto e detalhado pela JFrog Security Research; exposição de clientes (Claude Desktop, Cursor, Windsurf) conforme o post de aviso da JFrog

  4. CVE-2025-49596, Tenable Research, “How Tenable Research Discovered a Critical Remote Code Execution Vulnerability on Anthropic MCP Inspector”, tenable.com (9 de julho de 2025). RCE no MCP Inspector da Anthropic abaixo da versão 0.14.1, causa raiz uma verificação de autenticação ausente entre o cliente Inspector e o proxy, explorável a partir de um site malicioso via CORS e DNS rebinding; CVSS 9.4 (crítica); corrigido na 0.14.1 pela adição de tokens de sessão de proxy. 

  5. “Security Best Practices”, especificação do Model Context Protocol, revisão 2025-06-18, modelcontextprotocol.io/specification/2025-06-18/basic/security_best_practices. Documenta o problema do confused deputy e determina que os servidores de proxy MCP “DEVEM implementar consentimento por cliente” com validação do state do OAuth e correspondência exata de redirect-URI; também cobre token passthrough (“os servidores MCP NÃO DEVEM aceitar quaisquer tokens que não tenham sido explicitamente emitidos para o servidor MCP”), SSRF, sequestro de sessão e comprometimento de servidor local. 

  6. Simon Willison, “Prompt injection attacks against GPT-3”, simonwillison.net/2022/Sep/12/prompt-injection/ (12 de setembro de 2022). Cunha o termo: “Proponho que o nome óbvio para isso seja prompt injection”, traçando a analogia com a SQL injection e a concatenação de instruções confiáveis com entrada não confiável. 

  7. Simon Willison, “The lethal trifecta for AI agents: private data, untrusted content, and external communication”, simonwillison.net/2025/Jun/16/the-lethal-trifecta/ (16 de junho de 2025). Nomeia as três capacidades cuja combinação torna um agente explorável: “acesso aos seus dados privados”, “exposição a conteúdo não confiável” e “a capacidade de se comunicar externamente”. 

  8. “PHP 4.2.0 Release Announcement”, php.net/releases/4_2_0.php (abril de 2002). Documenta a mudança de padrão de segurança: “Variáveis externas (do ambiente, da requisição HTTP, dos cookies ou do servidor web) não são mais registradas no escopo global por padrão.” Essa é a mudança do register_globals para desativado por padrão, cerca de quatro anos depois de o PHP 3 lançar o comportamento ativado por padrão em 1998. 

  9. “CAIDA Analysis of Code-Red”, CAIDA, caida.org/archive/code-red. “Mais de 359.000 computadores foram infectados pelo worm Code-Red (CRv2) em menos de 14 horas”, começando em 19 de julho de 2001, explorando um buffer overflow no Microsoft IIS; no pico, “mais de 2.000 novos hosts eram infectados a cada minuto”. 

  10. “The Spread of the Sapphire/Slammer Worm”, CAIDA, caida.org/archive/sapphire. Lançado no sábado, 25 de janeiro de 2003, por volta das 5h30 UTC, explorando um buffer overflow no Microsoft SQL Server; o worm criava pacotes de 376 bytes e “infectou a maioria dos hosts vulneráveis que podiam ser encontrados em dez minutos”, o worm de propagação mais rápida da história na época. 

Artigos relacionados

Saída silenciosa: a superfície de ataque que você não construiu

Uma página web maliciosa injetou instruções nos metadados da URL. O agente buscou a página, leu o veneno e exfiltrou a c…

20 min de leitura

Your Agent Has Two Untrusted Inputs

AI agents have two untrusted inputs: code the model writes and tool output it reads. One now has a real WASM sandbox; th…

12 min de leitura

Seu agente escreve mais rápido do que você consegue ler

Cinco grupos de pesquisa, o mesmo achado: agentes de IA produzem código mais rápido do que os desenvolvedores conseguem …

16 min de leitura