
Inicialmente, a arquitetura do Microsoft Office foi construída com base no conceito de documentos compostos, eles também são
documentos OLE , promovidos ativamente pela Microsoft no início do Windows de 32 bits. Naquela época, a idéia de combinar "de maneira perfeita" dados de vários formatos em um documento parecia tentadora e fascinante e, antes de identificar os primeiros problemas, conseguiu crescer firmemente em muitos produtos de grande escala.
A “má notícia” era que a maneira universal de adicionar dados (e o código para processar esses dados) aos documentos se tornou uma maneira universal de introduzir vulnerabilidades no produto, que hoje ainda apresenta surpresas
agradáveis aos
criadores de pesquisadores de segurança
de malware .
Posteriormente, o pacote de aplicativos recebeu um conjunto bastante rico de ferramentas para adicionar imagens, gráficos e tabelas, elementos de controle criados e processados pelo aplicativo e fazem parte dele nos documentos. Do ponto de vista da segurança, esses elementos têm um interesse um pouco menos do que os elementos que (principalmente) serão discutidos no artigo - elementos que usam o código de aplicativos externos que são adicionados aos documentos usando OLE.
Uma representação de "disco" de um documento composto é um
arquivo CFBF . Este artigo discutirá a incorporação de objetos nos documentos do Microsoft Office (ou melhor, apenas o aspecto de segurança) no contexto de
dados e códigos carregados na memória em tempo de execução.
Objetos formalmente incorporados nos documentos do Microsoft Office podem ser divididos nos seguintes grupos:
- Controles ActiveX (controles ActiveX)
- Objetos incorporados OLE
- Arquivos incorporados ( pacotes )
- Elementos inline não OLE
Controles ActiveX
Os controles ActiveX podem ser representados como elementos de uma janela de programa - digamos, botões, botões de opção, listas, campos de entrada e outros formulários - projetados para produzir determinados eventos ou responder a eventos. Era uma vez uma boa idéia criar esses elementos de controle universais, com a possibilidade de uso em qualquer aplicativo, e colocá-los para esse fim em
componentes COM .
As páginas da Web incorporadas ao ActiveX representavam uma conhecida violação de segurança do Internet Explorer; as medidas de segurança aumentavam com o tempo. Navegadores de outros fabricantes abandonaram quase imediatamente o suporte a ActiveX. O novo navegador Microsoft Edge finalmente se separou dessa relíquia do passado. A incorporação de documentos do Office, no entanto, ainda é possível.
O ActiveX em documentos deve ser usado em conjunto com o
Visual Basic for Applications . No entanto, o VBA não é necessário para fazer o download e ativá-los, e a permissão do usuário não é necessária para baixar
itens da lista branca .
As vulnerabilidades neste último são especialmente perigosas - as configurações padrão definidas na instalação do aplicativo não implicam nenhuma proteção contra o carregamento desses elementos, nem um aviso ao usuário. O administrador precisa restringir as configurações proibindo o carregamento de qualquer controle ActiveX (no entanto, observe que o ActiveX não carrega no modo Navegação segura).
Exemplo: CVE-2012-0158
Uma das vulnerabilidades mais perigosas dos documentos do Office em 2012 foi o CVE-2012-0158 . O código de carregamento para o elemento Microsoft ListView Control 6.0 da biblioteca MSCOMCTL.OCX continha a possibilidade de estouro de buffer, o que permitia substituir o endereço de retorno e executar código arbitrário. Como o item estava na "lista branca" do ActiveX, o carregamento começou imediatamente quando o documento foi aberto. A vulnerabilidade está corrigida no momento, o controle ListView ainda é considerado "seguro".
Adicionando ActiveX a um documento
Para adicionar um elemento de controle a um documento do Microsoft Office (para simplificar, use o Word), use a interface do usuário para abrir a guia "Desenvolvedor" (sua visibilidade é configurada no menu "Opções do Word") e selecione Controles -> Ferramentas de versões anteriores -> controles ActiveX. O menu demonstrará um conjunto de ícones correspondentes aos elementos do Microsoft Forms, bem como a capacidade de selecionar o ActiveX na lista composta por elementos disponíveis no sistema selecionados de acordo com vários critérios.

