Une classe récurrente de failles Exchange partage une même forme. Le service Client Access (front-end) sert de proxy aux requêtes vers le back end et, dans ces chaînes, peut être trompé pour transmettre des requêtes contrôlées par l'attaquant et implicitement de confiance vers un endpoint back-end privilégié (le service PowerShell distant, ECP, ou EWS). Le back end fait confiance au front end et exécute la requête en tant que SYSTEM ou en tant qu'identité du pool d'applications Exchange. Les variations portent sur la façon dont le front end est dupé (un SSRF piloté par cookie, une confusion de chemin Autodiscover) et sur la primitive que le back end expose ensuite (un export de boîte aux lettres qui écrit un web shell, une commande PowerShell, un __VIEWSTATE signé qui se désérialise). Chaînez n'importe quelle ruse front-end à n'importe quelle écriture back-end et vous avez l'exécution de code.
Triage : adapter le build à la chaîne#
Le build que vous lisez lors de l'énumération décide quelle chaîne est à portée. Déclencher la mauvaise contre un build patché ne génère que des alertes.
# read the build, then match it to the in-range chain below
curl -sk -I https://<target>/owa/ | grep -i 'X-OWA-Version' # e.g. 15.2.1118.x
# 15.0 = 2013, 15.1 = 2016, 15.2 = 2019; compare the build/rollup to the dates below
- ProxyLogon, pré-authentification. SSRF via le cookie
X-BEResourceatteint le/ecpback-end, s'authentifie en tant que n'importe quelle boîte aux lettres, puis une écriture dans le répertoire virtuel OAB dépose un web shell. À portée sur les builds au niveau ou en dessous du rollup du début 2021. Sans identifiant. - ProxyShell, pré-authentification. Confusion de chemin Autodiscover atteint le back end PowerShell, qui exécute
New-MailboxExportRequestpour écrire un shell.aspx. À portée sur les builds sous le rollup de mi-2021. Sans identifiant. - ProxyNotShell, authentifié avec un identifiant de boîte aux lettres valide. SSRF Autodiscover vers le back end PowerShell. À portée sous le rollup de fin 2022 ; la variante OWASSRF de la même page atteint le back end via le chemin
/owa/.../ecpaprès la première mitigation de réécriture d'URL. - Désérialisation ViewState, nécessite la
machineKeyECP (statique, divulguée ou récupérée). Un__VIEWSTATEforgé signé avec ces clés se désérialise en exécution de code en tant que pool d'applications ECP. Indépendant du build ; dépend de l'exposition des clés.
Pourquoi la récolte est si grande#
Le back end s'exécute en tant que SYSTEM ou identité du pool d'applications Exchange, donc le shell est immédiatement à privilège élevé sur la machine. Parce qu'Exchange est privilégié dans AD (voir PrivExchange), SYSTEM sur un serveur Exchange est généralement à un pas de Domain Admin : dumpez LSASS et le compte machine, puis pivotez via les droits du compte machine Exchange ou le DCSync.
Pages#
- ProxyLogon : SSRF
X-BEResourcevers l'ECP back-end, puis une écriture OAB vers un web shell. - ProxyShell : confusion de chemin Autodiscover vers le back end PowerShell, puis un export de boîte aux lettres vers un shell.
- ProxyNotShell : SSRF Autodiscover authentifié vers PowerShell, avec les variantes OWASSRF et ApprovedApplicationCollection.
- Désérialisation ViewState : forger un
__VIEWSTATEsigné à partir d'unemachineKeydivulguée pour se désérialiser dans le pool d'applications ECP.