
Aviso de segurança: o Portal do Desenvolvedor do Azure APIM permite o registro de contas entre locatários ao contornar as restrições de inscrição da UI. Relatado ao MSRC duas vezes - encerrado como "by design".
Status (01/12/2025): Esta vulnerabilidade continua ativa e explorável. A Microsoft não corrigiu este problema e o considera "by design" (comportamento intencional).
Uma vulnerabilidade de segurança no Portal do Desenvolvedor do Azure API Management (APIM) permite que atacantes registrem contas em qualquer instância do APIM que tenha a Autenticação Básica habilitada, mesmo quando os administradores desabilitaram o cadastro de usuários na interface do portal.
Esse bypass permite a criação de contas entre locatários (cross-tenant), potencialmente permitindo acesso não autorizado à documentação de APIs, chaves de assinatura e outros recursos expostos por meio do Portal do Desenvolvedor.
| Data | Ação |
|---|---|
| 2025-09-30 | Vulnerabilidade descoberta |
| 2025-09-30 | Relatório inicial enviado ao MSRC |
| 2025-10-30 | Resposta do MSRC: Encerrado como "não é uma vulnerabilidade" |
| 2025-11-01 | Segundo relatório enviado ao MSRC com detalhes adicionais |
| 2025-11-20 | Resposta do MSRC: Encerrado como "by design" |
| 2025-11-20 | Relatado ao CERT-FI |
| 2025-11-26 | Divulgação pública |
| 2025-11-27 | CVE solicitado à MITRE |
| 2026-07-09 | CVE-2025-66390 atribuído pela MITRE TL-Root/CNA-LR |
Quando o Azure APIM está configurado com Autenticação Básica para o Portal do Desenvolvedor, os administradores podem desabilitar o registro de usuários pela interface do Portal Azure. No entanto, isso apenas oculta o formulário de cadastro na interface do portal.
O endpoint da API de cadastro subjacente permanece ativo e aceita solicitações de registro diretamente, contornando completamente a restrição da interface.
Dois problemas se combinam para criar esta vulnerabilidade:
O ataque requer duas instâncias de APIM:
Passos:
Host da sua instância para a instância alvoDetalhe técnico fundamental: O bypass entre locatários funciona manipulando o cabeçalho Host na solicitação POST de cadastro. O endpoint /signup processa solicitações com base no cabeçalho Host, sem validar os limites entre locatários.
Exemplo de manipulação da solicitação:
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]",...}}
O problema central: desabilitar o cadastro na interface não desabilita a API subjacente. O endpoint da API aceita solicitações entre locatários com base no cabeçalho Host.
Sua instância do APIM é vulnerável se:
Sua instância do APIM NÃO é vulnerável se:
Ponto-chave: Desabilitar o cadastro na interface do Portal Azure NÃO é suficiente. O provedor de identidade de Autenticação Básica deve ser completamente removido para impedir o bypass de cadastro entre locatários.
Use estes valores de propriedade para identificar instâncias vulneráveis do APIM por meio do Azure Resource Graph, modelos ARM ou Azure Policy.
| Caminho da Propriedade | Valor Vulnerável | Descrição |
|---|---|---|
properties.developerPortalStatus | Enabled | O Portal do Desenvolvedor está acessível |
sku.name | Developer, Basic, Standard, Premium | Camadas não-Consumption (a camada Consumption tem recursos limitados de portal) |
O provedor de identidade de Autenticação Básica é um recurso separado dentro da instância do APIM:
Resource Type: Microsoft.ApiManagement/service/identityProviders
Name: basic
Vulnerável se existir: A presença de um recurso de provedor de identidade basic indica que a Autenticação Básica está configurada.
Resource Type: Microsoft.ApiManagement/service/portalsettings/signup
Property: properties.enabled
| Propriedade | Valor | Significado |
|---|---|---|
properties.enabled | true | Cadastro visível na interface |
properties.enabled | false | Cadastro oculto na interface (a API ainda funciona se a Autenticação Básica existir!) |
Use esta consulta para encontrar instâncias do APIM potencialmente vulneráveis:
resources
| where type == "microsoft.apimanagement/service"
| where properties.developerPortalStatus == "Enabled"
| where sku.name != "Consumption"
| project name, resourceGroup, subscriptionId, location, sku.name, properties.developerPortalStatus
Para verificar provedores de identidade de Autenticação Básica:
resources
| where type == "microsoft.apimanagement/service/identityproviders"
| where name endswith "/basic"
| project apimInstance=tostring(split(id, "/providers/Microsoft.ApiManagement/service/")[1]), resourceGroup, subscriptionId
Verifique o status do Portal do Desenvolvedor:
az apim show --name <apim-name> --resource-group <rg-name> --query "{name:name, portalStatus:developerPortalStatus, sku:sku.name}"
Liste os provedores de identidade (verifique se há 'basic'):