A lista exibida não corresponde ao conjunto de elementos que realmente podem ser carregados no documento, portanto, não pode ser guiada ao procurar elementos vulneráveis. A verificação sofisticada em vários níveis do ActiveX baixado tem vários estágios, difere das versões do Office e varia de atualização para atualização; portanto, a maneira mais segura de verificar o download é “compor” manualmente o arquivo do documento com o elemento de interesse e tentar abri-lo no Office. Os possíveis formatos de documento estão descritos abaixo.
Apresentação do Programa
Cada elemento ActiveX é essencialmente um objeto de uma das classes COM que atendem a certos requisitos. Um elemento é carregado usando o subsistema COM e o código executável está contido em um dos módulos, que geralmente são "externos" ao aplicativo de contêiner. Como qualquer objeto COM, um elemento ActiveX pode ser implementado como uma DLL ou como um arquivo EXE executável. No primeiro caso, a biblioteca será carregada no espaço de endereço do contêiner, no segundo - o elemento será processado em um processo separado, com a transferência de dados entre o contêiner e o objeto por meio de empacotamento COM.
Como qualquer objeto COM, o ActiveX possui
interfaces ,
propriedades e
métodos .
As interfaces são principalmente um conjunto de interfaces padrão que a classe ActiveX deve ter para carregamento completo e interação com o contêiner, em particular IOleControl e IOleObject.
A ausência de quaisquer interfaces necessárias pode reduzir a funcionalidade do elemento ou interromper seu carregamento em algum estágio.
Exemplo: CVE-2015-2424
A vulnerabilidade CVE-2015-2424 foi associada ao elemento TaskSymbol Class da biblioteca mmcndmgr.dll. O elemento não foi projetado para uso em documentos e não exportou a interface IDispatch. No processo de carregamento de um elemento, o procedimento que solicitou essa interface recebeu um erro e destruiu a estrutura interna do elemento, o que levou a uma vulnerabilidade do tipo usar após livre. No momento, o item não pode ser baixado (apesar disso, ele ainda pode ser encontrado na lista a ser adicionada ao menu "Desenvolvedor"). A vulnerabilidade em si não foi resolvida.
Além das padrão, cada classe ActiveX exporta a interface "principal", representando sua própria funcionalidade exclusiva. Por exemplo, para a classe Forms.CommandButton.1, este é ICommandButton.
Você pode exibir interfaces ActiveX usando a ferramenta
OleView incluída no pacote Microsoft Visual Studio.

A interface de um elemento define seus
métodos e
propriedades . Propriedades representam alguns dados que determinam a aparência e a operação de um elemento. O desenvolvedor de um elemento ActiveX atribui um nome específico a cada propriedade, como BackColor ou GridLineWidth, e um tipo, por exemplo, uma seqüência de caracteres, número inteiro ou precisão dupla real. Para imagens e ícones de bitmap, existe um tipo de propriedade, como uma imagem. O programa cliente pode definir propriedades individuais do controle, definindo seus índices e valores inteiros.
Do ponto de vista de uma implementação de baixo nível, a divisão em métodos e propriedades é formal, uma vez que "propriedades" são representadas por um conjunto de métodos get / set. No entanto, há uma diferença significativa: os métodos de um elemento (sua interface principal) só podem ser chamados de forma programática, no caso de documentos do Office, somente de um programa VBA em execução. Do ponto de vista da segurança, isso não é de grande interesse, pois a execução do VBA já é um comprometimento do sistema operacional.
As propriedades são salvas no documento e, quando abertas, serão
processadas e carregadas nas estruturas da memória,
mesmo que a execução do VBA seja proibida .
Do ponto de vista do software, por parte do elemento, para preservar suas propriedades e estado no documento, o contêiner fornece as
interfaces IStream ,
IStorage e
IPropertyBag . Sua implementação e apresentação de dados em um arquivo de disco não é mais a preocupação do elemento ActiveX e depende inteiramente do contêiner e do formato do documento. Note-se que o conjunto e o formato dos dados armazenados podem corresponder a um conjunto de propriedades exportado “publicamente” ou podem ser completamente diferentes. Considere exemplos de implementação relacionados ao Microsoft Office.
Arquivo composto (CFBF)
O formato de documento desatualizado do Office , onde o armazenamento de baixo nível do ObjectPool e subdiretórios separados dentro dele foram alocados para o armazenamento de dados ActiveX. O fluxo "\ 001CompObj" contém o identificador de classe, que finalmente determina a classe do objeto carregado.
Substituir o identificador diretamente em hexadecimal resultará em uma tentativa de carregar um objeto de uma
classe completamente
diferente .

