Add-ins O365 vus par la RedTeam Navixia

Marius Rosset
Blog cybersécurité

Les applications de la suite Office 365 / Microsoft 365 sont utilisables à la fois nativement sur Windows ainsi qu’en mode « web ». Dans ce dernier cas, les technologies basées sur « Visual Basic for Applications » (VBA) comme les Add-Ins et les macros ne sont plus utilisables.

Pour compenser cela un nouveau type d’Add-In se retrouve sur le devant de la scène, les Add-In Javascript et Typescript. Capables de fonctionner aussi bien sur les versions web, Windows, Mac, Android et IOS de la suite Office. Regardons un peu à quoi ressemblent ces véritables sites web intégrés à Office, ce que l’on peut faire avec et leur impact sur la sécurité.

Décortiquons un Add-In

Structure add-in

On peut voir dans cet exemple schématique d’un Add-In ses deux principaux composants:

  1. Les « Commands » : boutons apparaissant en haut de l’écran sur le ruban défilant. Ceux-ci peuvent simplement faire apparaître un volet à droite ou peuvent déclencher des opérations beaucoup plus complexes dans le document.

  2. Les « Panels » : volets apparaissant toujours à la droite du document actif. Ce sont des objets navigateurs intégrés à Office, utilisant Internet Explorer ou Edge, affichant ainsi des interfaces faites en html/css étant hébergées sur des infrastructures externes.

Fonctionnalités diverses

Manipuler les documents

Fonctionnalité des plus basiques, mais tout de même des plus importantes : Il est possible modifier les documents ouverts, de changer la couleur du texte, le style, la police, etc... Profitons-en pour regarder un exemple de code :


await Word.run(async function (context) {

      // Get the selected part of the document and change the color
      var range = context.document.getSelection();
      range.font.color = "red";
      await context.sync();

      // Log the text
      range.load("text");
      await context.sync();
      console.log('The selected text was "' + range.text + '".');

});

Note aux programmeurs : Si le code est relativement lisible et compréhensible, un œil avisé remarquera la présence de deux « context.sync() ». Il faut en effet régulièrement synchroniser l’Add-In afin de pouvoir charger certaines parties du document comme ici le texte sélectionné pour que le changement soit pris en compte.

Injecter des templates

Une des possibilités les plus versatiles offertes par l’API consiste en la manipulation de l’xml dont les documents Office sont constitués. Sans entrer dans les détails de cette variante appelée OoXML, elle permet d’extraire des bouts de documents et ensuite de les injecter directement dans le document actif.

Nous avons pu par exemple utiliser cela avec des tableaux très complexes dans nos rapports d’audits. Au lieu de les copier à la main et d’ajuster les valeurs, il ne suffit que d’un clic pour injecter le template au bon endroit dans le document.

Appeler des API externes

Une fois le template injecté, l’idéal serait naturellement de pouvoir le remplir automatiquement avec certains champs qui sont aisément connus ou qui peuvent être calculés. Là ou en VBA appeler des APIs et manipuler du JSON était fastidieux, le javascript rend la chose beaucoup plus simple.

Le fait qu’il s’agisse d’un navigateur intégré permet également de se connecter à des services externes comme on peut le voir dans le nouveau plugin « Money in Excel » sorti en même temps que le changement de nom qui propose de se connecter à son compte Microsoft.

Exemple

Sécurité

Evidemment on ne peut pas mentionner les macros d’Office, sans immédiatement penser aux problèmes de sécurité qu’elles ont engendré pendant des années. Regardons quelques-uns des nouveaux risques que ces Add-Ins amènent:

Hébergement partagé

Il s’agit d’une erreur à ne pas faire. Comme dit plus haut, ces Add-Ins s’appuient sur des mini-sites web qui doivent donc être hébergés pour que Word, Excel, etc. viennent les charger. Il faut donc faire attention à les héberger séparément de tous vos autres sites web.

Imaginons un scénario d’attaque : un attaquant trouve une faille dans votre site web et arrive à prendre la main mise sur le site. Le voilà capable d’accéder à toutes les informations auxquelles le site web peut accéder, comptes utilisateurs, e-shops, etc... Toutefois les informations critiques de l’entreprise, les emails, les livres de comptes, les contrats, ne s’y trouve généralement pas.

Mais si un Add-In Office se trouve hébergé sur le même serveur web, il peut être compromis par l’attaquant. Le plugin modifié peut ainsi exfiltrer ou modifier tous les documents qui sont ouverts. De même s’il s’agit d’un Add-In pour Outlook, selon ses droits, il peut soit accéder uniquement aux emails ouverts par l’utilisateur, soit accéder à toute l’archive des emails présents dans la boite.

Il faut donc faire extrêmement attention à héberger les Add-Ins dans un espace séparé, afin de diminuer les risques de propagation.

Données exposées

De manière un peu similaire au point précédent, une attention toute particulière doit être donnée à la visibilité de l’Add-In. Doit-il être uniquement accessible en interne ou peut-il être accessible sur Internet sans révéler des informations internes ?

Le fichier d’installation, appelé le "manifest", n’est pas requis pour accéder aux ressources d’un Add-In. Cela peut se faire par un simple navigateur. Ainsi si celui-ci est disponible sur Internet il faut s’assurer qu’il ne contient aucune information sensible.

Non-détectables

Contrairement aux anciens plugins Office ou aux macros qui se trouvaient sur la machine de l’utilisateur et qui pouvaient donc être scannée par un antivirus, les Add-In Javascript se trouvent sur des serveurs externes. Impossible donc de dire s’ils sont malicieux sans ouvrir un document Office et analyser leur comportement, ce qui en fait des éléments parfaits pour cacher du code malicieux.

Néanmoins ces Add-Ins sont contraints de vivre dans un navigateur et se retrouvent donc confinés et soumis aux mêmes règles de sécurité que les sites web normaux. S’ils peuvent agir sur les documents Office, ils peuvent difficilement compromettre la sécurité de la machine.

Conclusion

Les Add-Ins en Javascript ouvrent un nouveau monde de possibilités, mais il ne faut pas en sous-estimer les risques.

Les possibilités d’intégration avec les API web permettent vraiment d’imaginer des Add-Ins extrêmement utiles et versatiles, permettant par exemple d’automatiser des tâches bureautiques répétitives. L’API est mise à jour régulièrement et a reçu très récemment une amélioration bienvenue portant sur la manipulation des métadonnées des documents.

Microsoft a essayé de sécuriser les Add-Ins par défaut, notamment en forçant l’utilisation de HTTPS pour leur chargement ainsi que toutes leurs requêtes. Malheureusement lorsque l’on développe et publie un Add-In il est extrêmement simple de prendre des mauvaises décisions et de le considérer comme un site web traditionnel alors qu’un soin tout particulier doit être appliqué.

Il est également très difficile de dire si ce que fait un Add-In est malveillant sans faire une analyse complète de son fonctionnement.