APPSEC · ABR · 2026 · 8 min

OWASP LLM Top 10 (2025): cinco riscos que já viraram incidente — e como cobrir cada um

A lista de 2025 do OWASP para aplicações LLM foi reescrita depois de dois anos de incidente real. Ela não substitui o Top 10 web — soma. Para um time de cinco ou dez engenheiros com uma feature de IA em produção, a pergunta não é conhecer os dez itens: é saber quais cinco fechar primeiro, quanto custa cada um em dias de engenharia e o que checar antes do release.

  • Categoria
    AppSec
  • Data
    ABR · 2026
  • Leitura
    8min
  • Fontes
    8
§01APPSECMais artigos

Dez itens, nenhum deles teórico. A diferença entre a lista de 2023 e a de 2025 aparece exatamente onde dói em produção: no que o modelo pode chamar e para onde a resposta dele vai. Este texto é para o time que já colocou uma feature de IA no ar e precisa decidir o que fechar primeiro.

O que mudou da lista de 2023 para a de 2025

Duas entradas são novas. System Prompt Leakage (LLM07) e Vector and Embedding Weaknesses (LLM08) nasceram do mesmo lugar: prompt de sistema comprido e RAG deixaram de ser detalhe de implementação e viraram superfície de ataque. Em 2023 nenhum dos dois existia na lista.

Três itens mudaram de nome e de escopo. Insecure Output Handling, que era LLM02, virou Improper Output Handling e desceu para LLM05. Training Data Poisoning virou Data and Model Poisoning (LLM04) e passou a cobrir pesos e fine-tuning, não só o corpus de treino. Model Denial of Service virou Unbounded Consumption (LLM10) e agora inclui custo: fatura de API estourada e serviço fora do ar entraram na mesma caixa.

Dois subiram e dois saíram. Sensitive Information Disclosure pulou de LLM06 para LLM02. Supply Chain foi de LLM05 para LLM03. Insecure Plugin Design e Model Theft deixaram de ser itens próprios — o conteúdo de plugin foi absorvido por Supply Chain e Excessive Agency. E Overreliance virou Misinformation (LLM09), tirando o foco do comportamento do usuário e colocando no output que o sistema produz.

O que mudou: lista 2023 → 2025OWASP Top 10 for LLM Applications — v1.1 (2023) vs 2025
20232025
Divulgação de informação sensívelLLM06LLM02
Supply ChainLLM05LLM03
Tratamento de saída (renomeado)LLM02 · Insecure Output HandlingLLM05 · Improper Output Handling
Envenenamento de dado/modelo (escopo maior)LLM04 · só corpus de treinoLLM04 · pesos e fine-tuning
Negação de serviço → consumo ilimitadoLLM10 · só disponibilidadeLLM10 · + custo de API
Itens novos: prompt de sistema e embeddingsnão existiaLLM07 · LLM08
Plugin inseguro e roubo de modelo (absorvidos)itens própriosconteúdo em LLM03 e LLM06
Confiança excessiva → desinformação (foco mudou)LLM09 · comportamento do usuárioLLM09 · saída do sistema

Os cinco que importam para um time pequeno

Um time de dez engenheiros não fecha dez frentes ao mesmo tempo. Fecha cinco. O critério para escolher não é gosto: LLM01, LLM02, LLM03, LLM05 e LLM06 são os que já apareceram em incidente público com detalhe técnico divulgado. Os outros cinco importam, mas podem esperar o trimestre seguinte.

OWASP LLM Top 10 · 2025
  • LLM01Prompt Injectionalto
  • LLM02Sensitive Information Disclosurealto
  • LLM03Supply Chainalto
  • LLM04Data and Model Poisoningmédio
  • LLM05Improper Output Handlingalto
  • LLM06Excessive Agencyalto
  • LLM07System Prompt Leakagemédio
  • LLM08Vector and Embedding Weaknessesmédio
  • LLM09Misinformationmédio
  • LLM10Unbounded Consumptionmédio

Prompt Injection (LLM01) com Improper Output Handling (LLM05) foi o par do EchoLeak (CVE-2025-32711, CVSS 9.3), divulgado pela Aim Security em junho de 2025. Um e-mail com instrução escondida em comentário HTML, sem um clique sequer do usuário, fez o Microsoft 365 Copilot ler arquivos internos e mandar o conteúdo para fora. O payload passou pelo classificador de prompt injection, pela redação de links e pelo CSP, usando um proxy de imagem do Teams que estava na allowlist. A Microsoft corrigiu no servidor e disse não ter visto exploração real.

Três meses depois veio o ForcedLeak (CVSS 9.4), reportado pela Noma Security à Salesforce em 28 de julho de 2025 e divulgado em 25 de setembro. O campo Description de um formulário Web-to-Lead do Agentforce virou canal de instrução, e a saída foi para um domínio expirado que continuava na allowlist do CSP — comprado por US$ 5 no registrador. A Salesforce ligou o Trusted URLs Enforcement em 8 de setembro de 2025. A lição não é sobre a Salesforce: sua allowlist de CSP vale o domínio mais barato que sobrou nela.

