CVE-2022-30216 - L'autenticazione forzata del servizio di Windows Server
A cura di Ben Barnea
Analisi riassuntiva
Ben Barnea, ricercatore di Akamai, ha scoperto un'importante vulnerabilità nel servizio Windows Server assegnato. CVE-2022-30216 e un punteggio base di 8,8.
La nuova vulnerabilità trae vantaggio da un errore nella procedura di callback della sicurezza implementata dal servizio Server.
Abbiamo verificato che la vulnerabilità esiste nei computer Windows 11 e Windows Server 2022 senza patch.
Se combinata con un attacco di inoltro NTLM (New Technology LAN Manager) su Active Directory Certificate Services (AD CS), la vulnerabilità offre a un autore di attacchi con credenziali di dominio la possibilità di eseguire codice in remoto sul controller di dominio.
Riteniamo inoltre che un autore di attacchi potrebbe essere in grado di utilizzare questa tecnica per modificare la mappatura dei certificati di un server e quindi eseguire lo spoofing del server.
La vulnerabilità è stata responsabilmente segnalata a Microsoft e descritta nel Patch Tuesday di luglio.
Forniamo una POC (Proof of Concept) della vulnerabilità nel nostro archivio Github.
Introduzione
Negli ultimi mesi, il nostro team ha condotto una ricerca approfondita delle chiamate di procedura remota di Microsoft (MS-RPC). In poche parole, RPC viene utilizzato per efficienti comunicazioni interprocesso. Si basa su un modello client-server standard ed è uno dei protocolli attualmente più utilizzati in Windows.
Uno degli aspetti più interessanti che abbiamo identificato nella progettazione di MS-RPC è il callback di sicurezza, che funziona per limitare l'accesso ai server RPC, fornendo essenzialmente un servizio di sicurezza da utenti indesiderati, spesso remoti. Molti server RPC implementano un callback di sicurezza, ogni server con la lo logica e considerazioni proprie.
I servizi Windows fanno ampio uso di RPC per rendere disponibili le proprie funzionalità per i client. Ciò ci ha portato a esaminare diversi servizi e la logica sottostante delle rispettive implementazioni di callback di sicurezza. In uno di questi servizi, il servizio Server, siamo stati in grado di trovare una falla di sicurezza che potrebbe consentire agli autori di attacchi di eseguire lo spoofing del server o attivare la coercizione di autenticazione sulla vittima.
In questo blog, illustreremo gli aspetti dell'RPC su cui abbiamo effettuato ricerche che contribuiscono collettivamente a questo nuovo bug: qual è il bug, come può essere utilizzato e come mitigarlo.
Cos'è il servizio di Windows Server?
Il servizio Server (denominato anche LanmanServer) è un servizio Windows responsabile della gestione delle condivisioni SMB. Le condivisioni sono risorse (file, stampanti e strutture di directory) rese accessibili in rete da un server Common Internet File System. In sostanza, le condivisioni di rete consentono agli utenti di utilizzare altri dispositivi sulla rete per eseguire varie attività quotidiane.
Il servizio Server consente a un computer remoto di creare, configurare, interrogare ed eliminare condivisioni tramite RPC su una named pipe (\\pipe\srvsvc). Nella parte restante di questo post, faremo riferimento al servizio come srvsvc.
Una vulnerabilità in srvsvc ha un impatto perché il servizio fornisce funzionalità di base e quindi viene eseguito per impostazione predefinita su ogni computer Windows.
SMB su QUIC
Da Windows 10 20H2 in poi, Microsoft ha introdotto una nuova funzionalità: SMB su QUIC. La funzione consente l'accesso alle condivisioni SMB tramite QUIC, un nuovo protocollo di rete a livello di trasporto. Lo scopo di QUIC è quello di fornire una connessione più affidabile e sicura, superando anche i comuni problemi di Internet, come la latenza e la perdita di pacchetti.
In un'interazione di rete QUIC, come misura di sicurezza aggiuntiva, il client verifica l'identità del server controllando il certificato fornito dal server. Con l'aggiunta di SMB su QUIC, il servizio Server è diventato responsabile della gestione di tali certificati.
La vulnerabilità che abbiamo riscontrato risiede in questa funzionalità. Per capirlo, dobbiamo prima esaminare uno dei modi in cui i server RPC eseguono il controllo degli accessi.
Callback di sicurezza
Molti servizi Windows, tra cui srvsvc, implementano un server RPC per consentire la comunicazione tra processi e per fornire l'accesso alle proprie funzionalità a diversi client. RPC in Windows utilizza vari meccanismi di sicurezza; ci concentreremo su un callback di sicurezza chiamato.
L'obiettivo di un callback di sicurezza è limitare l'accesso a un'interfaccia RPC. Il callback viene implementato dallo sviluppatore del server RPC e consente a ogni sviluppatore di applicare la propria logica per consentire l'accesso a utenti specifici o impedire l'accesso a funzioni specifiche. In RPC, le funzioni esposte dal server sono rappresentate utilizzando numeri di operazione (opnum), che osserveremo a breve nel callback di sicurezza di srvsvc.
Cronaca di un callback di sicurezza
Per comprendere il bug, dobbiamo prima esaminare una versione precedente del callback di sicurezza di srvsvc prima dell'aggiunta della funzione SMB su QUIC:
Come osservato sopra, il callback di sicurezza di srvsvc ha la seguente logica:
- Se un client remoto tenta di accedere a una funzione compresa tra 64 e 69 (incluso), negare l'accesso
- Se un client remoto, che non è un account cluster, tenta di accedere a una funzione compresa tra 58 e 63 (incluso), negare l'accesso
Quindi, in sostanza, ai client remoti viene impedito di accedere a queste particolari funzioni dell'interfaccia. Questo controllo di intervallo suggerisce che le funzioni limitate sono sensibili e dovrebbero essere invocate solo dai processi (locali) previsti.
Con l'aggiunta di SMB su QUIC, Windows 10 20H2 ha aggiunto quattro nuove funzioni al servizio srvsvc:
- LocalrServerCertificateMappingGet
- LocalrServerCertificateMappingSet
- LocalrServerCertificateMappingEnum
- LocalrServerCertificateMappingRemove
Poiché l'accesso remoto a queste funzioni era indesiderato, sono state aggiunte alla gamma delle funzioni locali, funzioni che il callback di sicurezza di srvsvc vieta ai client remoti.
E, come mostrato di seguito, l'intervallo è stato effettivamente modificato per includere gli "opnum" per queste nuove quattro funzioni, aumentando il primo intervallo locale da 64–69 a 64–73 ed estendendo il controllo dell'accesso del callback di sicurezza a queste funzioni. Fin qui tutto bene.
In Windows 11 e Windows Server 2022, Microsoft ha aggiunto una nuova funzione denominata LocalrServerCertificateMappingModify:
Tuttavia, questa volta, la gamma di funzioni limitate non è cambiata in questa versione più recente includendo la funzione appena aggiunta:
Pertanto, al momento dell'aggiunta di questa funzione, non era coperta dal callback di sicurezza ed era quindi accessibile ai client RPC remoti.
Opportunità di sfruttamento
Richiamando questa funzione, un autore di attacchi può modificare le configurazioni delle mappature dei certificati sul server. Una mappatura del certificato è un "collegamento simbolico" tra il certificato QUIC di un server e un certificato nell'archivio certificati. Riteniamo che un autore di attacchi potrebbe essere in grado di utilizzare questa funzione per aggiungere la propria mappatura dei certificati e quindi eseguire lo spoofing del server. Tenete presente che questa funzione non aggiunge o modifica un certificato nell'archivio certificati di Windows, ma modifica una mappatura del certificato utilizzato dal server QUIC in un certificato nell'archivio di Windows.
Durante il tentativo di valutare l'impatto della vulnerabilità, abbiamo notato che la struttura che riceve la funzione contiene il percorso di archiviazione del certificato:
Fornendo un percorso UNC come variabile storeLocation, un autore di attacchi può fare in modo che LocalrServerCertificateMappingModify attivi una richiesta RPC dal server vittima a un computer che controlla. Il flusso della funzione che provoca l'attivazione della richiesta è:
LocalrServerCertificateMappingModify → SsValidCertandUpdateCertinfo → CertOpenStore → _CertDllOpenSystemStoreProvW → EnumPhysicalStore → FormatSystemRegPath → RegConnectRegistryExW → BaseBindToMachine → Rpc_OpenPredefHandle → NdrClientCall3
Durante la richiesta RPC che viene inviata dal server al nostro computer, il server esegue l'autenticazione contro il server dell'autore di attacchi. L'autore di attacchi può ora sfruttare le credenziali della vittima per eseguire un attacco di inoltro NTLM.
Sfruttando la vulnerabilità ed eseguendo il flusso di inoltro NTLM, siamo riusciti a replicare lo scenario di attacco PetitPotam di abuso di AD CS e acquisizione del controller di dominio.
L'attivazione della vulnerabilità richiede che l'autore dell'attacco abbia accesso a un computer nel dominio. Per lo scenario di inoltro NTLM, è necessario aggiungere il ruolo AD CS, insieme a uno dei relativi servizi inclini all'inoltro NTLM (registrazione Web dell'autorità di certificazione, servizio Web di registrazione certificati).
Correzione
Microsoft ha rilasciato una patch per questa vulnerabilità nel Patch Tuesday di luglio. Il problema è stato risolto tramite:
Correzione della gamma di funzioni locali nel callback di sicurezza, impedendo così l'accesso remoto a LocalrServerCertificateMappingModify
Aggiunta di un controllo di accesso in ciascuna delle nuove funzioni locali aggiunte
Cronologia delle divulgazioni
26 aprile 2022: è stato inviato un rapporto a Microsoft
26 aprile 2022: lo stato è cambiato da Nuovo in Revisione/Ripro.
martedì 9 maggio 2022: lo stato è cambiato da Revisione/Ripro. in Sviluppo
12 luglio 2022: è stata rilasciata una patch
Mitigazione e rilevamento
Di seguito sono riportati i consigli per mitigare l'inoltro NTLM:
Spesso, un attacco di inoltro NTLM che abusa di SD CS comporterà una richiesta TGT. Il registro eventi (EventID 4768) includerà l'indirizzo IP del computer richiedente. È possibile rilevare richieste TGT dannose se viene richiesto un TGT per un controller di dominio da un computer che non è un controller di dominio.
Una POC (Proof of Concept) disponibile nell'archivio delle ricerche sulla sicurezza Akamai.
Riepilogo
Quando vengono aggiunte nuove funzionalità, è importante essere consapevoli delle potenziali conseguenze che hanno, non solo rispetto alla funzione stessa della funzionalità, ma anche nel modo in cui viene resa accessibile agli utenti. Nel nostro caso, SMB su QUIC è stato aggiunto in Windows e ha introdotto nuove funzioni nel servizio Server. Tuttavia, la vulnerabilità non risiedeva nell'implementazione di SMB su QUIC, ma piuttosto nel modo in cui una funzione precedente limitava l'accesso alla rispettiva interfaccia RPC.
Il team di ricerca sulla sicurezza Akamai:ha condotto diverse ricerche su MS-RPC, a partire dall'analisi di una vulnerabilità di runtime RPC nella Patch Tuesday di aprile, nonché una sintesi di un altro CVE che abbiamo rilevato a maggio. Ben Barnea e Ophir Harpaz hanno presentato la ricerca sulla vulnerabilità del servizio Server al DEF CON 30 di Las Vegas.