OWASP Top 10 para aplicativos agentes: o que os desenvolvedores de API precisam mudar
Os 10 principais aplicativos de agente OWASP listam os riscos que suas falhas de segurança de API existentes falham. Cinco correções que os desenvolvedores de API podem lançar esta semana, com código.
Sua API possui limitação de taxa, verificações BOLA e validação de entrada. Um agente de IA ignora todos os três encadeando seis endpoints autorizados em um caminho de escalonamento de privilégios que seu modelo de ameaça nunca considerou. 520 incidentes de uso indevido de ferramentas nos relatórios do início de 2026 confirmam que isso não é teórico.
A OWASP lançou seu Top 10 para Aplicativos Agentes em 2026, elaborado por mais de 100 pesquisadores de segurança de Cisco, Microsoft, Google e a comunidade em geral. A lista tem como alvo uma nova superfície de ameaça: autonomia Agentes de IA que chamam suas APIs, retêm memória e tomam decisões sem aprovação humana.
O original Top 10 de segurança da API OWASP assume um humano clica em um botão e aciona uma solicitação. A lista de agentes pressupõe que uma máquina dispara 50 solicitações em uma cadeia, cada um informado pela resposta anterior, sem nenhum humano no circuito. Mesmas APIs, diferentes perfil do atacante.
Este guia cobre os cinco riscos agentes do OWASP que os desenvolvedores de API podem corrigir na camada de API, com código funcional que você pode enviar esta semana.
A camada de ação agente: por que suas APIs são a superfície de ataque
As APIs evoluíram para o que os pesquisadores de segurança agora chamam de “camada de ação do agente”. Cada ferramenta um O agente de IA usa, seja solicitando inventário, consultando um banco de dados ou enviando uma notificação, mapas para um Chamada de API. O agente não interage com uma UI. Ele lê suas especificações OpenAPI, descobre endpoints e os chama em sequência.
48,9% das organizações não têm visibilidade do tráfego máquina a máquina. Isso significa metade de todas as APIs a infraestrutura não consegue distinguir um usuário humano de um agente autônomo. Se você não pode contar ao diferença, você não pode impor regras diferentes.
O OWASP Agentic Top 10 abrange: agência excessiva, injeção imediata, vulnerabilidades na cadeia de suprimentos, Envenenamento de memória, uso indevido de ferramentas e escalonamento de privilégios, falhas em cascata, tratamento de saída inseguro, Registro insuficiente, vazamento de dados e sandboxing inadequado. Este guia concentra-se nos cinco riscos você corrige na camada API.
1. Agência excessiva: agentes ligando para endpoints que não deveriam
Um agente de suporte ao cliente precisa ler o status do pedido. Você fornece uma chave de API com acesso a todo o seu API. O agente descobre que também pode cancelar pedidos, emitir reembolsos e excluir contas. Excessivo agência significa que o agente tem permissões além de sua tarefa.
Este é o equivalente agente do OWASP API5 (autorização em nível de função quebrada), mas o ataque vetor é diferente. Um invasor humano descobre endpoints administrativos por meio de código-fonte ou adivinhação de URL. Um agente os descobre por meio de sua especificação OpenAPI ou manifesto de ferramenta. O agente não precisa adivinhar; você entregou o menu completo.
Correção: chaves de API com escopo definido e listas de permissões de endpoints
Crie uma chave de API por agente. Cada chave é mapeada para uma lista explícita de endpoints permitidos. Rejeite qualquer solicitação fora dessa lista.
// Scoped API key configuration per agent
const agentPermissions = {
"agent-order-bot": {
allowedEndpoints: [
"GET /api/orders/:id",
"GET /api/orders/:id/status"
],
rateLimit: { requests: 20, windowSeconds: 60 },
maxChainDepth: 3
},
"agent-support-bot": {
allowedEndpoints: [
"GET /api/orders/:id",
"POST /api/tickets",
"GET /api/tickets/:id"
],
rateLimit: { requests: 10, windowSeconds: 60 },
maxChainDepth: 5
}
};
// Middleware: check agent scope before processing
function enforceAgentScope(req, res, next) {
const agentId = req.headers["x-agent-id"];
const permissions = agentPermissions[agentId];
if (!permissions) {
return res.status(403).json({ error: "Unknown agent" });
}
const route = \`\${req.method} \${req.route.path}\
Para verificar se o JWT de um agente carrega o escopo correto antes do processamento, inspecione as declarações de token.
O /v1/jwt/decode endpoint decodifica qualquer JWT sem precisar da chave de assinatura, para que você possa
audite o conteúdo do token durante o desenvolvimento e em seu pipeline de CI:
curl -s -X POST https://api.botoi.com/v1/jwt/decode \\
-H "Content-Type: application/json" \\
-H "X-API-Key: YOUR_API_KEY" \\
-d '{
"token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ2VudC1vcmRlci1ib3QiLCJzY29wZSI6Im9yZGVycy5yZWFkIiwiaWF0IjoxNzQ5NTY0ODAwLCJleHAiOjE3NDk1NjgwMDB9.signature"
}'
Resposta:
{
"success": true,
"data": {
"header": {
"alg": "RS256",
"typ": "JWT"
},
"payload": {
"sub": "agent-order-bot",
"scope": "orders.read",
"iat": 1749564800,
"exp": 1749568000
}
}
}
O scope reivindicação diz orders.read. Se este agente ligar
POST /api/orders/:id/cancel, seu middleware deverá rejeitar a solicitação antes que ela chegue
seu manipulador.
2. Uso indevido de ferramentas e escalonamento de privilégios: agentes encadeando chamadas de API
O uso indevido de ferramentas registrou 520 incidentes em relatórios iniciais, tornando-se a ameaça agente mais comum. O padrão: um agente chama o endpoint A, extrai dados da resposta e usa esses dados para chamar endpoint B de uma forma que o desenvolvedor nunca imaginou.
Exemplo: Um agente de integração Stripe tem acesso a GET /api/customers/:id
e POST /api/refunds. O agente lê o histórico de pagamentos de um cliente, identifica o
transação de maior valor e emite um reembolso para si mesmo. Cada chamada individual passa pela autorização.
A cadeia é a exploração.
Correção: limites de taxa por agente e rastreamento de profundidade da cadeia
A limitação de taxa padrão conta solicitações por IP ou por chave de API. A limitação da taxa de agente adiciona duas dimensões:
- Limites por ferramenta: Limite quantas vezes um único agente pode ligar para um endpoint específico em uma janela
- Limites de profundidade da cadeia: Acompanhe quantas chamadas sequenciais de API um agente faz em uma única sessão e interrompa-as em um limite definido
| Tipo de limite de taxa | O que isso pega | Quem precisa disso |
|---|---|---|
| Por IP | DDoS, preenchimento de credenciais | Cada API |
| Por chave de API | Consumidores individuais abusivos | Cada API |
| Por agente por ferramenta | Agente chamando um endpoint em um loop | APIs consumidas por agentes |
| Profundidade da corrente | Escalonamento de privilégios em várias etapas | APIs consumidas por agentes |
Exigir que os agentes enviem um X-Agent-Session cabeçalho. Acompanhe a contagem de chamadas por sessão. Quando o
contagem excede seu limite, retorne 429 com uma mensagem de erro clara.
3. Registro insuficiente: sem visibilidade das chamadas de API do agente
48,9% das organizações não percebem o tráfego máquina a máquina. Quando um agente explora sua API, você preciso responder: qual agente? Quais pontos finais? Em que ordem? Em que janela de tempo? Logs de acesso padrão mostrar endereços IP e carimbos de data/hora. Eles não mostram a identidade do agente nem sequências de chamadas.
A lista de agentes do OWASP sinaliza o registro insuficiente como um dos principais riscos porque os ataques de agentes parecem tráfego autorizado. Cada solicitação individual passa pela autenticação. A exploração reside no padrão em vários pedidos.
Correção: exigir cabeçalhos de atribuição e cadeias de chamadas de registro
Adicione três cabeçalhos obrigatórios para consumidores de agentes:
X-Agent-ID: identificador exclusivo do agente (vinculado à sua chave API)X-Agent-Session: identificador da tarefa ou conversa atualUser-Agent: estrutura e versão do agente (por exemplo,LangChain/0.3.1)
// Middleware: log every agent request with attribution
function agentAuditLog(req, res, next) {
const logEntry = {
timestamp: new Date().toISOString(),
agentId: req.headers["x-agent-id"] || "unknown",
apiKey: req.headers["x-api-key"]?.slice(-8) || "none",
method: req.method,
path: req.path,
sessionId: req.headers["x-agent-session"] || "none",
ip: req.ip,
userAgent: req.headers["user-agent"]
};
// Structured JSON log for your SIEM
console.log(JSON.stringify(logEntry));
// Track chain depth per session
const session = req.headers["x-agent-session"];
if (session) {
const depth = chainTracker.increment(session);
if (depth > MAX_CHAIN_DEPTH) {
return res.status(429).json({
error: "Agent chain depth exceeded",
maxDepth: MAX_CHAIN_DEPTH,
currentDepth: depth
});
}
}
next();
}
Este middleware registra cada solicitação como JSON estruturado, que alimenta qualquer SIEM ou agregador de log.
Ele também reforça a profundidade da cadeia rastreando chamadas sequenciais por sessão. Quando você investiga um incidente,
você pode reconstruir a cadeia completa filtrando sessionId.
4. Tratamento de saída inseguro: agentes que confiam nas respostas da API sem validação
Um agente chama sua API, recebe uma resposta JSON e a passa para a próxima etapa da cadeia. Se o resposta contém campos inesperados, tipos errados ou conteúdo injetado, o agente propaga o problema a jusante. Este é o equivalente agente do OWASP API10 (consumo inseguro de APIs), amplificado por o fato de os agentes processarem as respostas automaticamente, sem revisão humana.
Exemplo: Um concorrente compromete uma API de preços de terceiros. O agente busca o produto
preços, recebe uma resposta com um manipulado price campo definido como 0,01 e faz um pedido
a esse preço. Nenhum humano jamais viu a resposta.
Correção: valide todas as respostas em um esquema JSON
Comece gerando um esquema a partir de uma resposta válida. O /v1/schema/json-to-jsonschema
endpoint produz um esquema JSON a partir de qualquer JSON de amostra:
curl -s -X POST https://api.botoi.com/v1/schema/json-to-jsonschema \\
-H "Content-Type: application/json" \\
-H "X-API-Key: YOUR_API_KEY" \\
-d '{
"json": {
"orderId": "ord_12345",
"status": "shipped",
"total": 49.99,
"items": [
{ "sku": "WIDGET-A", "quantity": 2 }
]
}
}'
Resposta:
{
"success": true,
"data": {
"schema": {
"type": "object",
"properties": {
"orderId": { "type": "string" },
"status": { "type": "string" },
"total": { "type": "number" },
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"sku": { "type": "string" },
"quantity": { "type": "integer" }
}
}
}
}
}
}
}
Em seguida, valide cada resposta que seu agente recebe em relação a esse esquema. O /v1/schema/validate
endpoint verifica um objeto JSON em relação a qualquer esquema JSON e retorna erros específicos:
curl -s -X POST https://api.botoi.com/v1/schema/validate \\
-H "Content-Type: application/json" \\
-H "X-API-Key: YOUR_API_KEY" \\
-d '{
"schema": {
"type": "object",
"required": ["orderId", "status", "total"],
"properties": {
"orderId": { "type": "string" },
"status": { "type": "string", "enum": ["pending", "shipped", "delivered"] },
"total": { "type": "number", "minimum": 0 }
},
"additionalProperties": false
},
"data": {
"orderId": "ord_12345",
"status": "shipped",
"total": 49.99,
"internalNote": "rush order"
}
}'
Resposta:
{
"success": true,
"data": {
"valid": false,
"errors": [
{
"path": "",
"message": "must NOT have additional properties: internalNote"
}
]
}
}
A validação capturada internalNote, um campo que não pertence à resposta. Se uma API
começar a retornar campos inesperados, seu agente interromperá o processamento em vez de transmitir dados corrompidos downstream.
Aqui está o padrão completo usando o SDK Botoi Node.js:
import Botoi from "botoi";
const botoi = new Botoi({ apiKey: process.env.BOTOI_API_KEY });
// Step 1: generate a schema from a known-good response
const schemaResult = await botoi.schema.jsonToJsonschema({
json: knownGoodResponse
});
const responseSchema = schemaResult.data.schema;
// Step 2: validate every agent-received response against that schema
async function validateAgentResponse(response) {
const validation = await botoi.schema.validate({
schema: responseSchema,
data: response
});
if (!validation.data.valid) {
console.error("Response failed validation:", validation.data.errors);
throw new Error("Untrusted response rejected by schema validation");
}
return response;
}
5. Vulnerabilidades da cadeia de suprimentos: definições de ferramentas comprometidas
Os agentes de IA descobrem ferramentas por meio de servidores MCP, especificações OpenAPI e manifestos de ferramentas. Se um invasor modificar uma definição de ferramenta, o agente chama um endpoint diferente, envia dados para um servidor diferente ou executa com parâmetros diferentes dos pretendidos pelo desenvolvedor.
Exemplo: Você usa um servidor MCP de código aberto que define 30 ferramentas. Um invasor envia
uma solicitação pull que altera o URL da API de uma ferramenta de api.stripe.com para
api.str1pe.com. A alteração passa na revisão do código porque é um único caractere. Seu agente
agora envia dados de pagamento para o servidor do invasor.
Correção: definições de ferramentas de hash e verificação em tempo de execução
Faça hash de cada definição de ferramenta no momento da implantação. Antes que seu agente registre uma ferramenta em tempo de execução, faça hash novamente
e compare. O /v1/hash endpoint gera um hash SHA-256 de qualquer string:
curl -s -X POST https://api.botoi.com/v1/hash \\
-H "Content-Type: application/json" \\
-H "X-API-Key: YOUR_API_KEY" \\
-d '{
"text": "{\\"name\\":\\"get_order_status\\",\\"description\\":\\"Retrieve current order status by order ID\\",\\"parameters\\":{\\"orderId\\":\\"string\\"}}",
"algorithm": "sha256"
}'
Resposta:
{
"success": true,
"data": {
"hash": "a3f2b8c1d4e5f67890abcdef1234567890abcdef1234567890abcdef12345678",
"algorithm": "sha256"
}
}
Aqui está o fluxo de trabalho completo de verificação de integridade usando o Botoi SDK:
import Botoi from "botoi";
import fs from "fs";
const botoi = new Botoi({ apiKey: process.env.BOTOI_API_KEY });
// Hash every tool definition at deploy time
const toolDefs = JSON.parse(fs.readFileSync("./mcp-tools.json", "utf-8"));
const hashes = {};
for (const tool of toolDefs) {
const result = await botoi.hash.sha256({
text: JSON.stringify(tool)
});
hashes[tool.name] = result.data.hash;
}
fs.writeFileSync("./tool-hashes.json", JSON.stringify(hashes, null, 2));
// At runtime, verify before registering any tool
async function verifyToolIntegrity(tool) {
const result = await botoi.hash.sha256({
text: JSON.stringify(tool)
});
const expected = hashes[tool.name];
if (result.data.hash !== expected) {
throw new Error(
\`Tool "\${tool.name}" failed integrity check. \\n\` +
\`Expected: \${expected}\\n\` +
\`Got: \${result.data.hash}\`
);
}
}
Execute a etapa de geração de hash em seu pipeline de CI. Armazene o arquivo hashes junto com sua implantação artefato. Em tempo de execução, cada ferramenta é verificada antes do registro. Um único personagem alterado em qualquer a definição da ferramenta desencadeia uma falha grave.
OWASP Agentic top 10 vs API Security top 10: comparação
As duas listas se complementam. Veja como os cinco riscos de agente são mapeados para a segurança de API mais próxima homólogos e o que muda:
| Risco agente | Risco de segurança de API mais próximo | O que muda para os agentes |
|---|---|---|
| Agência excessiva | Autenticação de função quebrada API5 | Os agentes descobrem todos os endpoints a partir das especificações; chaves de escopo por agente |
| Uso indevido de ferramentas | Consumo de recursos API4 | Agentes encadeiam chamadas para escalar; adicionar limites de profundidade da cadeia |
| Registro insuficiente | Sem equivalente direto | As chamadas do agente parecem tráfego autorizado; adicionar cabeçalhos de atribuição |
| Saída insegura | Consumo inseguro API10 | Os agentes processam respostas sem revisão humana; adicionar validação de esquema |
| Cadeia de mantimentos | Sem equivalente direto | Defs de ferramentas comprometidas redirecionam o tráfego do agente; adicionar hashes de integridade |
Lista de verificação de envio: cinco correções para segurança de API de agente
Cada correção é independente. Escolha um, envie-o e passe para o próximo.
| Consertar | O que fazer | Ponto final do Botoi |
|---|---|---|
| Chaves de API com escopo definido | Uma chave por agente; listar endpoints por chave | /v1/jwt/decode |
| Limites de taxa por agente | Acompanhe a profundidade da cadeia por ferramenta e por sessão | |
| Cabeçalhos de atribuição | Exigir X-Agent-ID, X-Agent-Session; registrar JSON estruturado | |
| Validação de resposta | Gere esquema a partir de uma boa resposta; validar todas as respostas do agente | /v1/schema/validate, /v1/schema/json-to-jsonschema |
| Integridade da ferramenta | Defs da ferramenta Hash na implantação; verificar em tempo de execução | /v1/hash |
O que vem a seguir
O OWASP Top 10 completo para aplicações Agentic está disponível em owasp.org. Cisco, Microsoft e Google anunciaram iniciativas de segurança de agentes no RSAC 2026, então espere ferramentas e padrões para avançar rapidamente durante o resto do ano.
Os cinco riscos restantes da lista (injeção imediata, envenenamento de memória, falhas em cascata, dados Vazamento e sandboxing inadequado) exigem correções na camada de estrutura do agente, não na camada de API. Se você executa uma estrutura de agente, leia o documento OWASP completo. Se você executa APIs, as cinco correções acima são seu ponto de partida.
Comece com chaves de API com escopo definido. Essa única mudança bloqueia a maior parte do uso excessivo de agências e ferramentas cenários. Em seguida, adicione cabeçalhos de atribuição para ver o que seus agentes estão fazendo. O resto decorre de visibilidade.
FAQ
- Como o OWASP Agentic Applications Top 10 difere do OWASP API Security Top 10?
- O API Security Top 10 (2023) aborda riscos de consumidores humanos: autorização quebrada, falhas de autenticação, exposição excessiva de dados. O Agentic Applications Top 10 (2026) aborda os riscos de agentes autônomos de IA que encadeiam chamadas de API, retêm memória entre sessões e tomam decisões sem supervisão humana. Ambas as listas se aplicam a APIs, mas a lista de agentes tem como alvo padrões máquina a máquina que o original nunca previu.
- O que é agência excessiva em aplicações de agente?
- A agência excessiva ocorre quando um agente de IA tem acesso a endpoints de API ou ações além do que sua tarefa exige. Por exemplo, um agente de suporte ao cliente com acesso a pontos de extremidade de cobrança, reembolso e exclusão de conta pode encadear essas chamadas para escalar muito além de responder a perguntas. A correção tem como escopo chaves de API que restringem cada agente aos endpoints exatos de que ele precisa.
- Preciso reconstruir minha API para segurança do agente?
- Não. Você não precisa reconstruir. As cinco correções abordadas neste guia, chaves de API com escopo, limites de taxa por ferramenta, cabeçalhos de atribuição de solicitação, validação de esquema de resposta e verificações de integridade de definição de ferramenta são adições à sua API existente. Você pode enviar cada um de forma independente.
- Por que o uso indevido de ferramentas é a ameaça mais comum aos aplicativos agentes?
- O uso indevido de ferramentas e o escalonamento de privilégios registraram 520 incidentes em relatórios iniciais porque os agentes encadearam chamadas de API de maneiras que os desenvolvedores nunca imaginaram. Um único agente pode chamar um endpoint de leitura, analisar a resposta e, em seguida, chamar um endpoint de gravação usando dados da primeira chamada para escalar privilégios. A maioria das APIs não possui mecanismo para detectar ou bloquear cadeias de várias etapas de uma única sessão de agente.
- Como atribuo solicitações de API a agentes de IA específicos?
- Adicione um cabeçalho X-Agent-ID obrigatório à sua API. Cada agente recebe um identificador exclusivo vinculado à sua chave de API com escopo definido. Registre a chave de API e o ID do agente em cada solicitação. Isso fornece uma trilha de auditoria completa de qual agente chamou qual endpoint, quando e em que sequência.
Comece a construir com botoi
150+ endpoints de API para consultas, processamento de texto, geração de imagens e utilitários para desenvolvedores. Plano gratuito, sem cartão de crédito.