Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/bountyyfi/azure-apim-cross-tenant-signup-bypass
РазведкаАнализ уязвимостейЭксплуатация веб-приложенийСбор информацииБезопасность облачных средНеправильная КонфигурацияБезопасность API
GitHubbountyyfi/azure-apim-cross-tenant-signup-bypass

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Azure-APIM-Cross-Tenant-Signup-Bypass

Сообщение о безопасности: Портал разработчика Azure APIM позволяет регистрацию учетных записей между арендаторами, обходя ограничения регистрации в пользовательском интерфейсе. Дважды сообщалось в MSRC — закрыто как «по замыслу».

Репозиторий
16132 месяцев назадЕщё не проверено

Обход регистрации в Azure APIM между арендаторами

Статус (01.12.2025): Эта уязвимость по-прежнему активна и эксплуатируема. Microsoft не исправила эту проблему и считает её «предусмотренной конструкцией».

Уведомление о безопасности

GHSA-vcwf-73jp-r7mv

CVE-2025-66390

Краткое описание

Уязвимость безопасности на портале разработчика Azure API Management (APIM) позволяет злоумышленникам регистрировать учетные записи на любом экземпляре APIM, где включена базовая аутентификация, даже если администраторы отключили регистрацию пользователей в пользовательском интерфейсе портала.

Этот обход позволяет создавать учетные записи между арендаторами, что может привести к несанкционированному доступу к документации API, ключам подписки и другим ресурсам, доступным через портал разработчика.

График раскрытия

ДатаДействие
2025-09-30Уязвимость обнаружена
2025-09-30Первоначальный отчет отправлен в MSRC
2025-10-30Ответ MSRC: закрыто как «не уязвимость»
2025-11-01Второй отчет отправлен в MSRC с дополнительными деталями
2025-11-20Ответ MSRC: закрыто как «предусмотрено конструкцией»
2025-11-20Сообщено в CERT-FI
2025-11-26Публичное раскрытие
2025-11-27Запрошен CVE у MITRE
2026-07-09CVE-2025-66390 назначен MITRE TL-Root/CNA-LR

Детали уязвимости

Проблема

Когда Azure APIM настроен с базовой аутентификацией для портала разработчика, администраторы могут отключить регистрацию пользователей через пользовательский интерфейс портала Azure. Однако это только скрывает форму регистрации в интерфейсе портала.

Соответствующая конечная точка API регистрации остается активной и принимает запросы на регистрацию напрямую, полностью обходя ограничение, установленное в пользовательском интерфейсе.

Основная причина

Две проблемы вместе создают эту уязвимость:

  1. Ограничение только на уровне пользовательского интерфейса: Отключение регистрации только скрывает форму в пользовательском интерфейсе портала. Бэкенд-API регистрации остается активным и доступным.
  2. Отсутствие проверки арендатора: API регистрации не проверяет, исходит ли запрос из портала того же арендатора. Запросы могут быть сформированы из любого источника для регистрации на любом уязвимом экземпляре.

Вектор атаки

Для атаки требуется два экземпляра APIM:

  1. Экземпляр злоумышленника: Любой портал разработчика APIM с включенной регистрацией (или собственный экземпляр APIM злоумышленника)
  2. Целевой экземпляр: Портал разработчика APIM жертвы, где регистрация «отключена» в пользовательском интерфейсе, но базовая аутентификация всё ещё настроена

Шаги:

  1. Злоумышленник заходит на страницу регистрации своего собственного портала разработчика APIM (где регистрация включена)
  2. Злоумышленник заполняет форму регистрации и перехватывает запрос (например, с помощью Burp Suite)
  3. Злоумышленник меняет заголовок Host со своего экземпляра на целевой
  4. Злоумышленник отправляет измененный запрос
  5. Учетная запись создается на целевом экземпляре, несмотря на то, что регистрация «отключена» в консоли администратора
  6. Злоумышленник получает доступ к целевому порталу разработчика как зарегистрированный пользователь

Ключевая техническая деталь: Обход между арендаторами осуществляется путем манипуляции заголовком Host в POST-запросе на регистрацию. Конечная точка /signup обрабатывает запросы на основе заголовка Host без проверки границ арендатора.

Пример манипуляции запросом:

