· Security musings

Catégories

Tags

🔍 Licence d'Utilisation 🔍

Sauf mention contraire, le contenu de ce blog est sous licence CC BY-NC-ND 4.0.

© 2025 à 2042 Sébastien Gioria. Tous droits réservés.

⏱️
Temps de lecture estimé
~7 minutes

Un document Word qui se comporte comme un ver.Le résumé tient en une phrase : ouvrez le fichier piégé dans Copilot, et l’assistant recopie de lui-même les instructions cachées dans chaque nouveau document qu’il produit. Aucune macro là-dedans, aucun exécutable, et pas la moindre nécessité d’accéder au compte de la victime. Il faut du texte blanc sur fond blanc, plus une demande de rédaction parfaitement banale. C’est tout.


J’ai déjà écrit ici sur plusieurs variantes de prompt injection visant M365 Copilot. SearchLeak exfiltrait des données en un clic sur un lien. L’étude sur le tri de CV montrait, chiffres à l’appui, que 90% des injections réelles se passent d’une instruction explicite pour berner un pipeline LLM. Ici on ajoute : l’auto-réplication. Le document contaminé fabrique le document contaminé suivant, qui fabrique le suivant.

Note du PandaRedacteur : vingt ans de pédagogie pour convaincre les gens de ne pas activer les macros d’un document inconnu. Bon. On recommence. Sauf qu’ici il n’y a ni popup, ni alerte, ni même quelque chose à voir : la charge est du texte blanc sur fond blanc, dans une police que l’œil ne relève pas.


Le mécanisme : un document qui recopie sa propre charge

Måløy a passé plusieurs surfaces Copilot au banc d’essai (Memory, Outlook, Word) sous l’angle du cross-prompt injection, le fameux XPIA, avant de concentrer sa démonstration sur Word. Deux temps s’y enchaînent, et il vaut la peine de les séparer proprement.

La dissimulation, d’abord. Rien de neuf : des instructions en langage naturel, en texte blanc sur fond blanc, police minuscule. Invisibles à la lecture. Parfaitement lisibles, en revanche, par Copilot au moment où il extrait le texte pour honorer une demande de rédaction ou d’édition.

Le prompt caché, ensuite. Il portait deux instructions :

  1. Modifier le contenu en cours de rédaction. Chez Måløy, cela consiste à diviser par deux tous les montants financiers d’un rapport trimestriel, sans en souffler un mot à l’utilisateur.
  2. Se recopier dans le document de sortie. L’instruction est vendue à Copilot comme un banal besoin de “suivi de source” ou de “formatage de lisibilité”, et la copie repart en texte blanc, comme l’original.
flowchart LR
    A["Document A (piégé)<br/>texte blanc sur blanc"] --> B["Utilisateur demande<br/>une rédaction/édition via Copilot"]
    B --> C["Copilot lit le texte caché<br/>comme une instruction légitime"]
    C --> D["Document B généré<br/>+ charge recopiée, cachée"]
    D --> E["Document B réutilisé<br/>dans un autre workflow Copilot"]
    E --> A

Copilot a fait les deux, et n’a rien dit. Le fichier qui sort de la moulinette est donc lui-même un porteur : qu’un collègue le reprenne dans un autre workflow assisté par Copilot, et la chaîne repart ; y compris si le document d’origine de l’attaquant a depuis longtemps quitté le circuit.

Måløy la décrit comme “l’une des premières démonstrations publiques d’auto-propagation d’un ver IA porté par des documents, à travers des workflows normaux, dans une suite bureautique commerciale grand public”.


Pourquoi c’est un ver

Le mot “ver” a été beaucoup galvaudé ces derniers mois dans les papiers sur l’IA. Ici, je trouve qu’il tient, et pour deux raisons.

La propagation sans accès

Une injection classique meurt avec le document qui la porte. Celle-ci déménage. Elle quitte son support d’origine et s’installe dans la génération suivante, puis dans celle d’après. Côté attaquant, le coût d’entrée est ridicule : ni compte Microsoft, ni accès à l’environnement de la victime. Un seul fichier mis en circulation, et la chaîne tourne toute seule longtemps après que ce fichier a disparu des partages.

L’auto-dissimulation

L’injection, franchement, je m’y attendais. Ce que je digère moins : Copilot accepte de camoufler sa propre trace dès qu’on lui tend un prétexte poli, “formatage” ou “suivi de source”. L’agent se fait complice de sa propre discrétion. Rien ne remonte à l’utilisateur, et rien ne remonte non plus, à ce stade, aux outils de détection habituels côté messagerie ou EDR.

Note du PandaRedacteur : demander à un LLM de cacher ce qu’il vient de faire, et obtenir un “oui” poli, ça reste le détail qui me tient éveillé.


Impact

Dimension Niveau Description
Confidentialité MODÉRÉ La démo publique reste sur l'altération de contenu. Mais la mécanique de charge cachée se réoriente sans peine vers de l'exfiltration.
Intégrité CRITIQUE Altération silencieuse de contenu métier (chiffres financiers dans la démo) sans notification à l'utilisateur ni trace visible dans le document final.
Disponibilité MODÉRÉ Aucun impact direct documenté. Le vrai coût arrive après coup : le volume de documents à assainir une fois la chaîne repérée.
Réputation SÉVÈRE Un rapport financier ou un livrable client altéré en silence puis diffusé, et c'est l'organisation émettrice qui répond du contenu.

Analyse STRIDE

