
BOF armato per CobaltStrike per CVE-2023-36874 LPE della Segnalazione errori di Windows
Questa è un'implementazione BOF matura e operativa per CobaltStrike dell'exploit LPE per Windows Error Reporting CVE-2023-36874 di Filip Dragovic (@filip_dragovic) CVE-2023-36874 Windows Error Reporting LPE exploit. Ha fatto il lavoro pesante in termini di creazione di un exploit funzionante effettuando il reverse engineering della DLL vulnerabile in questione e creando le struct COM non documentate che sono fondamentali per questo exploit.
Questo BOF rilascerà un EXE specificato dall'utente su disco sulla macchina target e poi attiverà la vulnerabilità, facendo sì che l'EXE venga eseguito da SYSTEM.
Microsoft attribuisce la divulgazione di questa vulnerabilità al Threat Analysis Group di Google; tuttavia, ne sono venuto a conoscenza tramite la ricerca pubblicata da CrowdStrike.
Questo post del blog elenca molti artefatti diversi legati a questo exploit; in base alla convenzione di denominazione degli artefatti (8.exe, 2016.exe, 2019.exe, 10new+11.exe, ecc.) e al fatto che Microsoft ha rilasciato patch per questa vulnerabilità risalendo fino a Server 2008, si può dedurre che questa vulnerabilità colpisce diverse versioni di Windows.
Questo BOF è funzionante solo su Windows 10 e Windows 11 21H1 - 22H2; potrebbe funzionare anche su 20H1/H2, ma non ho una macchina per testarlo. Sulle versioni precedenti di Windows, questo exploit manderà in crash il processo che lo esegue. Ho il sospetto che questo sia legato a differenze nelle strutture COM di wercplsupport.dll e che con un po' di lavoro extra questo possa essere superato, ma ci sono molti altri exploit in giro per le versioni precedenti di Windows, quindi per ora lascerò questo compito ad altri.
Carica wer_lpe.cna in CobaltStrike e il comando wer_lpe verrà aggiunto.
Fornisci il percorso dell'EXE che vuoi caricare e, opzionalmente, una directory su cui il tuo attuale utente a bassi privilegi ha accesso in scrittura. Se non viene specificata alcuna directory, wer_lpe tenterà di scrivere nella directory corrente di Beacon.


Sono state aggiunte un paio di funzionalità extra al POC originale per mantenere l'OPSEC/cercare di eludere le firme statiche e ripulire automaticamente dopo lo sfruttamento.
Come parte dell'exploit, deve essere creata una nuova cartella nella directory C:\ProgramData\Microsoft\Windows\WER\ReportArchive. Questa cartella conterrà il file Report.wer che deve essere rilasciato su disco come parte della catena dell'exploit. L'exploit originale di Filip crea una directory chiamata "MyFolder". Osservando le cartelle/report reali contenuti nella directory ReportArchive possiamo farci un'idea migliore di una convenzione di denominazione che possa sfuggire meglio alle rilevazioni più semplici.

Il BOF contiene stub di due cartelle reali trovate nella directory ReportArchive di una macchina (una è commentata). A runtime, wer_lpe genererà casualmente un GUID e lo aggiungerà allo stub selezionato per creare una cartella credibile (e statisticamente unica) in cui creare il file Report.wer.

Il file report.wer è un altro facile indicatore statico attraverso cui questo exploit può essere rilevato. L'exploit originale impacchetta il file Report.wer come risorsa all'interno dell'EXE; questo BOF individuerà e leggerà 'Report.wer' dalla directory dell'exploit sulla macchina dell'attaccante e lo invierà al Beacon per scriverlo su disco. Questo apre la porta alla sostituzione del file Report.wer pre-impacchettato con uno arbitrario scelto dall'utente.
Diverse chiamate COM all'interno dell'exploit richiedono stringhe arbitrarie affinché l'exploit possa procedere; anche queste sono state sostituite con stringhe casuali generate a runtime.
Poiché questo exploit esegue un EXE arbitrario, la pulizia può diventare un problema se vuoi che il tuo EXE continui a essere eseguito (nel caso in cui debba avviare un nuovo Beacon), perché l'EXE sarà bloccato su disco. Wer_lpe ha implementato la Self-Deletion creata da LloydLabs (da cui continuo a ottenere ottimi risultati) per contrastare questo problema. Wer_lpe tenterà di eliminare/pulire tutti i file e le directory create durante il corso dell'exploit e fornirà un rapporto sullo stato del successo/fallimento di questa operazione.
Poiché cercare di eseguire un EXE arbitrario e non firmato nel 2023 su una macchina target è spesso un esercizio inutile, ho esplorato la possibilità di far eseguire all'exploit il vero wermgr.exe (copiato in una directory arbitraria) per sfruttare le opportunità di DLL sideloading. A causa della natura dell'exploit, questo non è possibile. Vedi questo thread Twitter per maggiori dettagli.
Questo exploit fallirà se eseguito da un utente che ha diritti di amministratore locale sulla macchina; questo è dovuto al fatto che il codice vulnerabile impersona l'utente con (parafrasando) la "massima integrità disponibile". Per un utente che è amministratore locale, questo significa che il suo token Admin verrà impersonato, il quale ha una mappa dei dispositivi DOS separata rispetto al token a integrità media che ha la ridirezione necessaria implementata per attivare la vulnerabilità. Questo exploit non è un sostituto per un bypass UAC.
Microsoft ha rilasciato una patch per questa vulnerabilità l'11 luglio 2023 come parte dell'aggiornamento di sicurezza mensile per quasi tutti i sistemi operativi concepibili che le persone potrebbero ancora utilizzare; patchate le vostre macchine, gente.
Prima di tutto, un enorme ringraziamento a Filip Dragovic (@filip_dragovic) per il suo codice funzionante e per la sua disponibilità a parlare con me e a istruirmi sul suo processo di sviluppo per questo exploit.
CrowdStrike per il loro articolo.
LloydLabs per il suo codice Self Deletion.