root@kitploit:~
POST /signup HTTP/1.1
Host: target-apim.developer.azure-api.net   <-- Изменено с экземпляра злоумышленника
Origin: https://attacker-apim.developer.azure-api.net
Content-Type: application/json

{"challenge":{...},"signupData":{"email":"[email protected]",...}}

Основная проблема: отключение регистрации в пользовательском интерфейсе НЕ отключает соответствующий API. Конечная точка API принимает запросы между арендаторами на основе заголовка Host.

Воздействие

  • Создание учетных записей между арендаторами — регистрация на любом экземпляре APIM с включенной базовой аутентификацией
  • Обход административных ограничений — ограничения на регистрацию неэффективны
  • Доступ к документации API, которая может содержать конфиденциальную внутреннюю информацию
  • Возможность запросить ключи подписки API в зависимости от конфигурации портала
  • Раскрытие внутреннего портала — внешние злоумышленники могут регистрироваться на «внутренних» порталах

Уязвимые конфигурации

Ваш экземпляр APIM уязвим, если:

  • Настроен поставщик удостоверений для базовой аутентификации (даже если регистрация «отключена» в пользовательском интерфейсе)
  • Портал разработчика развернут и доступен

Ваш экземпляр APIM НЕ уязвим, если:

  • Поставщик удостоверений для базовой аутентификации полностью удален (а не только отключена регистрация)
  • Настроена только аутентификация Azure AD / OAuth
  • Портал разработчика не развернут или отключен

Ключевой момент: Отключение регистрации в пользовательском интерфейсе портала Azure НЕДОСТАТОЧНО. Для предотвращения обхода регистрации между арендаторами поставщик удостоверений для базовой аутентификации должен быть полностью удален.

Свойства ресурсов Azure

Используйте эти значения свойств для идентификации уязвимых экземпляров APIM через Azure Resource Graph, шаблоны ARM или Azure Policy.

Свойства уязвимой конфигурации

Проверка поставщика удостоверений (подресурс)

Поставщик удостоверений для базовой аутентификации является отдельным ресурсом в экземпляре APIM:

root@kitploit:~
Resource Type: Microsoft.ApiManagement/service/identityProviders
Name: basic

Уязвим, если существует: Наличие ресурса поставщика удостоверений basic указывает, что базовая аутентификация настроена.

Настройки регистрации на портале (подресурс)

root@kitploit:~
Resource Type: Microsoft.ApiManagement/service/portalsettings/signup
Property: properties.enabled
СвойствоЗначениеЗначение
properties.enabledtrueРегистрация видна в пользовательском интерфейсе
properties.enabledfalseРегистрация скрыта в пользовательском интерфейсе (API всё ещё работает, если существует базовая аутентификация!)

Запрос Azure Resource Graph

Используйте этот запрос для поиска потенциально уязвимых экземпляров APIM:

root@kitploit:~
resources
| where type == "microsoft.apimanagement/service"
| where properties.developerPortalStatus == "Enabled"
| where sku.name != "Consumption"
| project name, resourceGroup, subscriptionId, location, sku.name, properties.developerPortalStatus

Для проверки поставщиков удостоверений с базовой аутентификацией:

root@kitploit:~
resources
| where type == "microsoft.apimanagement/service/identityproviders"
| where name endswith "/basic"
| project apimInstance=tostring(split(id, "/providers/Microsoft.ApiManagement/service/")[1]), resourceGroup, subscriptionId

Команды Azure CLI

Проверка статуса портала разработчика:

root@kitploit:~
az apim show --name <apim-name> --resource-group <rg-name> --query "{name:name, portalStatus:developerPortalStatus, sku:sku.name}"

Список поставщиков удостоверений (проверьте наличие 'basic'):

root@kitploit:~
az apim identity-provider list --resource-group <rg-name> --service-name <apim-name> --query "[].name"

Проверка настроек регистрации:

root@kitploit:~
az rest --method get --url "https://management.azure.com/subscriptions/<sub-id>/resourceGroups/<rg-name>/providers/Microsoft.ApiManagement/service/<apim-name>/portalsettings/signup?api-version=2022-08-01" --query "properties.enabled"

Сводная таблица

Критическая комбинация: Экземпляр уязвим для обхода регистрации, когда:

  • properties.developerPortalStatus == 'Enabled' И
  • ресурс identityProviders/basic существует И
  • portalsettings/signup.properties.enabled == false