XML aberto do Office
Formato de documento XML moderno. O arquivo é um arquivo zip. Os dados de controle ActiveX são armazenados no subdiretório ActiveX em arquivos com nomes simples como activeX1.xml.

Arquivo de exemplo:
<?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>
Nesses arquivos, os identificadores de classe são indicados em forma de texto. Substituir o identificador também causará uma tentativa de carregar um elemento de outra classe.
Em seguida, o arquivo contém uma indicação do tipo de armazenamento de dados do objeto: persistPropertyBag, persistStorage ou persistStream. Se um elemento suportar propriedades
persistPropertyBag , seus dados poderão ser armazenados
no mesmo arquivo de texto , veja o exemplo acima. Se ele precisar de
armazenamento ou um
fluxo binário , os dados serão salvos em um arquivo com um nome do tipo activeX1.bin, que é
um arquivo CFBF .

RTF
Em um documento rtf, o elemento ActiveX é definido pelas
marcas \ object \ objocx . A
marca \ objdata contém o armazenamento de propriedades do elemento como uma representação hexadecimal do arquivo CFBF.
{\object\objocx\f37\objsetsize\objw1440\objh480{\*\objclass Forms.CommandButton.1}
{\*\objdata 010500000200000016000000
466f726d732e436f6d6d616e64427574746f6e2e31000000000000000000000e0000
d0cf11e 0a1b11ae1000000000000000000000000000000003e000300feff090006
Baixar do arquivo
O processo de carregamento do ActiveX de um documento como um todo é bastante simples. O aplicativo de contêiner cria um objeto limpo da classe especificada, solicita a interface de armazenamento especificada e fornece um ponteiro para o armazenamento, fluxo ou "pacote de propriedades".
A filtragem de itens que podem ser carregados possui várias etapas. Primeiro de tudo, as classes especificadas na lista negra conhecida como
Office COM Kill Bit (dica do registro * OFFICE_KEY * \ Common \ COM Compatibility) são eliminadas. Por exemplo, os sinalizadores anti-download possuem classes como o Microsoft Scriptlet Component e o Microsoft Web Browser.
As demais classes passarão pelo carregamento inicial. Isso significa que
a DLL será carregada no aplicativo de contêiner ou
o processo do servidor COM implementado no arquivo EXE será
iniciado . Somente depois disso as demais verificações serão realizadas, incluindo a elementar - e se o objeto é, de fato, um representante do ActiveX.
Exemplo: CVE-2015-6128
Em 2015, o pesquisador descobriu que o pré-carregamento de módulos COM pode ser usado para ignorar o ASLR e executar código arbitrário , carregando falsas bibliotecas dinâmicas. O CVE-2015-6128 lançado posteriormente não é uma palavra sobre o Microsoft Office.
Se o identificador realmente definir o ActiveX, ele passará por várias verificações em várias listas preto e brancas.
Lista de inicialização do ActiveX a partir do .docx no Windows 7 e no Office 2016 limpos nas configurações padrão.{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)
Você pode ver que um lugar significativo na lista é ocupado pelos componentes do grupo
Microsoft Forms . Este é um conjunto de controles que acompanham o Office e você pode vê-los no painel de controles ActiveX. Inicialmente, todos foram registrados como "seguros", mas com o tempo ficou claro que isso não é verdade para elementos individuais. Por exemplo, o elemento Frame carrega qualquer outro ActiveX sem verificar nenhuma lista (nas versões mais recentes isso é "fixo", mas a lista negra do próprio Frame é diferente da Office geral). Por esse motivo, alguns elementos do Microsoft Forms podem ser carregados apenas em um documento com a permissão do usuário. O Microsoft Forms Frame também requer o consentimento do usuário (nas configurações padrão), mas permite que você baixe alguns itens da lista Kill Bit que não puderam ser carregados sob outras condições.
Portanto, se um invasor conseguir convencer o usuário a permitir o carregamento do ActiveX, o Frame o ajudará a expandir significativamente o arsenal devido a elementos como, por exemplo, o Navegador da Web.
O formato de armazenamento de propriedades do Microsoft Forms é parcialmente documentado pela
especificação [MS-OFORMS] .
Durante a verificação do ActiveX, verificou-se que o conjunto de classes para doc, docx e rtf é diferente, também existem listas diferentes de ActiveX disponível para um aplicativo em execução da maneira usual e
em modo de automação .
Muitos aplicativos populares complementam essas listas com seu próprio ActiveX. Se uma vulnerabilidade for descoberta, ela será refletida no boletim como relacionada ao aplicativo do qual faz parte. No entanto, a única maneira de explorar a vulnerabilidade pode ser documentos do Office.
Exemplo: Flash ActiveX
O Flash ActiveX foi especialmente apreciado pelos criadores de vírus por suas vulnerabilidades consistentemente detectáveis e um lugar permanente nas listas brancas do IE e do Office. As primeiras vulnerabilidades conhecidas nesse componente apareceram em 2008, uma das últimas CVE-2018-4878 foi fechada em fevereiro deste ano. Com a crescente popularidade do IE, os documentos do Office se tornaram a principal maneira de distribuir explorações para o Flash.
Elementos de dados OLE incorporados
Os elementos OLE implementados foram projetados para implementar o conceito de "documento em documento", com a capacidade de editar dados no local de vários formatos processados por outros aplicativos. Como o ActiveX, os documentos OLE são implementados com base no COM.
Você pode adicionar um elemento OLE a um documento do Word da seguinte maneira: abra a guia "Inserir" e selecione Texto -> Objeto. O programa exibe uma lista de tipos de documentos para os quais os manipuladores OLE estão registrados. Como é o caso do ActiveX, esta lista não corresponde ao conjunto de classes que realmente podem ser carregadas como documentos OLE.

Apresentação do Programa
Como no caso do ActiveX, a implementação de qualquer documento OLE é representada pela classe COM correspondente, feita na forma de uma DLL ou EXE. O componente exporta as interfaces de serviço necessárias e o estado é salvo no documento do contêiner por meio das interfaces IPersist *.
Em um documento CFBF, os dados do objeto OLE são armazenados no armazenamento de segundo nível do ObjectPool. Um conjunto de threads geralmente é semelhante aos controles ActiveX correspondentes.

Nos documentos XML do Open Office, os dados do objeto OLE são armazenados no subdiretório de incorporação, em um arquivo de armazenamento CFBF com o nome de tipo oleObject1.bin.

Nos documentos RTF, as informações do objeto são armazenadas na tag
\ object \ objemb \ . A seção também contém armazenamento codificado como uma representação hexadecimal do arquivo CFBF.
{\object\objemb\objw8307\objh553{\*\objclass WordPad.Document.1}
{\*\objdata 010500000200000013000000576f72645061642e446f63756d656e742e31000000000000000000000a0000
d0cf11e 0a1b11ae100000000
O formato RTF se distingue pelo fato de
oferecer suporte à marca
\ objupdate , que causa a ativação automática do elemento, enquanto, por padrão, os elementos OLE ficam inativos quando carregados.
Exemplo: CVE-2017-11882
A vulnerabilidade CVE-2017-11882 OLE do componente Equation Editor devido ao processamento do objeto em um processo separado tornou possível a operação estável e universal. A tag \ objupdate fez com que o Word carregasse o componente vulnerável imediatamente após abrir o documento.
Exemplo: elementos incorporados do Excel com vírus de macro
Os pesquisadores descobriram documentos rtf maliciosos que não usam novas vulnerabilidades. Os documentos contêm vários documentos do Excel com macros como objetos incorporados. O cálculo é feito no fato de que o usuário que, após abrir o documento várias vezes seguidas, se recusa a executar a macro, como resultado, "se entrega" e permite a execução. No momento, a técnica ainda está funcionando.

Uma diferença significativa do ActiveX no caso de elementos OLE incorporados é que o identificador de classe é gravado diretamente no arquivo de armazenamento pela função WriteClassStg. Essa técnica é herdada de muito tempo atrás, quando a Microsoft desenvolveu com entusiasmo o conceito de "serialização" e armazenamento de objetos com seu estado no formato CFBF. O documento do contêiner também salva o identificador de classe do elemento implementado, mas o objeto da classe especificada no repositório será carregado. Esse identificador pode ser substituído forçando o aplicativo a carregar um objeto que não se destina a esses fins.
É possível editar os dados do elemento, o que, em certos casos, leva à identificação de vulnerabilidades.
Os objetos OLE também passam por inúmeras verificações de download, dificultando a obtenção de uma lista completa de itens potencialmente carregados. O conjunto de elementos que podem ser carregados como objetos OLE é diferente da lista de ActiveX carregado. Em particular, eles são verificados na lista KillBit não pertencente ao Office, mas pelo Internet Explorer (Compatibilidade HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Internet Explorer \ ActiveX).
OLE por link
O OLE distingue entre dois mecanismos para incorporar conteúdo em um documento - incorporar diretamente um documento OLE e criar um link dentro de outro documento para outro documento. No caso de incorporar o objeto OLE por referência, o documento principal contém uma indicação do caminho para o arquivo do documento incorporado. O caminho pode ser local ou de rede ou um endereço da Internet. O manipulador OLE é determinado pela extensão do arquivo; o manipulador correspondente deve ser registrado no sistema operacional.
Exemplo: CVE-2017-0199
A vulnerabilidade do CVE-2017-0199 consistiu na possibilidade de adicionar um formato hta "objeto por referência" ao documento. O último é o html, com a capacidade de executar código, ou seja, é realmente um arquivo executável. O manipulador baixou e executou automaticamente o hta, permitindo executar código arbitrário ao abrir um documento.
Antes de atualizar o objeto incorporado, o aplicativo solicita permissão do usuário. Nesse caso, o arquivo é baixado antecipadamente, o que pode servir para divulgar informações sobre o usuário.
Arquivos incorporados (pacotes)
Os documentos do Office suportam a capacidade de adicionar qualquer arquivo (Objeto -> Criar a partir do arquivo ou basta arrastar e soltar o ícone do arquivo no campo de edição). Tecnicamente, isso é implementado adicionando um elemento
interno do Object Packager ao documento que grava o arquivo desejado em seus próprios dados. O Object Packager permite substituir o ícone e a assinatura do arquivo, além de especificar a linha de comando a ser aberta. Pode incluir
arquivos “por referência” quando o arquivo é aberto não a partir de seu próprio armazenamento, mas ao longo do caminho especificado,
incluindo o de rede .
Recentemente, a funcionalidade do Object Packager foi significativamente reduzida e, inicialmente, o elemento poderia salvar qualquer arquivo, incluindo executável, links e até a linha de comando. Tudo o que o usuário precisou fazer para iniciar o conteúdo foi clicar duas vezes no ícone no texto do documento.
Exemplo: arquivos no corpo de uma mensagem do Outlook
As mensagens do Outlook, que também são documentos compostos, permitem adicionar elementos ao Object Packager ao corpo da mensagem . Para o usuário, o elemento se parece com uma imagem selecionada arbitrariamente por um invasor. Clicar duas vezes na imagem abre o arquivo compactado. Um invasor precisa escolher um tipo de dados dentre aqueles que ainda não foram objeto de políticas de segurança mais rígidas .

Elementos embutidos não implementados usando OLE
No momento, a maior ameaça / interesse de elementos não OLE pode ser
imagens adicionadas ao documento por referência . Quando um documento é aberto em um modo não protegido, as imagens são baixadas automaticamente, o que pode levar à divulgação do local e da identidade do usuário que baixou o documento por meio de proxies anônimos ou recebeu um documento confidencial de terceiros. Essa técnica, em particular, foi implementada na
ferramenta Scribbles , que está em serviço com a inteligência dos EUA.
Em uma rede local do Windows, o download automático de imagens por referência possibilita a exploração da
vulnerabilidade NTLMRelay . O mecanismo para vincular imagens não é compatível com os requisitos de segurança das redes do ActiveDirectory, pois um administrador que recebe esse documento executa essencialmente um código de invasor com privilégios administrativos completos.
Métodos de segurança
O que pode ser feito? Em suma, um pouco.
O método mais eficaz de proteção contra vulnerabilidades em objetos incorporados em documentos do Office é
o modo de exibição protegida . Nesse modo, o carregamento de objetos e o carregamento de dados de fontes externas são excluídos. Infelizmente, a transição para um modo completo exige ações elementares do usuário que são facilmente provocadas pelos métodos de engenharia social.

Os controles ActiveX podem ser
desativados nas configurações da Central de Confiabilidade
Observe que isso não funciona para elementos embutidos OLE.