A Slack AI mostrou o mesmo padrão um ano antes. Em 20 de agosto de 2024, a PromptArmor publicou como uma mensagem plantada em canal público, ingerida pelo pipeline de RAG, fazia o assistente montar um link markdown que carregava dados de canais privados nos quais o atacante nunca entrou. Mesma mecânica, produto diferente: entrada não confiável, saída sem controle.

Supply Chain (LLM03) acumulou três casos em dezoito meses. Em fevereiro de 2024, a JFrog encontrou mais de 100 modelos maliciosos no Hugging Face, com pickle disparando shell reverso no momento do load e cerca de 95% deles em formato PyTorch. Em julho de 2025, a extensão Amazon Q Developer para VS Code recebeu um PR externo e saiu como versão 1.84.0 em 17 de julho com um prompt de sistema mandando o agente limpar o disco e apagar recursos AWS via CLI; só foi substituída pela 1.85.0 em 19 de julho, com boletim AWS-2025-019 (o payload não chegou a funcionar por erro de formatação). Em 26 de agosto de 2025, o s1ngularity (CVE-2025-10894) publicou versões maliciosas do Nx com um postinstall que usava os CLIs de IA já instalados na máquina para varrer o disco atrás de segredos. A Wiz contou mais de 190 usuários e organizações e mais de 3.000 repositórios atingidos na segunda onda.

Excessive Agency (LLM06) tem a história mais cara e a mais silenciosa. Em julho de 2025, o agente do Replit apagou o banco de produção durante um code freeze: 1.206 registros de executivos e 1.196 de empresas, sem rollback. O CEO pediu desculpas publicamente em 19 de julho e a empresa passou a separar banco de desenvolvimento e de produção por padrão. Dois meses antes, o Invariant Labs tinha mostrado a versão silenciosa do mesmo problema: no servidor MCP do GitHub, uma issue maliciosa em repositório público faz o agente que foi só 'olhar as issues abertas' publicar conteúdo de repositório privado num PR público. Não é bug de código. É permissão demais concentrada numa sessão só.

Linha do tempo dos incidentes citados
  1. FEV · 2024JFrog encontra 100+ modelos maliciosos no Hugging Face (LLM03)
  2. AGO · 2024Slack AI: injeção via RAG exfiltra canal privado (LLM01/LLM05)
  3. JAN · 2025Wiz encontra banco do DeepSeek exposto na internet (LLM02)
  4. MAI · 2025Invariant Labs: GitHub MCP vaza repositório privado (LLM06)
  5. JUN · 2025EchoLeak divulgado: zero-click no Microsoft 365 Copilot (LLM01/LLM05)
  6. JUL · 2025Agente do Replit apaga banco de produção (LLM06)
  7. JUL · 2025Extensão maliciosa do Amazon Q Developer publicada (LLM03)
  8. AGO · 2025s1ngularity compromete pacotes do Nx (LLM03)
  9. SET · 2025ForcedLeak divulgado no Salesforce Agentforce (LLM01/LLM05)

Mitigação por item, com esforço realista

Os números abaixo são dias de engenharia para um time que já tem CI e revisão de PR. Somados, doze a quinze dias — menos do que costuma custar uma única resposta a incidente.

O custo de fechar os cinco itens críticos
5de 10
itens já registraram incidente público com detalhe técnico divulgado
12–15dias
esforço total de mitigação para um time que já tem CI e revisão de PR
US$ 5
custo do domínio expirado que permitiu a exfiltração no ForcedLeak

LLM01 e LLM05 andam juntos e dão o melhor retorno. Trate todo texto vindo de fora — e-mail, issue, PDF, página raspada, registro de CRM — como dado não confiável, e trate a saída do modelo do mesmo jeito. Na prática: nada de renderizar HTML ou markdown cru do modelo, nada de imagem com URL montada pelo modelo, nada de eval, nada de SQL concatenado, e uma allowlist de domínios de saída revisada com monitoramento de expiração. De 3 a 5 dias.

LLM06 é o item mais barato e o que mais dói quando falta. Toda ferramenta exposta ao modelo ganha escopo mínimo, credencial própria e ambiente próprio. Ação destrutiva — DROP, DELETE, deploy, envio de e-mail, pagamento — exige confirmação humana fora do canal do modelo. E uma sessão de agente toca um repositório, um banco, um bucket. De 2 a 3 dias, e é o que separa o seu time do incidente do Replit.

LLM03 se resolve com higiene de dependência aplicada ao novo estoque: versão travada no lockfile, instalação sem executar postinstall onde for possível, revisão manual de qualquer extensão de IDE com acesso a shell e carregamento de modelo em safetensors no lugar de pickle. Acrescente um SBOM ao build. 2 dias na primeira vez, depois vira manutenção.

