FlawOpen

flawopen.com/Incidents/deadbugz-mcp-delayed-metadata-supply-chain-campaign-august-2026

● Pillar Security / MCP ecosystem · CWE-829 (editorial mapping; no CVE assigned) · 2026-08-10 · Moyenne
Recherche · FlawOpen

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]

💡 Explication en Langage Simple (ELI5)

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]
CWE-829
Classification éditoriale : une fonctionnalité vient d’un serveur hors de la sphère de contrôle fiable du client. Aucun CVE ni score CVSS n’a été attribué.[1], [3]

Correspondances de référentiels

  • Référence CWE pour la faiblesse décrite dans ce guide : CWE-829

Chronologie de l'Incident

2026-08-10

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]

2026-08-12

Pillar a publié son analyse technique du changement de métadonnées après trois appels et des indicateurs.[1]

2026-10-08

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

Étape 1

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]

Étape 2

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]

Étape 3

L’usage normal franchit le seuil

Le serveur compte les appels par client. Après trois appels, les réponses suivantes à tools/list et prompts/get changent.[1], [5]

Étape 4

L’agent reçoit des instructions non fiables

Ces instructions tentent d’orienter l’agent vers des informations locales sensibles et de dissimuler l’activité. Cette description ne prouve pas une compromission.[1], [3]

Étape 5

L’approbation doit porter sur les métadonnées exactes

Le client doit calculer une empreinte des définitions approuvées et suspendre l’usage pour examen lorsque le serveur en présente d’autres. Les permissions de fichiers, identifiants et réseau doivent être imposées indépendamment.[1], [4], [5]

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]

IMPLÉMENTATION VULNÉRABLE
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()
PATCH SÉCURISÉ ET ROBUSTE
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

Sources