Идентификация экземпляров APIM вашей организации

ЮРИДИЧЕСКОЕ ПРЕДУПРЕЖДЕНИЕ: Информация ниже предоставлена исключительно для идентификации и защиты собственных экземпляров Azure APIM вашей организации. Несанкционированный доступ к компьютерным системам является незаконным. Проверяйте только те системы, которые вам принадлежат или на которые у вас есть явное письменное разрешение.

Google Dorks

Поиск порталов с регистрацией через базовую аутентификацию (наиболее вероятно уязвимы):

root@kitploit:~
site:developer.azure-api.net "Sign up" "Email" "Password"
root@kitploit:~
site:developer.azure-api.net "Create account" "Username"
root@kitploit:~
site:developer.azure-api.net inurl:/signup "register"

Поиск порталов со страницами входа (указывает, что базовая аутентификация может быть настроена):

root@kitploit:~
site:developer.azure-api.net "Sign in" "Email" "Password" -"Azure AD" -"Microsoft account"
root@kitploit:~
site:developer.azure-api.net inurl:/signin "password"

Поиск порталов разработчика с открытой документацией API:

root@kitploit:~
site:developer.azure-api.net inurl:/apis "Subscribe"
root@kitploit:~
site:developer.azure-api.net "API" "Products" "Subscribe"

Общий поиск:

root@kitploit:~
site:*.developer.azure-api.net
root@kitploit:~
inurl:developer.azure-api.net "Developer Portal"

Shodan

Поиск порталов разработчика APIM:

root@kitploit:~
http.title:"Developer Portal" http.html:"azure-api.net"
root@kitploit:~
ssl.cert.subject.cn:"*.developer.azure-api.net"
root@kitploit:~
http.html:"developerPortal" http.html:"azure"

Массовое сканирование с Nuclei

После обнаружения целей выполните сканирование с Nuclei:

root@kitploit:~
# Сохраните цели в файл
echo "https://target1.developer.azure-api.net" > targets.txt
echo "https://target2.developer.azure-api.net" >> targets.txt

# Массовое сканирование
nuclei -t azure-apim-signup-bypass.yaml -l targets.txt -o vulnerable.txt

Поиск активов вашей организации

Если ваша организация использует Azure APIM, вы можете идентифицировать свои собственные экземпляры, используя:

Портал Azure:

  • Перейдите на портал Azure → Все ресурсы → Фильтр по "API Management"
  • Или используйте Azure Resource Graph Explorer с запросами из предыдущего раздела

Azure CLI (для ваших подписок):

root@kitploit:~
# Список всех экземпляров APIM в ваших подписках
az apim list --query "[].{name:name, resourceGroup:resourceGroup, url:developerPortalUrl}"

Проверка ваших собственных экземпляров

Используйте эти методы, чтобы проверить, уязвимы ли экземпляры APIM ВАШЕЙ организации:

Использование скрипта проверки:

root@kitploit:~
# Проверка вашего собственного экземпляра
python apim_vuln_checker.py https://YOUR-ORG.developer.azure-api.net

# С проверкой свойств Azure RM (рекомендуется для внутренних аудитов)
python apim_vuln_checker.py --azure -s YOUR-SUB-ID -g YOUR-RG -n YOUR-APIM-NAME

Использование Nuclei для внутренних проверок безопасности:

root@kitploit:~
# Сканирование экземпляров APIM вашей организации
nuclei -t azure-apim-signup-bypass.yaml -u https://YOUR-ORG.developer.azure-api.net

Признаки уязвимой конфигурации

При аудите своих собственных экземпляров ищите:

  • На портале разработчика отображается "Sign up" с полями Email/Password (а не только "Sign in with Microsoft")
  • Поставщик удостоверений базовой аутентификации настроен на портале Azure
  • Регистрация "отключена" в пользовательском интерфейсе, но поставщик базовой аутентификации всё ещё существует

Признаки НЕуязвимости:

  • Видны только опции "Sign in with Microsoft" или "Azure AD"
  • Не настроен поставщик удостоверений базовой аутентификации
  • Портал разработчика полностью отключен

Авторизованное тестирование на проникновение

Если вы специалист по безопасности, проводящий авторизованное тестирование:

  1. Убедитесь, что у вас есть письменное разрешение от владельца системы
  2. Документируйте объем и границы вашего задания
  3. Следуйте практике ответственного раскрытия
  4. Сообщайте о находках организации, а не эксплуатируйте их публично

