OWASP Top 10 pour les applications agentiques : ce que les développeurs d'API doivent changer
Le top 10 des applications agents OWASP répertorie les risques liés à la sécurité de votre API existante. Cinq correctifs que les développeurs d'API peuvent livrer cette semaine, avec du code.
Votre API dispose d'une limitation de débit, de contrôles BOLA et d'une validation des entrées. Un agent IA contourne les trois en en enchaînant six points de terminaison autorisés dans un chemin d’élévation de privilèges que votre modèle de menace n’a jamais pris en compte. 520 incidents d'utilisation abusive d'outils signalés début 2026 confirment que ce n'est pas théorique.
L'OWASP a publié son Top 10 des applications agentiques en 2026, construit par plus de 100 chercheurs en sécurité de Cisco, Microsoft, Google et la communauté au sens large. La liste cible une nouvelle surface de menace : les autonomes Des agents d'IA qui appellent vos API, conservent la mémoire et prennent des décisions sans l'approbation humaine.
L'original Top 10 de la sécurité des API OWASP suppose un humain clique sur un bouton et déclenche une requête. La liste agent suppose qu'une machine déclenche 50 requêtes dans une chaîne, chacun étant informé par la réponse précédente, sans aucun humain dans la boucle. Mêmes API, différentes profil de l’attaquant.
Ce guide couvre les cinq risques agents OWASP que les développeurs d'API peuvent corriger au niveau de la couche API, avec code fonctionnel que vous pouvez expédier cette semaine.
La couche d'action agent : pourquoi vos API sont la surface d'attaque
Les API ont évolué vers ce que les chercheurs en sécurité appellent désormais la « couche d'action agent ». Chaque outil et L'agent IA utilise, qu'il commande un inventaire, interroge une base de données ou envoie une notification, mappe à un Appel API. L'agent n'interagit pas avec une interface utilisateur. Il lit votre spécification OpenAPI, découvre les points de terminaison et les appelle dans l’ordre.
48,9 % des organisations n'ont aucune visibilité sur le trafic machine-to-machine. Cela signifie la moitié de toutes les API L’infrastructure ne peut pas distinguer un utilisateur humain d’un agent autonome. Si tu ne peux pas dire au différence, vous ne pouvez pas appliquer des règles différentes.
Le Top 10 agentique de l'OWASP couvre : l'agence excessive, l'injection rapide, les vulnérabilités de la chaîne d'approvisionnement, Empoisonnement de la mémoire, utilisation abusive des outils et élévation des privilèges, pannes en cascade, gestion des sorties non sécurisée, Journalisation insuffisante, fuite de données et sandboxing inadéquat. Ce guide se concentre sur les cinq risques vous corrigez au niveau de la couche API.
1. Agence excessive : les agents appellent des points de terminaison qu'ils ne devraient pas appeler
Un agent du support client doit lire le statut de la commande. Vous lui donnez une clé API avec accès à l'intégralité de votre API. L'agent découvre qu'il peut également annuler des commandes, émettre des remboursements et supprimer des comptes. Excessif agence signifie que l'agent dispose d'autorisations au-delà de sa tâche.
Il s'agit de l'équivalent agent de l'OWASP API5 (autorisation au niveau des fonctions interrompue), mais l'attaque le vecteur est différent. Un attaquant humain découvre les points de terminaison de l'administrateur via le code source ou la supposition d'URL. Un agent les découvre via votre spécification OpenAPI ou votre manifeste d'outil. L'agent n'a pas besoin de deviner ; vous lui avez remis le menu complet.
Correctif : clés API limitées et listes autorisées de points de terminaison
Créez une clé API par agent. Chaque clé correspond à une liste explicite de points de terminaison autorisés. Rejeter tout demande en dehors de cette liste.
// 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}\
Pour vérifier que le JWT d'un agent a la portée correcte avant le traitement, inspectez les revendications de jeton.
Le /v1/jwt/decode le point de terminaison décode n'importe quel JWT sans avoir besoin de la clé de signature, vous pouvez donc
auditez le contenu des jetons pendant le développement et dans votre pipeline 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"
}'
Réponse:
{
"success": true,
"data": {
"header": {
"alg": "RS256",
"typ": "JWT"
},
"payload": {
"sub": "agent-order-bot",
"scope": "orders.read",
"iat": 1749564800,
"exp": 1749568000
}
}
}
La scope la revendication dit orders.read. Si cet agent appelle
POST /api/orders/:id/cancel, votre middleware doit rejeter la demande avant qu'elle n'atteigne
votre gestionnaire.
2. Utilisation abusive des outils et élévation des privilèges : les agents enchaînent les appels d'API
L'utilisation abusive d'outils a enregistré 520 incidents lors des premiers rapports, ce qui en fait la menace agent la plus courante. Le modèle : un agent appelle le point de terminaison A, extrait les données de la réponse, puis utilise ces données pour appeler point final B d’une manière que le développeur n’avait jamais anticipée.
Exemple: Un agent d'intégration Stripe a accès à GET /api/customers/:id
et POST /api/refunds. L'agent lit l'historique de paiement d'un client, identifie le
transaction de la plus grande valeur et s'émet un remboursement. Chaque appel individuel passe une autorisation.
La chaîne est l'exploit.
Correctif : limites de taux par agent et suivi de la profondeur de la chaîne
La limitation de débit standard compte les requêtes par IP ou par clé API. La limitation de débit agent ajoute deux dimensions :
- Limites par outil : Limiter le nombre de fois qu'un seul agent peut appeler un point de terminaison spécifique dans une fenêtre
- Limites de profondeur de chaîne : Suivez le nombre d'appels API séquentiels effectués par un agent au cours d'une seule session et coupez-les à un seuil défini.
| Type de limite de débit | Ce qu'il attrape | Qui en a besoin |
|---|---|---|
| Par IP | DDoS, credential stuffing | Chaque API |
| Par clé API | Consommateurs individuels abusifs | Chaque API |
| Par agent et par outil | Agent appelant un point de terminaison dans une boucle | API consommées par les agents |
| Profondeur de la chaîne | Élévation de privilèges en plusieurs étapes | API consommées par les agents |
Exiger des agents qu'ils envoient un X-Agent-Session en-tête. Suivez le nombre d'appels par session. Quand le
le nombre dépasse votre seuil, renvoyez un 429 avec un message d'erreur clair.
3. Journalisation insuffisante : aucune visibilité sur les appels API des agents
48,9 % des organisations ignorent le trafic de machine à machine. Lorsqu'un agent exploite votre API, vous il faut répondre : quel agent ? Quels points de terminaison ? Dans quel ordre ? Sur quelle fenêtre horaire ? Journaux d'accès standard afficher les adresses IP et les horodatages. Ils ne montrent pas l’identité de l’agent ni les séquences d’appels.
La liste des agents OWASP signale une journalisation insuffisante comme un risque majeur, car les attaques d'agents ressemblent à trafic autorisé. Chaque demande individuelle est authentifiée. L'exploit réside dans le modèle à travers plusieurs demandes.
Correctif : nécessiter des en-têtes d'attribution et des chaînes d'appels de journaux
Ajoutez trois en-têtes obligatoires pour les consommateurs d'agent :
X-Agent-ID: identifiant unique de l'agent (lié à sa clé API)X-Agent-Session: identifiant de la tâche ou de la conversation en coursUser-Agent: structure et version de l'agent (par exemple,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();
}
Ce middleware enregistre chaque requête au format JSON structuré, qui alimente n'importe quel SIEM ou agrégateur de journaux.
Il renforce également la profondeur de la chaîne en suivant les appels séquentiels par session. Lorsque vous enquêtez sur un incident,
vous pouvez reconstruire la chaîne complète en filtrant sur sessionId.
4. Gestion des sorties non sécurisée : les agents font confiance aux réponses de l'API sans validation
Un agent appelle votre API, reçoit une réponse JSON et la transmet à l'étape suivante de sa chaîne. Si le La réponse contient des champs inattendus, des types incorrects ou du contenu injecté, l'agent propage le problème en aval. C'est l'équivalent agent de l'OWASP API10 (consommation non sécurisée d'API), amplifié par le fait que les agents traitent les réponses automatiquement sans examen humain.
Exemple: Un concurrent compromet une API de tarification tierce. L'agent récupère le produit
prix, reçoit une réponse avec un message manipulé price champ réglé à 0,01 et passe une commande
à ce prix là. Aucun humain n’a jamais vu la réponse.
Correctif : validez chaque réponse par rapport à un schéma JSON
Commencez par générer un schéma à partir d’une réponse connue. Le /v1/schema/json-to-jsonschema
le point de terminaison produit un schéma JSON à partir de n'importe quel exemple de JSON :
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 }
]
}
}'
Réponse:
{
"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" }
}
}
}
}
}
}
}
Validez ensuite chaque réponse que votre agent reçoit par rapport à ce schéma. Le /v1/schema/validate
le point de terminaison vérifie un objet JSON par rapport à n'importe quel schéma JSON et renvoie des erreurs spécifiques :
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"
}
}'
Réponse:
{
"success": true,
"data": {
"valid": false,
"errors": [
{
"path": "",
"message": "must NOT have additional properties: internalNote"
}
]
}
}
La validation capturée internalNote, un champ qui n'appartient pas à la réponse. Si une API
commence à renvoyer des champs inattendus, votre agent arrête le traitement au lieu de transmettre des données corrompues en aval.
Voici le modèle complet utilisant le 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. Vulnérabilités de la chaîne d'approvisionnement : définitions d'outils compromises
Les agents IA découvrent des outils via les serveurs MCP, les spécifications OpenAPI et les manifestes d'outils. Si un attaquant modifie une définition d'outil, l'agent appelle un autre point de terminaison, envoie des données à un autre serveur ou exécute avec des paramètres différents de ceux prévus par le développeur.
Exemple: Vous utilisez un serveur MCP open source qui définit 30 outils. Un attaquant soumet
une pull request qui modifie l'URL de l'API d'un outil de api.stripe.com à
api.str1pe.com. Le changement réussit la révision du code car il s’agit d’un seul caractère. Votre mandataire
envoie désormais les données de paiement au serveur de l'attaquant.
Correctif : hacher les définitions des outils et les vérifier au moment de l'exécution
Hachez chaque définition d'outil au moment du déploiement. Avant que votre agent n'enregistre un outil au moment de l'exécution, hachez-le à nouveau
et comparer. Le /v1/hash endpoint generates a SHA-256 hash of any 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"
}'
Réponse:
{
"success": true,
"data": {
"hash": "a3f2b8c1d4e5f67890abcdef1234567890abcdef1234567890abcdef12345678",
"algorithm": "sha256"
}
}
Voici le flux de travail complet de vérification de l'intégrité à l'aide du SDK Botoi :
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}\`
);
}
}
Exécutez l'étape de génération de hachage dans votre pipeline CI. Stockez le fichier de hachage avec votre déploiement artefact. Au moment de l'exécution, chaque outil est vérifié avant l'enregistrement. Un seul personnage modifié dans n'importe quel la définition de l'outil déclenche un échec matériel.
Top 10 des agents OWASP et top 10 de la sécurité API : comparaison
Les deux listes se complètent. Voici comment les cinq risques agents correspondent à leur sécurité API la plus proche homologues et quels changements:
| Risque agent | Risque de sécurité API le plus proche | Quels changements pour les agents |
|---|---|---|
| Agence excessive | Authentification de fonction cassée API5 | Les agents découvrent tous les points de terminaison à partir des spécifications ; Clés de portée par agent |
| Utilisation abusive des outils | Consommation des ressources API4 | Les agents enchaînent les appels pour les faire remonter ; ajouter des limites de profondeur de chaîne |
| Journalisation insuffisante | Pas d'équivalent direct | Les appels des agents ressemblent à du trafic autorisé ; ajouter des en-têtes d'attribution |
| Sortie non sécurisée | Consommation dangereuse API10 | Les agents traitent les réponses sans examen humain ; ajouter une validation de schéma |
| Chaîne d'approvisionnement | Pas d'équivalent direct | Les définitions d'outils compromis redirigent le trafic des agents ; ajouter des hachages d'intégrité |
Liste de contrôle des navires : cinq correctifs pour la sécurité des API agentiques
Chaque correctif est indépendant. Choisissez-en un, expédiez-le, passez au suivant.
| Réparer | Ce qu'il faut faire | Botoi endpoint |
|---|---|---|
| Clés API étendues | Une clé par agent ; Points de terminaison de la liste autorisée par clé | /v1/jwt/decode |
| Limites de tarifs par agent | Suivez la profondeur de la chaîne par outil et par session | |
| En-têtes d'attribution | Exiger X-Agent-ID, X-Agent-Session ; journal JSON structuré | |
| Validation de la réponse | Générer un schéma à partir d'une bonne réponse ; valider toutes les réponses des agents | /v1/schema/validate, /v1/schema/json-to-jsonschema |
| Intégrité de l'outil | Définitions de l'outil de hachage lors du déploiement ; vérifier au moment de l'exécution | /v1/hash |
Ce qui vient ensuite
Le Top 10 OWASP complet pour les applications agentiques est disponible sur owasp.org. Cisco, Microsoft et Google ont tous annoncé des initiatives de sécurité agent lors du RSAC 2026, alors attendez-vous des outils et des normes pour avancer rapidement tout au long de l'année.
Les cinq risques restants sur la liste (injection rapide, empoisonnement de la mémoire, pannes en cascade, données fuites et sandboxing inadéquat) nécessitent des correctifs au niveau de la couche de structure de l'agent, et non de la couche API. Si vous exécutez un framework d'agent, lisez le document OWASP complet. Si vous exécutez des API, les cinq correctifs ci-dessus sont votre point de départ.
Commencez par des clés API limitées. Ce seul changement bloque la majorité des utilisations abusives des agences et des outils. scénarios. Ajoutez ensuite des en-têtes d’attribution afin que vous puissiez voir ce que font vos agents. Le reste découle de visibilité.
FAQ
- En quoi le Top 10 des applications agentiques OWASP diffère-t-il du Top 10 de la sécurité des API OWASP ?
- L'API Security Top 10 (2023) aborde les risques liés aux consommateurs humains : autorisation non valide, failles d'authentification, exposition excessive des données. Le Top 10 des applications agentiques (2026) aborde les risques liés aux agents d'IA autonomes qui enchaînent les appels d'API, conservent la mémoire entre les sessions et prennent des décisions sans surveillance humaine. Les deux listes s'appliquent aux API, mais la liste agent cible des modèles machine à machine que l'original n'avait jamais anticipés.
- Qu’est-ce que l’agence excessive dans les applications agentiques ?
- Une agence excessive se produit lorsqu'un agent IA a accès aux points de terminaison de l'API ou à des actions au-delà de ce que sa tâche nécessite. Par exemple, un agent du support client ayant accès aux points de terminaison de facturation, de remboursement et de suppression de compte peut enchaîner ces appels pour aller bien au-delà de la réponse aux questions. Le correctif concerne des clés API limitées qui limitent chaque agent aux points de terminaison exacts dont il a besoin.
- Dois-je reconstruire mon API pour la sécurité agent ?
- Non, vous n’avez pas besoin de reconstruire. Les cinq correctifs abordés dans ce guide, les clés API étendues, les limites de débit par outil, les en-têtes d'attribution de requête, la validation du schéma de réponse et les contrôles d'intégrité de la définition de l'outil, sont des ajouts à votre API existante. Vous pouvez expédier chacun indépendamment.
- Pourquoi l’utilisation abusive d’outils est-elle la menace d’application agentique la plus courante ?
- L'utilisation abusive des outils et l'élévation des privilèges ont enregistré 520 incidents dans les premiers rapports, car les agents enchaînent les appels d'API d'une manière que les développeurs n'avaient jamais prévue. Un seul agent peut appeler un point de terminaison de lecture, analyser la réponse, puis appeler un point de terminaison d'écriture en utilisant les données du premier appel pour élever ses privilèges. La plupart des API ne disposent d'aucun mécanisme permettant de détecter ou de bloquer les chaînes à plusieurs étapes à partir d'une session d'agent unique.
- Comment attribuer des requêtes API à des agents IA spécifiques ?
- Ajoutez un en-tête X-Agent-ID requis à votre API. Chaque agent obtient un identifiant unique lié à sa clé API étendue. Enregistrez à la fois la clé API et l'ID de l'agent à chaque demande. Cela vous donne une piste d'audit complète indiquant quel agent a appelé quel point de terminaison, quand et dans quel ordre.
Commencez a construire avec botoi
150+ endpoints API pour la recherche, le traitement de texte, la generation d'images et les utilitaires pour developpeurs. Offre gratuite, sans carte bancaire.