
Advisory di sicurezza: il portale per sviluppatori di Azure APIM consente la registrazione di account cross-tenant aggirando le restrizioni di iscrizione dell'interfaccia utente. Segnalato due volte a MSRC - chiuso come "by design".
Stato (01.12.2025): Questa vulnerabilità è ancora attiva e sfruttabile. Microsoft non ha corretto il problema e lo considera "by design".
Una vulnerabilità di sicurezza nel portale per sviluppatori (Developer Portal) di Azure API Management (APIM) consente agli attaccanti di registrare account su qualsiasi istanza APIM che abbia l'autenticazione di base (Basic Authentication) abilitata, anche quando gli amministratori hanno disabilitato la registrazione degli utenti nell'interfaccia del portale.
Questo bypass consente la creazione di account cross-tenant, permettendo potenzialmente l'accesso non autorizzato alla documentazione delle API, alle chiavi di sottoscrizione e ad altre risorse esposte tramite il portale per sviluppatori.
| Data | Azione |
|---|---|
| 2025-09-30 | Vulnerabilità scoperta |
| 2025-09-30 | Primo report inviato a MSRC |
| 2025-10-30 | Risposta MSRC: chiuso come "non è una vulnerabilità" |
| 2025-11-01 | Secondo report inviato a MSRC con dettagli aggiuntivi |
| 2025-11-20 | Risposta MSRC: chiuso come "by design" |
| 2025-11-20 | Segnalato a CERT-FI |
| 2025-11-26 | Divulgazione pubblica |
| 2025-11-27 | CVE richiesto a MITRE |
| 2026-07-09 | CVE-2025-66390 assegnato da MITRE TL-Root/CNA-LR |
Quando Azure APIM è configurato con l'autenticazione di base per il portale per sviluppatori, gli amministratori possono disabilitare la registrazione degli utenti tramite l'interfaccia del portale Azure. Tuttavia, questo nasconde solo il modulo di registrazione nell'interfaccia del portale.
L'endpoint API di registrazione sottostante rimane attivo e accetta direttamente le richieste di registrazione, aggirando completamente la restrizione dell'interfaccia.
Due problemi si combinano per creare questa vulnerabilità:
L'attacco richiede due istanze APIM:
Passaggi:
Host dalla propria istanza a quella targetDettaglio tecnico chiave: il bypass cross-tenant funziona manipolando l'header Host nella richiesta POST di registrazione. L'endpoint /signup elabora le richieste in base all'header Host senza validare i confini di tenant.
Esempio di manipolazione della richiesta:
POST /signup HTTP/1.1
Host: target-apim.developer.azure-api.net <-- Changed from attacker's instance
Origin: https://attacker-apim.developer.azure-api.net
Content-Type: application/json
{"challenge":{...},"signupData":{"email":"[email protected]",...}}
Il problema principale: disabilitare la registrazione nell'interfaccia non disabilita l'API sottostante. L'endpoint API accetta richieste cross-tenant in base all'header Host.
La tua istanza APIM è vulnerabile se:
La tua istanza APIM NON è vulnerabile se:
Punto chiave: disabilitare la registrazione nell'interfaccia del portale Azure NON è sufficiente. Il provider di identità con autenticazione di base deve essere completamente rimosso per prevenire il bypass della registrazione cross-tenant.
Usa questi valori di proprietà per identificare le istanze APIM vulnerabili tramite Azure Resource Graph, modelli ARM o Azure Policy.
| Percorso proprietà | Valore vulnerabile | Descrizione |
|---|---|---|
properties.developerPortalStatus | Enabled | Il portale per sviluppatori è accessibile |
sku.name | Developer, Basic, Standard, Premium | Livelli non-Consumption (il livello Consumption ha funzionalità del portale limitate) |
Il provider di identità con autenticazione di base è una risorsa separata all'interno dell'istanza APIM:
Resource Type: Microsoft.ApiManagement/service/identityProviders
Name: basic
Vulnerabile se presente: la presenza di una risorsa provider di identità basic indica che l'autenticazione di base è configurata.
Resource Type: Microsoft.ApiManagement/service/portalsettings/signup
Property: properties.enabled
| Proprietà | Valore | Significato |
|---|---|---|
properties.enabled | true | Registrazione visibile nell'interfaccia |
properties.enabled | false | Registrazione nascosta nell'interfaccia (l'API funziona ancora se l'autenticazione di base è presente!) |
Usa questa query per trovare istanze APIM potenzialmente vulnerabili:
resources
| where type == "microsoft.apimanagement/service"
| where properties.developerPortalStatus == "Enabled"
| where sku.name != "Consumption"
| project name, resourceGroup, subscriptionId, location, sku.name, properties.developerPortalStatus
Per verificare i provider di identità con autenticazione di base:
resources
| where type == "microsoft.apimanagement/service/identityproviders"
| where name endswith "/basic"
| project apimInstance=tostring(split(id, "/providers/Microsoft.ApiManagement/service/")[1]), resourceGroup, subscriptionId