Ответственное раскрытие

Если вы обнаружили уязвимый экземпляр APIM третьей стороны:

  1. НЕ ПЫТАЙТЕСЬ создавать учетные записи или получать доступ к системе
  2. Свяжитесь напрямую с командой безопасности организации
  3. Предоставьте им данное уведомление, чтобы они могли устранить проблему
  4. Предоставьте разумное время для исправления до любого раскрытия

Скрипт проверки

Предоставлен скрипт на Python для проверки, является ли ваш экземпляр APIM уязвимым.

Установка

root@kitploit:~
# Базовая установка (только HTTP-проверка)
pip install requests colorama

# Полная установка (включает проверку свойств Azure RM)
pip install requests colorama azure-identity

Использование

Скрипт поддерживает два режима:

  1. HTTP Probe — внешняя черный ящик проверка через конечные точки портала разработчика
  2. Azure RM Check — внутренняя проверка свойств через Azure Resource Manager API
root@kitploit:~
# HTTP-проверка (внешняя)
python apim_vuln_checker.py https://your-apim.developer.azure-api.net

# Проверка свойств Azure RM (требуется az login)
python apim_vuln_checker.py --azure -s <subscription-id> -g <resource-group> -n <apim-name>

# Комбинированная проверка (HTTP и Azure RM)
python apim_vuln_checker.py https://your-apim.developer.azure-api.net \
    --azure -s <subscription-id> -g <resource-group> -n <apim-name>

# Подробный вывод
python apim_vuln_checker.py https://your-apim.developer.azure-api.net -v

# Пропустить проверку SSL
python apim_vuln_checker.py https://your-apim.developer.azure-api.net -k

# Вывод в JSON
python apim_vuln_checker.py https://your-apim.developer.azure-api.net --json

Проверки свойств Azure RM

При использовании режима --azure скрипт напрямую запрашивает Azure Resource Manager API для проверки:

Свойство

Предварительные требования для режима Azure RM:

  1. Установите azure-identity: pip install azure-identity
  2. Аутентифицируйтесь в Azure: az login
  3. Убедитесь, что у вас есть права Reader на ресурс APIM

Пример вывода

root@kitploit:~
   ___                 __              ____      
  / _ )___  __ _____  / /___ ____ __  / __ \__ __
 / _  / _ \/ // / _ \/ __/ // / // / / /_/ / // /
/____/\___/\_,_/_//_/\__/\_, /\_, /  \____/\_, / 
                        /___//___/        /___/  
    
    Автор: Mihalis Haatainen, Bountyy Oy - www.bountyy.fi

======================================================================
Azure APIM Vulnerability Checker
Обнаружение обхода регистрации между арендаторами
======================================================================

[?] Проверка доступности конечной точки регистрации...
[i] Конечная точка регистрации доступна
[?] Проверка доступности API регистрации базовой аутентификации...
[!] API регистрации базовой аутентификации АКТИВЕН (проверка captcha)
[?] Проверка, скрыта/отключена ли регистрация в пользовательском интерфейсе...
[i] Страница регистрации возвращает 404 (скрыта в пользовательском интерфейсе)

======================================================================
РЕЗУЛЬТАТЫ ОЦЕНКИ УЯЗВИМОСТИ
======================================================================

Цель: https://example.developer.azure-api.net

Уровень риска: КРИТИЧЕСКИЙ — УЯЗВИМО ДЛЯ ОБХОДА РЕГИСТРАЦИИ

Подробные проверки:

  [!] signup_ui: Конечная точка регистрации доступна
  [!] basic_auth_api: API регистрации базовой аутентификации АКТИВЕН (проверка captcha)
  [+] signup_ui_hidden: Страница регистрации возвращает 404 (скрыта в пользовательском интерфейсе)

Рекомендации:

КРИТИЧЕСКО: ПОДТВЕРЖДЕНА УЯЗВИМОСТЬ ОБХОДА РЕГИСТРАЦИИ

API регистрации базовой аутентификации доступен, даже если пользовательский интерфейс скрывает регистрацию.
Злоумышленники могут регистрировать учетные записи, напрямую вызывая API.

