
Initialement, l'architecture de Microsoft Office a été construite sur la base du concept de documents composites, ce sont aussi des
documents OLE , activement promus par Microsoft à l'aube de Windows 32 bits. À cette époque, l'idée de combiner «de manière transparente» des données de différents formats dans un seul document semblait tentante et fascinante, et avant d'identifier les premiers problèmes, elle a réussi à se développer fermement en de nombreux produits à grande échelle.
La «mauvaise nouvelle» est que la manière universelle d'ajouter des données (et le code de traitement de ces données) dans les documents est devenue une manière universelle d'introduire des vulnérabilités dans le produit, qui présente encore aujourd'hui de
bonnes surprises aux
créateurs de chercheurs en sécurité
de logiciels malveillants .
Par la suite, le package d'application a reçu un ensemble assez riche d'outils pour ajouter des images, des graphiques et des graphiques, des éléments de contrôle qui sont créés et traités par l'application et qui en font partie dans les documents. Du point de vue de la sécurité, ces éléments présentent un intérêt légèrement inférieur à ceux qui seront (principalement) abordés dans l'article - les éléments qui utilisent le code des applications externes qui sont ajoutés aux documents utilisant OLE.
Une représentation «disque» d'un document composé est un
fichier CFBF . Cet article abordera l'incorporation d'objets dans des documents Microsoft Office (ou plutôt, uniquement l'aspect sécurité) dans le contexte des
données et du code chargés en mémoire lors de l'exécution.
Les objets officiellement incorporés dans les documents Microsoft Office peuvent être répartis dans les groupes suivants:
- Contrôles ActiveX (contrôles ActiveX)
- Objets intégrés OLE
- Fichiers intégrés ( packages )
- Éléments en ligne non OLE
Contrôles ActiveX
Les contrôles ActiveX peuvent être représentés comme des éléments d'une fenêtre de programme - par exemple, des boutons, des boutons radio, des listes, des champs de saisie et d'autres formulaires - conçus pour produire certains événements ou répondre à des événements. Il était une fois une bonne idée de créer de tels éléments de contrôle universels, avec la possibilité de les utiliser dans n'importe quelle application, et de les placer à cet effet dans les
composants COM .
Les pages Web intégrées ActiveX représentaient une faille de sécurité Internet Explorer bien connue, les mesures de sécurité ont augmenté au fil du temps. Les navigateurs d'autres fabricants ont presque immédiatement abandonné la prise en charge d'ActiveX. Le nouveau navigateur Microsoft Edge s'est enfin séparé de cette relique du passé. L'incorporation dans les documents Office est cependant toujours possible.
ActiveX dans les documents est destiné à être utilisé conjointement avec
Visual Basic pour Applications . Cependant, VBA n'est pas requis pour les télécharger et les activer, et l'autorisation utilisateur n'est pas requise pour télécharger des
éléments de la liste blanche .
Les vulnérabilités dans ce dernier sont particulièrement dangereuses - les paramètres par défaut définis lors de l'installation de l'application n'impliquent aucune protection contre le chargement de ces éléments, ni un avertissement à l'utilisateur. L'administrateur doit resserrer les paramètres en interdisant le chargement de tous les contrôles ActiveX (cependant, notez que ActiveX ne se charge pas en mode de navigation sécurisée).
Exemple: CVE-2012-0158
L'une des vulnérabilités les plus dangereuses des documents Office en 2012 était CVE-2012-0158 . Le code de chargement de l'élément Microsoft ListView Control 6.0 de la bibliothèque MSCOMCTL.OCX contenait la possibilité d'un débordement de tampon, ce qui permettait de remplacer l'adresse de retour et d'exécuter du code arbitraire. Étant donné que l'élément était dans la «liste blanche» ActiveX, le chargement a commencé immédiatement lorsque le document a été ouvert. La vulnérabilité est actuellement corrigée, le contrôle ListView est toujours considéré comme «sûr».
Ajout d'ActiveX à un document
Pour ajouter un élément de contrôle à un document Microsoft Office (pour plus de simplicité, prenez Word), utilisez l'interface utilisateur pour ouvrir l'onglet "Développeur" (sa visibilité est configurée dans le menu "Options Word") et sélectionnez Contrôles -> Outils des versions précédentes -> Contrôles ActiveX. Le menu présentera un ensemble d'icônes correspondant aux éléments Microsoft Forms, ainsi que la possibilité de sélectionner ActiveX dans la liste composée des éléments disponibles dans le système qui sont sélectionnés selon un certain nombre de critères.

La liste affichée ne correspond pas à l'ensemble des éléments qui peuvent réellement être chargés dans le document, elle ne peut donc pas être guidée lors de la recherche d'éléments vulnérables. La vérification sophistiquée à plusieurs niveaux de l'ActiveX téléchargé comporte plusieurs étapes, elle diffère pour les versions d'Office et varie d'une mise à jour à l'autre, donc le moyen le plus sûr de vérifier la téléchargabilité est de «composer» manuellement le fichier de document avec l'élément d'intérêt et d'essayer de l'ouvrir dans Office. Les formats de document possibles sont décrits ci-dessous.
Présentation du programme
Chaque élément ActiveX est essentiellement un objet de l'une des classes COM qui répondent à certaines exigences. Un élément est chargé à l'aide du sous-système COM et le code exécutable est contenu dans l'un des modules, qui sont généralement «externes» à l'application conteneur. Comme tout objet COM, un élément ActiveX peut être implémenté en tant que DLL ou en tant que fichier EXE exécutable. Dans le premier cas, la bibliothèque sera chargée dans l'espace d'adressage du conteneur, dans le second - l'élément sera traité dans un processus séparé, avec le transfert de données entre le conteneur et l'objet via le marshaling COM.
Comme tout objet COM, ActiveX possède des
interfaces , des
propriétés et des
méthodes .
Les interfaces sont principalement un ensemble d'interfaces standard que la classe ActiveX doit avoir pour le chargement complet et l'interaction avec le conteneur, en particulier IOleControl et IOleObject.
L'absence d'interfaces nécessaires peut réduire la fonctionnalité de l'élément ou interrompre son chargement à un certain stade.
Exemple: CVE-2015-2424
La vulnérabilité CVE-2015-2424 était associée à l'élément TaskSymbol Class de la bibliothèque mmcndmgr.dll. L'élément n'était pas destiné à être utilisé dans des documents et n'a pas exporté l'interface IDispatch. Lors du chargement d'un élément, la procédure qui a demandé cette interface a reçu une erreur et a détruit la structure interne de l'élément, ce qui a conduit à une vulnérabilité de type utilisation après libération. Pour le moment, l'élément n'est pas autorisé à être téléchargé (malgré cela, il peut toujours être trouvé dans la liste à ajouter au menu "Développeur"). La vulnérabilité elle-même n'est pas résolue.
En plus des standards, chaque classe ActiveX exporte l'interface «principale», représentant sa propre fonctionnalité unique. Par exemple, pour la classe Forms.CommandButton.1, il s'agit de ICommandButton.
Vous pouvez afficher les interfaces ActiveX à l'aide de l'outil
OleView inclus dans le package Microsoft Visual Studio.

L'interface d'un élément définit ses
méthodes et
propriétés . Les propriétés représentent certaines données qui déterminent l'apparence et le fonctionnement d'un élément. Le développeur d'un élément ActiveX attribue un nom spécifique à chaque propriété, par exemple BackColor ou GridLineWidth, et un type, par exemple, une chaîne, un entier ou une double précision réelle. Pour les images et les icônes bitmap, il existe un type de propriété telle qu'une image. Le programme client peut définir des propriétés individuelles du contrôle en définissant leurs indices et valeurs entiers.
Du point de vue d'une implémentation de bas niveau, la division en méthodes et propriétés est formelle, car les «propriétés» sont représentées par un ensemble de méthodes get / set. Cependant, il existe une différence significative: les méthodes d'un élément (son interface principale) ne peuvent être appelées par programme, dans le cas de documents Office, qu'à partir d'un programme VBA en cours d'exécution. Du point de vue de la sécurité, cela n'a pas un grand intérêt, car l'exécution de VBA est déjà un compromis du système d'exploitation.
Les propriétés sont enregistrées dans le document et lorsqu'il est ouvert, elles seront
traitées et chargées dans les structures en mémoire
même si l'exécution de VBA est interdite .
D'un point de vue logiciel, de la part de l'élément, pour conserver ses propriétés et son état dans le document, le conteneur fournit les
interfaces IStream ,
IStorage et
IPropertyBag . Leur implémentation et présentation des données dans un fichier disque ne sont plus du ressort de l'élément ActiveX, et dépendent entièrement du conteneur et du format du document. Il convient de noter que l'ensemble et le format des données stockées peuvent correspondre à un ensemble de propriétés exportées «publiquement», ou être complètement différents. Considérez des exemples d'implémentation liés à Microsoft Office.
Fichier composé (CFBF)
Le format de document Office obsolète , où le stockage de niveau inférieur ObjectPool et des sous-répertoires séparés à l'intérieur ont été alloués pour le stockage des données ActiveX. Le flux "\ 001CompObj" contient l'identifiant de classe, qui détermine finalement la classe de l'objet chargé.
Le remplacement de l'identifiant directement dans hex entraînera une tentative de chargement d'un objet d'une
classe complètement
différente .

Office Open XML
Format de document XML moderne. Le fichier est une archive zip. Les données de contrôle ActiveX sont stockées dans le sous-répertoire ActiveX dans des fichiers avec des noms simples comme activeX1.xml.

Exemple de fichier:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ax:ocx ax: classid="{D7053240-CE69-11CD-A777-00DD01143C57} " ax: persistence="persistPropertyBag" xmlns:ax="http://schemas.microsoft.com/office/2006/activeX" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
<ax:ocxPr ax:name="Caption" ax:value="CommandButton1"/>
<ax:ocxPr ax:name="Size" ax:value="2540;847"/>
<ax:ocxPr ax:name="FontName" ax:value="Calibri"/>
<ax:ocxPr ax:name="FontHeight" ax:value="225"/>
<ax:ocxPr ax:name="FontCharSet" ax:value="204"/>
<ax:ocxPr ax:name="FontPitchAndFamily" ax:value="2"/>
<ax:ocxPr ax:name="ParagraphAlign" ax:value="3"/>
</ax:ocx>
Dans ces fichiers, les identificateurs de classe sont indiqués sous forme de texte. Le remplacement de l'identifiant entraînera également une tentative de chargement d'un élément d'une autre classe.
Ensuite, le fichier contient une indication du type de stockage de données de l'objet: persistPropertyBag, persistStorage ou persistStream. Si un élément prend en
charge les propriétés
persistPropertyBag , ses données peuvent être stockées
dans le même fichier texte , voir l'exemple ci-dessus. S'il a besoin de
stockage ou d'un
flux binaire , les données seront enregistrées dans un fichier avec un nom de type activeX1.bin, qui est
un fichier CFBF .

RTF
Dans un document rtf, l'élément ActiveX est défini par les
balises \ object \ objocx . La
balise \ objdata contient le magasin de propriétés de l'élément en tant que représentation hexadécimale du fichier CFBF.
{\object\objocx\f37\objsetsize\objw1440\objh480{\*\objclass Forms.CommandButton.1}
{\*\objdata 010500000200000016000000
466f726d732e436f6d6d616e64427574746f6e2e31000000000000000000000e0000
d0cf11e 0a1b11ae1000000000000000000000000000000003e000300feff090006
Télécharger depuis un fichier
Le processus de chargement d'ActiveX à partir d'un document dans son ensemble est assez simple. L'application conteneur crée un objet propre de la classe spécifiée, lui demande l'interface de stockage spécifiée et fournit un pointeur vers le stockage, le flux ou le «package de propriétés».
Le filtrage des éléments pouvant être chargés comporte plusieurs étapes. Tout d'abord, les classes spécifiées dans la liste noire appelées
Office COM Kill Bit (indice de registre * OFFICE_KEY * \ Common \ COM Compatibility) sont supprimées. Par exemple, les indicateurs anti-téléchargement ont des classes telles que Microsoft Scriptlet Component et Microsoft Web Browser.
Les classes restantes subiront le chargement initial. Cela signifie que
la DLL sera chargée dans l'application conteneur ou que
le processus du serveur COM implémenté dans le fichier EXE sera
lancé . Ce n'est qu'après cela que les autres vérifications seront effectuées, y compris l'élémentaire - et si l'objet est, en fait, un représentant ActiveX.
Exemple: CVE-2015-6128
En 2015, le chercheur a découvert que le préchargement des modules COM peut être utilisé pour contourner ASLR et exécuter du code arbitraire en chargeant de fausses bibliothèques dynamiques. Le CVE-2015-6128 publié par la suite n'est pas un mot sur Microsoft Office.
Si l'identifiant définit vraiment ActiveX, il passera par plusieurs vérifications supplémentaires dans plusieurs listes noires et blanches.
Liste de démarrage ActiveX à partir de .docx sur Windows 7 et Office 2016 propres aux paramètres par défaut.{00024522-0000-0000-C000-000000000046} RefEdit.Ctrl
{02AF6DD2-77E6-44DF-B3E1-57CF1476D8EA} Microsoft Forms 2.0 OptionButton
{04082FC6-E032-49F2-A263-FE64E9DA1FA3} Microsoft Forms 2.0 HTML TEXT
{0B314611-2C19-4AB4-8513-A6EEA569D3C4} Microsoft Slider Control, version 6.0
{13D557B6-A469-4362-BEAF-52BFD0F180E2} Microsoft Forms 2.0 HTML TextAREA
{19FED08E-EFD1-45da-B524-7BE4774A6AEE} Microsoft Forms 2.0 ListBox
{20DD1B9E-87C4-11D1-8BE3-0000F8754DA1} Microsoft Date and Time Picker Control 6.0 (SP4)
{227B1F3B-C276-4DE0-9FAA-C0AD42ADDCF0} Microsoft Forms 2.0 HTML RESET
{232E456A-87C3-11D1-8BE3-0000F8754DA1} Microsoft MonthView Control 6.0 (SP4)
{3D0FD779-0C2D-4708-A9BA-62F7458A5A53} Microsoft Forms 2.0 ToggleButton
{444D2D27-02E8-486B-9018-3644958EF8A9} FieldListCtrl.2 Object
{4C599241-6926-101B-9992-00000B65C6F9} Microsoft Forms 2.0 Image
{5052A832-2C0F-46c7-B67C-1F1FEC37B280} Microsoft Forms 2.0 Label
{5512D110-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML SUBMIT
{5512D112-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML IMAGE
{5512D114-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML RESET
{5512D116-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML CHECKBOX
{5512D118-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML OPTION
{5512D11A-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML TEXT
{5512D11C-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML Hidden
{5512D11E-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML Password
{5512D122-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML SELECT
{5512D124-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML TextAREA
{556C2772-F1AD-4DE1-8456-BD6E8F66113B} Microsoft ImageList Control 6.0 (SP6)
{585AA280-ED8B-46B2-93AE-132ECFA1DAFC} Microsoft StatusBar Control 6.0 (SP6)
{5CBA34AE-E344-40CF-B61D-FBA4D0D1FF54} Microsoft Forms 2.0 HTML CHECKBOX
{5E90CC8B-E402-4350-82D7-996E92010608} Microsoft Forms 2.0 HTML OPTION
{603C7E80-87C2-11D1-8BE3-0000F8754DA1} Microsoft UpDown Control 6.0 (SP4)
{6240EF28-7EAB-4dc7-A5E3-7CFB35EFB34D} Microsoft Forms 2.0 ScrollBar
{65BCBEE4-7728-41A0-97BE-14E1CAE36AAE} Microsoft Office List 16.0
{6C177EBD-C42D-4728-A04B-4131892EDBF6} Microsoft Forms 2.0 ComboBox
{787A2D6B-EF66-488D-A303-513C9C75C344} Microsoft Forms 2.0 HTML Password
{79176FB0-B7F2-11CE-97EF-00AA006D2776} Microsoft Forms 2.0 SpinButton
{86F56B7F-A81B-478d-B231-50FD37CBE761} Microsoft Forms 2.0 CommandButton
{87DACC48-F1C5-4AF3-84BA-A2A72C2AB959} Microsoft ImageComboBox Control, version 6.0
{8B2ADD10-33B7-4506-9569-0A1E1DBBEBAE} Microsoft Toolbar Control 6.0 (SP6)
{8BD21D10-EC42-11CE-9E0D-00AA006002F3} Microsoft Forms 2.0 TextBox
{8BD21D20-EC42-11CE-9E0D-00AA006002F3} Microsoft Forms 2.0 ListBox
{8BD21D30-EC42-11CE-9E0D-00AA006002F3} Microsoft Forms 2.0 ComboBox
{8BD21D40-EC42-11CE-9E0D-00AA006002F3} Microsoft Forms 2.0 CheckBox
{8BD21D50-EC42-11CE-9E0D-00AA006002F3} Microsoft Forms 2.0 OptionButton
{8BD21D60-EC42-11CE-9E0D-00AA006002F3} Microsoft Forms 2.0 ToggleButton
{9432194C-DF54-4824-8E24-B013BF2B90E3} Microsoft Forms 2.0 HTML SUBMIT
{95F0B3BE-E8AC-4995-9DCA-419849E06410} Microsoft TreeView Control 6.0 (SP6)
{978C9E23-D4B0-11CE-BF2D-00AA003F40D0} Microsoft Forms 2.0 Label
{9A948063-66C3-4F63-AB46-582EDAA35047} Microsoft TabStrip Control 6.0 (SP6)
{9BDAC276-BE24-4F04-BB22-11469B28A496} Microsoft Forms 2.0 HTML IMAGE
{A0E7BF67-8D30-4620-8825-7111714C7CAB} Microsoft ProgressBar Control, version 6.0
{CCDB0DF2-FD1A-4856-80BC-32929D8359B7} Microsoft ListView Control 6.0 (SP6)
{D7053240-CE69-11CD-A777-00DD01143C57} Microsoft Forms 2.0 CommandButton
{DCA0ED3C-B95D-490f-9C60-0FF3726C789A} Microsoft Forms 2.0 Image
{DD4CB8C5-F540-47ff-84D7-67390D2743CA} Microsoft Forms 2.0 TextBox
{DFD181E0-5E2F-11CE-A449-00AA004A803D} Microsoft Forms 2.0 ScrollBar
{E9729012-8271-4e1f-BC56-CF85F914915A} Microsoft Forms 2.0 CheckBox
{EA778DB4-CE69-4da5-BC1D-34E2168D5EED} Microsoft Forms 2.0 SpinButton
{EAE50EB0-4A62-11CE-BED6-00AA00611080} Microsoft Forms 2.0 TabStrip
{F14E8B03-D080-4D3A-AEBA-355E77B20F3D} Microsoft Forms 2.0 HTML SELECT
{F8CF7A98-2C45-4c8d-9151-2D716989DDAB} Microsoft Visio Document
{FB453AD8-2EF4-44D3-98A8-8C6474E63CE4} Microsoft Forms 2.0 HTML Hidden
{FDEA20DB-AC7A-42f8-90EE-82208B9B4FC0} Microsoft Forms 2.0 TabStrip
{FE38753A-44A3-11D1-B5B7-0000C09000C4} Microsoft Flat Scrollbar Control 6.0 (SP4)
Vous pouvez voir qu'une place importante dans la liste est occupée par les composants du groupe
Microsoft Forms . Il s'agit d'un ensemble de contrôles fournis avec Office, et vous pouvez les voir dans le panneau de contrôles ActiveX. Au départ, ils étaient tous enregistrés comme «sûrs», mais au fil du temps, il est devenu clair que ce n'était pas le cas pour les éléments individuels. Par exemple, l'élément Frame charge tout autre ActiveX sans vérifier aucune liste (dans les dernières versions, cela est «fixe», mais la propre liste noire de Frame est différente de celle d'Office générale). Pour cette raison, certains éléments Microsoft Forms ne peuvent être chargés dans un document qu'avec l'autorisation de l'utilisateur. Microsoft Forms Frame requiert également le consentement de l'utilisateur (aux paramètres par défaut), mais il vous permet de télécharger certains éléments de la liste Kill Bit qui n'ont pas pu être chargés dans d'autres conditions.
Par conséquent, si un attaquant parvient à convaincre l'utilisateur d'autoriser ActiveX à se charger, Frame l'aidera à étendre considérablement l'arsenal en raison d'éléments tels que, par exemple, le navigateur Web.
Le format de stockage des propriétés Microsoft Forms est partiellement documenté par
la spécification [MS-OFORMS] .
Au cours de l'analyse ActiveX, il s'est avéré que l'ensemble des classes pour doc, docx et rtf est différent, ainsi que différentes listes d'ActiveX disponibles pour une application s'exécutant de la manière habituelle et s'exécutant
en mode d'automatisation .
De nombreuses applications populaires complètent ces listes avec leur propre ActiveX. Si une vulnérabilité est découverte, elle sera reflétée dans le bulletin comme étant liée à l'application dont elle fait partie. Cependant, la seule façon d'exploiter cette vulnérabilité peut être les documents Office.
Exemple: Flash ActiveX
Flash ActiveX a été particulièrement apprécié par les auteurs de virus pour leurs vulnérabilités constamment détectables et une place permanente dans les listes blanches d'IE et d'Office. Les premières vulnérabilités connues de ce composant sont apparues en 2008, l'une des dernières CVE-2018-4878 a été fermée en février de cette année. Avec la popularité décroissante d'IE, les documents Office sont devenus le principal moyen de distribuer les exploits pour Flash.
Éléments de données OLE intégrés
Les éléments OLE implémentés sont conçus pour implémenter le concept de «document dans document» avec la possibilité d'éditer des données sur place de différents formats traitées par d'autres applications. Comme ActiveX, les documents OLE sont implémentés sur la base de COM.
Vous pouvez ajouter un élément OLE à un document Word comme suit: ouvrez l'onglet "Insérer" et sélectionnez Texte -> Objet. Le programme affiche une liste des types de documents pour lesquels les gestionnaires OLE sont enregistrés. Comme c'est le cas avec ActiveX, cette liste ne correspond pas à l'ensemble des classes qui peuvent vraiment être chargées en tant que documents OLE.

Présentation du programme
Comme dans le cas d'ActiveX, l'implémentation de tout document OLE est représentée par la classe COM correspondante, réalisée sous la forme d'une DLL ou d'un EXE. Le composant exporte les interfaces de service nécessaires et l'état est enregistré dans le document conteneur via les interfaces IPersist *.
Dans un document CFBF, les données d'objet OLE sont stockées dans un stockage de deuxième niveau ObjectPool. Un ensemble de threads est généralement similaire aux contrôles ActiveX correspondants.

Dans les documents Open Office XML, les données d'objet OLE sont stockées dans le sous-répertoire incorporations, dans un fichier de stockage CFBF avec un nom de type oleObject1.bin.

Dans les documents RTF, les informations sur l'objet sont stockées sous la balise
\ object \ objemb \ . La section contient également un stockage codé en tant que représentation hexadécimale du fichier CFBF.
{\object\objemb\objw8307\objh553{\*\objclass WordPad.Document.1}
{\*\objdata 010500000200000013000000576f72645061642e446f63756d656e742e31000000000000000000000a0000
d0cf11e 0a1b11ae100000000
Le format RTF se distingue par le fait qu'il prend en charge la balise
\ objupdate , qui provoque l'activation automatique de l'élément, tandis que par défaut les éléments OLE sont inactifs lors du chargement.
Exemple: CVE-2017-11882
La vulnérabilité CVE-2017-11882 OLE du composant Equation Editor due au traitement de l'objet dans un processus distinct a rendu possible un fonctionnement stable et universel. La balise \ objupdate a forcé Word à charger le composant vulnérable immédiatement à l'ouverture du document.
Exemple: éléments intégrés Excel avec virus de macro
Les chercheurs ont découvert des documents rtf malveillants qui n'utilisent aucune nouvelle vulnérabilité. Les documents contiennent plusieurs documents Excel avec des macros en tant qu'objets incorporés. Le calcul est effectué sur le fait que l'utilisateur qui, après avoir ouvert le document plusieurs fois de suite, refuse d'exécuter la macro, se "rend" et autorise l'exécution. Pour le moment, la technique fonctionne toujours.

Une différence significative par rapport à ActiveX dans le cas d'éléments OLE incorporés est que l'identificateur de classe est écrit directement dans le fichier de stockage par la fonction WriteClassStg. Cette technique est héritée d'il y a très longtemps, lorsque Microsoft a développé avec enthousiasme le concept de "sérialisation" et de stockage d'objets avec leur état au format CFBF. Le document conteneur enregistre également l'identifiant de classe de l'élément implémenté, mais l'objet de la classe spécifié dans le référentiel sera chargé. Cet identifiant peut être remplacé en forçant l'application à charger un objet qui n'est pas du tout prévu à ces fins.
Il est possible d'éditer les données d'élément, ce qui conduit dans certains cas à l'identification de vulnérabilités.
Les objets OLE sont également soumis à de nombreuses vérifications de téléchargement, ce qui rend difficile l'obtention d'une liste complète des éléments potentiellement chargés. L'ensemble des éléments pouvant être chargés en tant qu'objets OLE est différent de la liste des ActiveX chargés. En particulier, ils sont vérifiés sur une liste KillBit n'appartenant pas à Office, mais à Internet Explorer (HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Internet Explorer \ Compatibilité ActiveX).
OLE par lien
OLE distingue deux mécanismes pour incorporer du contenu dans un document - incorporer directement un document OLE et créer un lien dans un autre document vers un autre document. En cas d'incorporation de l'objet OLE par référence, le document principal contient une indication du chemin d'accès au fichier du document incorporé. Le chemin peut être local ou réseau, ou une adresse Internet. Le gestionnaire OLE est déterminé par l'extension de fichier, le gestionnaire correspondant doit être enregistré dans le système d'exploitation.
Exemple: CVE-2017-0199
La vulnérabilité de CVE-2017-0199 consistait en la possibilité d'ajouter un format hta «objet par référence» au document. Ce dernier est html avec la possibilité d'exécuter du code, c'est-à-dire qu'il s'agit en fait d'un fichier exécutable. Le gestionnaire a automatiquement téléchargé et exécuté hta, vous permettant d'exécuter du code arbitraire lors de l'ouverture d'un document.
Avant de mettre à jour l'objet incorporé, l'application demande l'autorisation de l'utilisateur. Dans ce cas, le fichier est téléchargé à l'avance, ce qui peut servir à divulguer des informations sur l'utilisateur.
Fichiers intégrés (packages)
Les documents Office prennent en charge la possibilité d'ajouter n'importe quel fichier (Objet -> Créer à partir d'un fichier ou simplement faire glisser et déposer l'icône de fichier dans le champ d'édition). Techniquement, cela est implémenté en ajoutant un élément
Object Packager intégré au document qui écrit le fichier souhaité dans ses propres données. Object Packager vous permet de remplacer l'icône et la signature du fichier, ainsi que de spécifier la ligne de commande à ouvrir. Il peut inclure des
fichiers «par référence» lorsque le fichier est ouvert non pas à partir de son propre stockage, mais le long du chemin spécifié,
y compris celui du réseau .
Récemment, la fonctionnalité d'Object Packager a été considérablement réduite, et initialement l'élément pouvait enregistrer tous les fichiers, y compris l'exécutable, les liens et même la ligne de commande. Tout ce que l'utilisateur devait faire pour démarrer le contenu était de double-cliquer sur l'icône dans le texte du document.
Exemple: fichiers dans le corps d'un message Outlook
Les messages Outlook, qui sont également des documents composés, vous permettent d' ajouter des éléments Object Packager au corps du message . Pour l'utilisateur, l'élément ressemble à une image arbitrairement sélectionnée par un attaquant. Un double-clic sur l'image ouvre le fichier compressé. Un attaquant doit choisir un type de données parmi ceux qui ne sont pas encore soumis à des politiques de sécurité renforcées .

Éléments en ligne non implémentés à l'aide d'OLE
À l'heure actuelle, la plus grande menace / intérêt des éléments non OLE peut être des
images qui sont ajoutées au document par référence . Lorsqu'un document est ouvert dans un mode non protégé, les images sont téléchargées automatiquement, ce qui peut entraîner la divulgation de l'emplacement et de l'identité de l'utilisateur qui a téléchargé le document via des procurations anonymes ou a reçu un document confidentiel de tiers. Cette technique, en particulier, a été mise en œuvre dans l'
outil Scribbles , qui est en service auprès des services de renseignement américains.
Sur un réseau local Windows, le téléchargement automatique d'images par référence permet d'exploiter la
vulnérabilité NTLMRelay . Le mécanisme de liaison des images n'est pas compatible avec les exigences de sécurité des réseaux ActiveDirectory, car un administrateur recevant un tel document exécute essentiellement un code attaquant avec des privilèges administratifs complets.
Méthodes de sécurité
Que peut-on faire? Dans l'ensemble, un peu.
La méthode de protection la plus efficace contre les vulnérabilités des objets intégrés dans les documents Office est
le mode d'affichage protégé . Dans ce mode, le chargement d'objets et le chargement de données à partir de sources externes sont exclus. Malheureusement, la transition vers un mode complet nécessite des actions utilisateur élémentaires qui sont facilement provoquées par les méthodes d'ingénierie sociale.

Les contrôles ActiveX peuvent être
désactivés dans les paramètres du Trust Center
Notez que cela ne fonctionne pas pour les éléments en ligne OLE.