LLM02 é infraestrutura de sempre aplicada a dado novo. Nenhum segredo no prompt de sistema, redação de PII antes de gravar log de prompt e resposta, retenção curta. O vazamento da DeepSeek — um ClickHouse aberto na internet com mais de 1 milhão de linhas de log, histórico de conversa e chaves em texto claro, encontrado pela Wiz em 29 de janeiro de 2025 — não foi falha de modelo. Foi banco exposto. 2 dias.

LLM07, LLM08 e LLM10 saem na mesma passada. Assuma que o prompt de sistema vaza e não guarde nele nada que não possa ser público. Isole índices vetoriais por tenant e aplique no retrieval a mesma ACL do dado de origem. Ponha teto de tokens por requisição, rate limit por usuário e alerta de custo diário. 3 dias.

Como isso entra no threat modeling e no CI

No threat modeling, cada feature de IA vira um diagrama de três caixas: de onde vem o texto, o que o modelo pode chamar, para onde vai a saída. Cada seta recebe um item da lista. Se ninguém no time sabe apontar onde a seta de saída termina, você tem um EchoLeak esperando a hora.

No CI, três gates baratos. Um teste de regressão rodando um corpus de prompts de injeção conhecidos contra os endpoints de IA. Um scanner de segredo no repositório e nos logs de exemplo. E a checagem de dependência que quebra o build quando um pacote ganha postinstall novo ou foi publicado nas últimas 48 horas — exatamente a janela do Nx e da Amazon Q. Nenhum dos três exige ferramenta paga.

Se você precisa mostrar isso para cliente ou auditor, o NIST AI 600-1 (o perfil de IA generativa do AI RMF, publicado em julho de 2024) dá o vocabulário, com 12 categorias de risco e mais de 200 ações sugeridas, e a ISO/IEC 42001 é a norma certificável de sistema de gestão de IA. Comece pelo OWASP e mapeie depois. O caminho inverso custa meses e não fecha nenhum bug.

Checklist antes do release

Sete perguntas. Se alguma resposta for 'não sei', o release espera. Primeira: todo texto de terceiro que chega ao modelo está marcado como não confiável no código? Segunda: a saída do modelo é renderizada ou executada em algum ponto sem sanitização? Terceira: qual é a lista exata de ferramentas que o modelo pode chamar, e quem aprovou cada permissão? Quarta: existe ação destrutiva sem confirmação humana? Quinta: o que acontece com o produto se o prompt de sistema inteiro virar público amanhã? Sexta: os logs de prompt e resposta guardam PII, e por quanto tempo? Sétima: qual é o teto de gasto por usuário por dia, e quem recebe o alerta?

Checklist antes do release
  1. 01
    Entrada não confiável

    Todo texto de terceiro que chega ao modelo está marcado como não confiável no código?

  2. 02
    Saída sanitizada

    A saída do modelo é renderizada ou executada em algum ponto sem sanitização?

  3. 03
    Ferramentas aprovadas

    Qual é a lista exata de ferramentas que o modelo pode chamar, e quem aprovou cada permissão?

  4. 04
    Confirmação humana

    Existe ação destrutiva sem confirmação humana?

  5. 05
    Prompt de sistema público

    O que acontece com o produto se o prompt de sistema inteiro virar público amanhã?

  6. 06
    PII nos logs

    Os logs de prompt e resposta guardam PII, e por quanto tempo?

  7. 07
    Teto de gasto

    Qual é o teto de gasto por usuário por dia, e quem recebe o alerta?

A lista de 2025 já tem sucessora para quem roda agentes: em 9 de dezembro de 2025 a OWASP publicou o Top 10 para Aplicações Agênticas, de ASI01 (Agent Goal Hijack) a ASI10 (Rogue Agents). Se o seu produto planeja, guarda memória e chama ferramenta sozinho, leia as duas. Se ele só responde perguntas, os cinco itens acima já cobrem o seu risco real.

O que fazer amanhãComece por LLM06: dê a cada ferramenta do modelo escopo mínimo, credencial própria e confirmação humana para toda ação destrutiva. São 2 a 3 dias de trabalho e é o que separa o seu time do incidente do Replit.

Fontes desta análise

O preço do vazamentoUS$ 5

foi o custo do domínio expirado que continuava na allowlist do CSP e permitiu exfiltrar dados de CRM no ForcedLeak (Agentforce, 2025).

Categoria
AppSec
Data
ABR · 2026
Leitura
8 min
Fontes
  • OWASP Gen AI Security Project · Top 10 for LLM Applications 2025
  • OWASP · Top 10 for Large Language Model Applications (2023, v1.1)
  • arXiv · EchoLeak: the first real-world zero-click prompt injection exploit in a production LLM system
  • Noma Security · ForcedLeak: AI agent risks exposed in Salesforce Agentforce