Немедленные действия:
  1. ОТКЛЮЧИТЕ базовую аутентификацию на портале Azure немедленно
  2. Проверьте все учетные записи пользователей портала разработчика на предмет несанкционированных регистраций
  3. Просмотрите журналы создания пользователей — проверьте регистрации на основе API
  4. Внедрите аутентификацию только через Azure AD

Шаблон Nuclei

Предоставлен шаблон Nuclei для автоматизированного сканирования.

Использование

root@kitploit:~
# Одиночная цель
nuclei -t azure-apim-signup-bypass.yaml -u https://target.developer.azure-api.net

# Несколько целей из файла
nuclei -t azure-apim-signup-bypass.yaml -l targets.txt

# С прокси (для отладки)
nuclei -t azure-apim-signup-bypass.yaml -u https://target.developer.azure-api.net -proxy http://127.0.0.1:8080

# Пропустить проверку SSL
nuclei -t azure-apim-signup-bypass.yaml -u https://target.developer.azure-api.net -insecure

Детали шаблона

  • Отправляет POST-запрос к конечной точке /signup с тестовыми данными captcha
  • Обнаруживает активный API регистрации по ответам об ошибке captcha/валидации
  • Оценка CVSS: 6.5 (Средне-высокий)
  • CWE-284: Неправильный контроль доступа

Устранение

Немедленные действия

  1. Полностью удалите поставщика удостоверений базовой аутентификации на портале Azure:
  • Перейдите к вашему экземпляру APIM
  • Перейдите в Портал разработчика -> Идентификации
  • Удалите поставщика удостоверений "Имя пользователя и пароль" полностью
  • Примечание: Простое отключение регистрации в пользовательском интерфейсе НЕДОСТАТОЧНО
  1. Проверьте существующие учетные записи:
  • Просмотрите все учетные записи пользователей портала разработчика
  • Ищите учетные записи, созданные через API (проверьте временные метки и шаблоны создания)
  • Удалите любые несанкционированные учетные записи
  1. Включите аутентификацию Azure AD:
  • Настройте Azure AD как единственного поставщика удостоверений
  • Это обеспечит правильные границы арендатора

Долгосрочные рекомендации

  • Используйте исключительно аутентификацию Azure AD
  • Не полагайтесь на ограничения регистрации на уровне пользовательского интерфейса
  • Контролируйте активность регистрации на портале разработчика
  • Регулярно проводите аудит учетных записей пользователей портала

Ответ Microsoft

Центр реагирования на угрозы безопасности Microsoft (MSRC) был уведомлен дважды об этой уязвимости. Оба отчета были закрыты со следующим заключением:

«Предусмотрено конструкцией»

MSRC не считает это уязвимостью безопасности, несмотря на обход административных ограничений и последствия для разных арендаторов.

Файлы

  • apim_vuln_checker.py — скрипт проверки уязвимости на Python
  • azure-apim-signup-bypass.yaml — шаблон Nuclei для автоматического сканирования
  • README.md — данный файл

Автор

Mihalis Haatainen
Bountyy Oy — финская компания, занимающаяся тестированием на проникновение и исследованиями в области безопасности

  • Веб-сайт: www.bountyy.fi

Лицензия

Данное уведомление и связанные инструменты выпущены для защитных целей. Используйте ответственно.

Лицензия MIT — см. файл LICENSE для подробностей.

Ссылки

  • Запись в блоге: Когда «Отключено» не означает отключено
  • Документация Azure API Management
  • Обзор портала разработчика APIM
Скачать инструмент
Путь к свойствуУязвимое значениеОписание
properties.developerPortalStatusEnabledПортал разработчика доступен
sku.nameDeveloper, Basic, Standard, PremiumУровни, отличные от Consumption (уровень Consumption имеет ограниченные функции портала)
УсловиеСвойство/РесурсУязвимое значение
Портал включенproperties.developerPortalStatus== 'Enabled'
SKU, отличный от Consumptionsku.name!= 'Consumption'
Существует базовая аутентификацияресурс identityProviders/basicРесурс существует
Регистрация скрыта (возможен обход)portalsettings/signup.properties.enabled== false (с базовой аутентификацией)
Уязвимое значение
properties.developerPortalStatus== 'Enabled'
sku.name!= 'Consumption'
ресурс identityProviders/basicСуществует
portalsettings/signup.properties.enabled== false