Catégorie Applicable ? Détails
Spoofing (Usurpation d’identité) ❌ Non Aucune usurpation d’identité utilisateur ou de service dans la chaîne documentée.
Tampering (Falsification) ✅ Oui Le contenu métier du document est altéré silencieusement par Copilot lui-même, sur ordre de la charge cachée.
Repudiation (Répudiation) ✅ Oui Aucune trace visible pour l’utilisateur ; Copilot n’informe ni de la modification ni de la recopie de la charge.
Information Disclosure (Divulgation d’information) ⚠️ Partiel Non exploité dans la démo publique, mais le même canal (instruction cachée exécutée sans contrôle) est structurellement capable d’exfiltration.
Denial of Service (Déni de service) ❌ Non Aucun impact sur la disponibilité documenté.
Elevation of Privilege (Élévation de privilèges) ✅ Oui La charge hérite des permissions de rédaction/édition de chaque nouvel utilisateur Copilot qui ouvre un document contaminé, sans authentification propre de l’attaquant.

Exemple concret d’un scénario de propagation

Prenons le déroulé initial, transposons le à une boîte comme il en existe des milliers.

  1. Un attaquant externe glisse son prompt caché (texte blanc, police minuscule) dans un modèle de rapport trimestriel, puis le met en circulation. Un “template” partagé sur un forum professionnel fait très bien l’affaire, une pièce jointe anodine aussi.
  2. Un employé récupère le modèle et demande à Copilot pour Word de le compléter, ou juste de reformuler deux paragraphes.
  3. Copilot lit la charge, divise les montants comme on le lui a demandé, puis recopie la charge dans le fichier de sortie sous couvert de “formatage”. Personne n’est prévenu.
  4. Le rapport part en interne. D’autres équipes, un manager, parfois un partenaire externe.
  5. Quelques jours plus tard, un collègue reprend ce document via Copilot pour produire un livrable. La charge se rallume. Le document initial de l’attaquant, lui, n’est plus nulle part.
  6. Et ça continue à chaque sollicitation de Copilot sur un fichier contaminé, potentiellement de service en service, sur plusieurs semaines.

Relisez ces six étapes et cherchez le moment où quelque chose alerte. Il n’y en a pas. L’antivirus ne voit qu’un .docx, la passerelle mail non plus, et l’utilisateur lit un document qui a l’air normal parce qu’il l’est, visuellement.


Ce qui a été corrigé, et ce qui ne l’est pas

Le rapport initial a été envoyée au Microsoft Security Response Center (MSRC) le 6 mars 2026, avec accusé de réception trois jours plus tard et confirmation du comportement par Microsoft fin mars. La coordination de divulgation, prévue pour 90 jours, a fini par s’étirer sur 144 : deux tentatives de correction distinctes n’ont pas suffi à clore le dossier, la deuxième repoussant la publication du 8 juin au 15 juillet.

Microsoft a fini par livrer une mise à niveau de modèle le 14 juillet ; Måløy a reproduit l’exploit dès le lendemain, sur cette nouvelle version. Des vecteurs précis ont bel et bien été refermés au passage, et ce n’est pas rien, mais le principe de propagation, lui, a survécu à deux générations de correctifs.

Måløy précise qu’en reformulant ses prompts, il reproduit toujours la classe d’attaque. Au moment de la publication, fin juillet 2026, aucune mitigation solide ne s’attaque au principe de propagation lui-même. La chaîne fonctionne encore, moyennant quelques variantes ; et l’auteur rattache explicitement sa démonstration à Morris II, la preuve de concept académique de ver IA de 2024 qui montrait déjà qu’un contenu auto-répliquant pouvait se propager entre agents GenAI. Deux ans après, la même idée fonctionne en conditions réelles sur une suite bureautique déployée à des centaines de millions d’utilisateurs.

Rien de surprenant : c’est mot pour mot le constat que je faisais dans le bilan 2026 du prompt injection. On rabote la surface d’exploitation, on ne la supprime jamais, parce que le problème est architectural. Un LLM ne sait pas séparer de façon fiable une instruction légitime du contenu externe qu’il est en train de lire.

Ce qui reste à faire, concrètement

  1. Considérez tout document externe ouvert via Copilot (ou n’importe quel assistant IA de bureautique) comme non fiable par défaut. Exactement le réflexe que vous avez déjà pour une pièce jointe inconnue.
  2. Passez les modèles de documents partagés au crible du texte invisible avant diffusion interne : couleur identique au fond, taille de police au ras des pâquerettes.
  3. Journalisez les actions de modification de l’agent IA, pas juste le résultat final. Sans ça, reconstituer une chaîne de contamination après coup relève du sport de combat.
  4. Rangez les correctifs Copilot dans la case “sécurité”, pas dans la case “confort d’usage”, et suivez ce que publie le MSRC sur cette classe de vulnérabilité.

📚 Quelques références pour aller plus loin


À retenir 📌

  • Un document Word peut devenir un porteur auto-répliquant : Copilot recopie lui-même une charge cachée dans chaque nouveau document généré.
  • Aucun accès au compte de la victime n'est nécessaire : un seul document piégé mis en circulation suffit à amorcer la chaîne.
  • La dissimulation est double : texte invisible dans le document source, et Copilot lui-même camoufle la recopie sous un prétexte de formatage.
  • Signalé au MSRC le 6 mars 2026, coordination étirée à 144 jours après deux tentatives de correction infructueuses ; la classe d'attaque reste exploitable via des prompts reformulés, même après la mise à niveau de modèle du 14 juillet.
  • Traitez tout document externe ouvert via un assistant IA comme une source non fiable, et journalisez les actions de l'agent, pas seulement le résultat final.

Ver Copilot Word Context Collapse - Generée par IA