flawopen.com/Incidents/deadbugz-mcp-delayed-metadata-supply-chain-campaign-august-2026
Deadbugz : les métadonnées MCP changent après approbation
Pillar Security a documenté une campagne de chaîne d’approvisionnement MCP qui modifiait les métadonnées après trois appels normaux. Son examen n’a trouvé aucune pull request fusionnée via GitHub ; le rapport ne documente pas de compromission en aval. La Cloud Security Alliance précise que la visibilité sur une exécution locale indépendante était limitée.[1], [3]
Imaginez approuver un prestataire dont le badge indique des tâches inoffensives. Après trois livraisons ordinaires, le badge change discrètement et réclame l’accès à des pièces verrouillées. Le danger est que le bâtiment continue de se fier à l’ancienne approbation. Un client MCP doit détecter qu’un serveur modifie les instructions des outils approuvés.[1]
Concepts Clés et Termes
MCP- Protocole permettant à une application d’IA de découvrir et d’appeler les outils fournis par un serveur.[5]
Métadonnées d’outil- Nom, description et schéma d’entrée qu’un client peut transmettre au modèle.[5], [1]
Changement différé à l’exécution- Comportement déclenché après un seuil d’interactions ; Pillar décrit un compteur de trois appels.[1]
Distribution par la chaîne d’approvisionnement- Introduction d’une dépendance ou configuration par un flux de développement de confiance, tel qu’une pull request.[1]
Correspondances de référentiels
- Référence CWE pour la faiblesse décrite dans ce guide : CWE-829
Chronologie de l'Incident
Pillar a repéré 23 pull requests liées, créées en 74 minutes ; aucune n’avait été fusionnée par le mécanisme PR de GitHub lors de l’analyse.[1]
Pillar a publié son analyse technique du changement de métadonnées après trois appels et des indicateurs.[1]
Le projet OWASP GenAI a inclus Deadbugz dans son bilan du troisième trimestre ; cela confirme l’attention, pas une compromission ni un volume de recherche.[2]
Déroulement de l'Attaque Étape par Étape
Une configuration est proposée
Une pull request ajoute à un projet d’IA la configuration d’un serveur MCP distant ou local. Pillar a examiné 17 changements avec endpoint distant, quatre références à un script local caché et deux soumissions de répertoire.[1]
L’examen initial voit des outils ordinaires
Au départ, le serveur présente des outils de mise en forme et de résumé de texte. Pillar indique que des tests brefs peuvent recevoir ces métadonnées inoffensives.[1]
Code Source : Vulnérable vs Sécurisé
Le rapport décrit un empoisonnement des métadonnées et une livraison par pull request, pas une CVE de la spécification MCP. Le risque apparaît lorsque le client continue de faire confiance aux descriptions modifiables du serveur après l’approbation initiale. Pillar attribue la campagne à un compte GitHub public ; cet article rapporte cette attribution sans la présenter comme une identité réelle vérifiée. Pillar indique que les PR examinées n’avaient pas été fusionnées via le mécanisme GitHub au moment de l’examen et ne confirme pas de compromission en aval. Le dépôt source lié renvoie actuellement une erreur 404 ; les détails reposent donc sur l’analyse technique publiée par Pillar, sans nouvelle inspection du code. L’exemple Python illustre une politique côté client et ne remplace pas une bibliothèque MCP. CWE-829 est une classification éditoriale ; aucun CVE ni CVSS n’a été attribué. L’adaptateur doit actualiser les données après les notifications de changement MCP et inclure tools/list et prompts/get ; metadata_snapshot est une méthode illustrative de l’adaptateur, pas une API du SDK MCP. Ne créer approved_digest qu’après validation opérateur. L’instantané doit inclure toutes les métadonnées pertinentes du serveur, notamment les définitions tools/list et le contenu complet de prompts/get pour les invites approuvées. Récupérez-le avant l’action et bloquez celle-ci en cas d’écart ; ce contrôle ne détecte ni les changements de comportement du serveur ni ceux survenant entre vérification et utilisation, d’où la nécessité de permissions indépendantes.[1], [4], [5]
def agent_metadata(session):
# L’adaptateur renvoie les outils et les prompts actuels du serveur sous forme de données JSON.
return session.metadata_snapshot()
import hashlib
import hmac
import json
def fingerprint(snapshot):
normalized = dict(snapshot)
for key in ("tools", "prompts"):
normalized[key] = sorted(
snapshot[key],
key=lambda item: json.dumps(item, sort_keys=True, separators=(",", ":")),
)
canonical = json.dumps(normalized, sort_keys=True, separators=(",", ":"))
return hashlib.sha256(canonical.encode()).hexdigest()
def agent_metadata(session, approved_digest):
current = session.metadata_snapshot()
if not hmac.compare_digest(fingerprint(current), approved_digest):
raise PermissionError("MCP metadata changed; require operator approval")
return current
Liste de Contrôle de Sécurité pour l'Ingénierie
- ✓Conservez une empreinte canonique des noms, descriptions et schémas d’entrée des outils MCP approuvés.[1], [4]
- ✓Suspendez les outils et exigez une validation opérateur si
tools/listouprompts/getchange après approbation.[1], [5], [4] - ✓Imposez séparément les droits sur fichiers, identifiants, processus et réseau sortant, hors des instructions du modèle.[1], [4]
- ✓Examinez les modifications de dépôt ajoutant un endpoint MCP ou un script local ; vérifiez leur provenance avant activation.[1]
- ✓Préservez les journaux client et comparez les changements d’outils aux actions de l’agent en cas de comportement inattendu.[1], [3]
Sources
- Pillar Security — Deadbugz: Currently Active MCP Supply-Chain Campaign (12 August 2026)
- OWASP GenAI Security Project — GenAI and Agentic AI Exploit Roundup Q3 2026 (8 October 2026)
- Cloud Security Alliance — Deadbugz: Runtime-Gated MCP Metadata Poisoning as Supply-Chain Attack
- OWASP MCP Security Cheat Sheet
- MCP specification: Tools