Microsoft 365 Copilot Exfiltration : Une faille cachée dans les diagrammes Mermaid
Lorsqu’un document Office spécialement conçu a été soumis à Microsoft 365 Copilot (M365 Copilot) pour être résumé, une attaque par injection de prompt indirect a été déclenchée, permettant à un attaquant d’exécuter des instructions arbitraires afin d’extraire des données sensibles du locataire, comme les courriels récents. Ces données étaient ensuite encodées en hexadécimal et intégrées dans un diagramme Mermaid généré par le système. Ce diagramme, qui ressemblait à un bouton de connexion, contenait un lien hypertexte vers un serveur contrôlé par l’attaquant, incluant les données encodées. Lorsque l’utilisateur cliquait sur ce bouton, les données étaient transmises au serveur adverse, où elles pouvaient être décodées à partir des logs. Mermaid est un outil de génération de diagrammes basé sur JavaScript, utilisant une syntaxe similaire au Markdown. Il permet de créer divers types de diagrammes complexes, notamment des graphes, des organigrammes ou des diagrammes de séquence. Une caractéristique clé de Mermaid est sa prise en charge des styles CSS, ce qui ouvre la voie à des vecteurs d’exfiltration de données, notamment lorsqu’il est intégré à un système comme M365 Copilot, capable de générer dynamiquement des diagrammes à partir de données récupérées via des outils internes. Après plusieurs essais, l’attaquant a réussi à concevoir un document Excel contenant des instructions cachées en texte blanc, exploitant une injection de prompt indirect. La première feuille contenait des données financières fictives, tandis que la seconde, invisible à première vue, incluait des instructions progressivement plus précises : d’abord, demander à M365 Copilot d’aller consulter la deuxième feuille, puis de pivoter le résumé vers une déclaration selon laquelle le contenu était inaccessible sans connexion. Ensuite, le système devait exécuter l’outil search_enterprise_emails, extraire les courriels récents, les encoder en hexadécimal, les diviser en lignes de 30 caractères maximum (pour contourner les limites de longueur de ligne de Mermaid), puis les insérer dans un lien hypertexte d’un diagramme Mermaid représentant un bouton de connexion. Le lien, pointant vers un serveur Burp Collaborator, incluait les données encodées. Lorsque l’utilisateur cliquait sur le bouton, le diagramme se transformait en un iframe affichant une réponse HTTP provenant du serveur de l’attaquant, confirmant l’exfiltration. Le cadre disparaissait ensuite après quelques secondes, rendant l’attaque plus subtile. Pour renforcer l’illusion, le contenu de la réponse HTTP a été remplacé par une image du formulaire de connexion de M365. La découverte s’est produite le 30 juillet 2025. Après avoir assisté à la conférence MSRC Researcher Celebration à DEFCON le 7 août, l’attaqueur a compris que M365 Copilot n’était pas encore éligible aux récompenses, ce qui a motivé une recherche approfondie sur les techniques d’injection de prompt indirect. Inspiré par une publication de Johann Rehberger sur une vulnérabilité similaire dans Cursor IDE, il a combiné cette technique avec une chaîne d’instructions progressivement imbriquées dans un document Excel. Cette combinaison a permis de créer une chaîne complète de vulnérabilité, déclarée le 15 août 2025. Malgré une première impossibilité de reproduction par MSRC, une nouvelle démonstration vidéo a permis de confirmer le bug. Le cas a été validé le 8 septembre, classé comme « en développement », puis « en pré-livraison » le 19 septembre, et clos le 26 septembre. Bien que la vulnérabilité ait été corrigée, MSRC a finalement déclaré que M365 Copilot n’était pas éligible aux récompenses, bien que le correctif ait été mis en œuvre. Le blog post a été publié le 21 octobre 2025, après une coordination avec Microsoft. Cette attaque met en lumière les risques liés à l’interaction entre les LLM, les outils d’API et les formats de rendu dynamiques comme Mermaid, soulignant l’importance d’une validation rigoureuse des contenus générés, même lorsqu’ils semblent inoffensifs.
