Cinq attaques sur x402 : quand les agents IA paient, les coutures inter-couches fuient
Un papier du 12 mai 2026 casse formellement x402, le protocole de paiement agentique fondé sur HTTP 402. Cinq attaques sur le règlement, le rejeu, la couche web et la découverte — un paiement rejoué a produit 248 accès sur un endpoint en production.
De quoi s’agit-il ?
Le 12 mai 2026, des chercheurs de l’Ohio State University, du CSIRO et de l’Université de Manchester ont publié Five Attacks on x402 Agentic Payment Protocol (arXiv:2605.11781). x402 est un standard ouvert — porté par Coinbase — qui ressuscite le code de statut HTTP 402 Payment Required, longtemps inutilisé, pour permettre à des agents logiciels de payer des API et des contenus à la volée : le serveur répond à une requête par un 402, l’agent joint un en-tête X-PAYMENT, un facilitateur hors chaîne vérifie et règle le paiement on-chain, puis la ressource est délivrée.
La thèse du papier est structurelle. x402 couple une autorisation HTTP synchrone à un règlement blockchain asynchrone, et cette couture — absente aussi bien des paiements web classiques que des paiements purement on-chain — est l’endroit où le protocole fuit. Les auteurs formalisent quatre propriétés de sécurité (solidité de l’autorisation, correspondance paiement–service, résistance au rejeu et k-atomicité du facilitateur), puis montrent que x402 les viole à la fois par conception et dans les implémentations déployées.
Comment ça marche
Le travail caractérise cinq attaques réparties en quatre classes. Aucune ne casse la cryptographie ; elles exploitent les écarts entre la couche HTTP et la chaîne.
Classe Attaque Défaillance centrale
---------------------------- -------------- -------------------------------------------
I Incohérence de règlement I-A Revert-grant ressource accordée avant finalité du paiement
I-B Préemption règlement non lié à l'appelant, consommé par
un observateur avant le vrai facilitateur
II Rejeu / idempotence II charge X-PAYMENT réutilisable -> accès multiples
III Couche web III fuite de cache CDN du contenu payant ; ambiguïté
proxy / en-tête
IV Sélection de serveur IV la couche de découverte oriente l'agent vers un
endpoint payant malveillant
Le résultat sur le rejeu est le plus parlant : quand un serveur délivre la ressource avant d’enregistrer atomiquement une identité de paiement, une charge X-PAYMENT valide peut être réutilisée, et sur un endpoint en production les auteurs ont observé 248 accès à partir d’un seul paiement. Les incohérences de règlement permettent à un agent de recevoir une ressource jamais payée in fine (revert-grant reproduit jusqu’à 5,18 % même avec des facilitateurs honnêtes). À la couche de découverte — avant tout paiement — manipuler les métadonnées d’un serveur a biaisé la sélection de l’agent vers un endpoint adverse jusqu’à 71,8 % des cas, et un flooding Sybil à cinq identités a atteint 60,2 %.
Aucune charge reproductible n’est reprise ici ; la référence canonique reste le papier. Les résultats ont été validés sur un banc d’essai de plus de 25 000 requêtes de paiement sur 48 configurations (Hardhat/Anvil et Base Sepolia) plus quatre endpoints en production, avec des intervalles de confiance de Wilson à 95 %.
Pourquoi c’est important
Le commerce agentique passe de la démo au déploiement, et x402 en est l’un des rails porteurs. La surface d’attaque est inédite parce que la frontière de confiance traverse plusieurs protocoles : l’en-tête X-PAYMENT se comporte comme une capacité au porteur que l’infrastructure HTTP ordinaire — proxys, CDN, caches — rejouera ou stockera volontiers, tandis que l’argent ne se règle que quelques secondes plus tard sur une chaîne que la couche web ne peut pas annuler. Une mauvaise configuration de cache devient un contournement de paiement ; une clé d’idempotence manquante devient du service gratuit à grande échelle.
Un audit multi-implémentations de trois SDK open source et quatre endpoints en production a révélé 11 vulnérabilités, dont un comportement « accorder avant régler » dans un SDK Python tiers, l’absence de liaison à l’identifiant de ressource, un règlement « fire-and-forget » et des en-têtes Cache-Control absents. Ce n’est pas un modèle théorique : c’est du code en production. Les travaux du même trimestre — Hardening x402 sur la fuite de métadonnées en clair et le SoK sur les agents autonomes dans le commerce agentique — vont dans le même sens : la couche de paiement fait désormais partie intégrante du modèle de menace des agents.
Défenses
Il n’y a pas de correctif unique — ce sont des classes au niveau du protocole et du déploiement. Les mitigations proposées par le papier, et le durcissement standard pour quiconque exploite x402 :
-
Rendre le règlement atomique avec l’octroi (règlement en deux phases). Ne délivrez pas la ressource sous exécution optimiste. Liez l’appelant on-chain, le facilitateur, la ressource et la décision d’accès en un seul objet atomique, afin qu’un revert ne laisse pas un état accordé-mais-impayé.
-
Imposer une idempotence obligatoire avec liaison à la ressource. Enregistrez une identité de paiement avant de délivrer quoi que ce soit, et liez chaque paiement à un identifiant de ressource précis. Cela ferme la classe rejeu/idempotence qui a produit 248 accès pour un paiement.
-
Traiter l’en-tête
X-PAYMENTcomme un secret au porteur dans votre stack web. Posez unCache-Control: no-storeexplicite sur les réponses payantes, auditez le comportement des CDN et proxys contre les fuites de cache, et appliquez un encodage canonique pour qu’aucune ambiguïté en-tête/proxy ne soit exploitable par différentiel de parseurs. -
Durcir la découverte côté agent. Ne laissez pas des métadonnées non vérifiées ou le volume d’enregistrements piloter la sélection d’endpoint. Utilisez réputation, enregistrements signés et résistance Sybil dans la découverte de type Bazaar, pour qu’un agent ne puisse pas être orienté vers un serveur payant malveillant avant même de payer.
-
Minimiser et protéger les métadonnées de paiement. D’après Hardening x402, des champs comme
resource_url,descriptionetreasoncirculent en clair vers le facilitateur — filtrez ou caviardez les données personnelles avant exécution. -
Auditer votre SDK, pas seulement la spécification. La plupart des 11 failles étaient des bugs d’implémentation. Testez l’octroi-avant-règlement, l’idempotence manquante et l’absence d’en-têtes de cache dans la bibliothèque x402 que vous déployez.
Statut
| Élément | Référence | Date | Notes |
|---|---|---|---|
| Five Attacks on x402 Agentic Payment Protocol | arXiv:2605.11781 | 2026-05-12 | Cinq attaques / quatre classes ; modèle formel + banc d’essai |
| Rejeu produisant des accès multiples | Même papier | 2026-05-12 | 248 accès à partir d’un paiement, endpoint en production |
| Biais de la couche découverte | Même papier | 2026-05-12 | 71,8 % par manipulation de métadonnées ; 60,2 % flood Sybil à 5 |
| Audit SDK / endpoints | Même papier | 2026-05-12 | 11 vulnérabilités sur 3 SDK + 4 endpoints |
| Divulgation responsable | HackerOne #3679163/#3679179/#3679220 | 2026 | Signalé en privé à Coinbase avant publication |
| Hardening x402 (métadonnées/PII) | arXiv:2604.11430 | 2026-04 | Fuite de métadonnées en clair et filtrage pré-exécution |
La leçon dépasse un seul protocole : quand l’autorisation d’un agent vit dans HTTP mais que son argent vit sur une chaîne, la sécurité ne tient que si les deux sont liés atomiquement. Tout ce qu’exploitent ces attaques se loge dans l’écart entre les deux.