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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2021-21239 — Эксплойт для CVE-2021-21239: обход проверки подписи SAML в pysaml2/Redash. Формирует поддельные SAML-ответы со встроенными открытыми ключами для выдачи себя за пользователей и повышения привилегий через JIT-провижининг. | Kitploit
Инструменты/GitHubGitHub/illera88/cve-2021-21239
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеАутентификацияОбучение и Образование
GitHubillera88/cve-2021-21239

CVE-2021-21239

Эксплойт для CVE-2021-21239: обход проверки подписи SAML в pysaml2/Redash. Формирует поддельные SAML-ответы со встроенными открытыми ключами для выдачи себя за пользователей и повышения привилегий через JIT-провижининг.

Репозиторий
0 лет назадЕщё не проверено

Популярное

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

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

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

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

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

Технический отчет о CVE-2021-21239: уязвимость аутентификации SAML в Redash

Введение в SAML

Security Assertion Markup Language (SAML) — это открытый стандарт для обмена данными аутентификации и авторизации между сторонами в федеративной системе идентификации. Он обеспечивает единый вход (SSO) между доменами. Ключевые компоненты:

  • Поставщик удостоверений (IdP) : Сервис, который аутентифицирует пользователя и выдает утверждение SAML (например, SAML IdP от Google). Он подписывает утверждение своим закрытым ключом для обеспечения целостности и подлинности.
  • Поставщик услуг (SP) : Приложение, которое полагается на IdP для аутентификации (например, Redash). SP проверяет подпись, используя открытый ключ или сертификат IdP, чтобы доверять утверждению.

В типичном потоке SAML SP перенаправляет пользователя в IdP для аутентификации. IdP возвращает подписанный ответ SAML, содержащий утверждения о пользователе (например, email, имя). SP проверяет подпись и подготавливает или выполняет вход пользователя.

Объяснение уязвимости

CVE-2021-21239 — это уязвимость обхода проверки подписи в библиотеке pysaml2 (версии <6.5.0), используемой Redash <=10.1.0 для SAML SSO. На высоком уровне она позволяет злоумышленнику подделать ответ SAML с произвольным встроенным открытым ключом, что дает возможность выдать себя за пользователя и повысить привилегии через JIT-подготовку.

Уязвимость возникает из-за того, как pysaml2 вызывает xmlsec1 для проверки подписей SAML. Xmlsec1 по умолчанию предпочитает встроенные открытые ключи в ответа SAML настроенному сертификату IdP. Злоумышленник может создать ответ SAML с самостоятельно сгенерированной парой ключей RSA, встроить открытый ключ в и подписать утверждение закрытым ключом. Поскольку pysaml2 не ограничивает использованием только доверенного сертификата IdP, поддельная подпись считается действительной, что позволяет злоумышленнику войти как любой пользователь (например, администратор) и получить максимальные привилегии.

<ds:KeyInfo>
<ds:RSAKeyValue>
xmlsec1

На уровне кода уязвимость существует в sigver.py pysaml2 (функция check_signature). В списке команд xmlsec1 отсутствует опция --enabled-key-data raw-x509-cert, что позволяет xmlsec1 использовать ненадежные встроенные ключи:

root@kitploit:~
com_list = [
    self.xmlsec, '--verify', '--enabled-reference-uris', 'empty,same-doc',
    '--pubkey-cert-pem', cert_file_name,
    '--id-attr:%s' % id_attr, node_name,
    '--node-id', nodeid, '--output', output_file_name, xml_file_name
]

Это позволяет атаки, при которых злоумышленник изменяет email в <saml:NameID> для выдачи себя за любого пользователя, используя JIT-подготовку.

Настройка для тестирования эксплойта

Для тестирования эксплойта используется локальный экземпляр Redash (v10.1.0 или более ранняя версия), запущенный с помощью Docker Compose. Настройка включает конфигурацию SAML SSO с IdP Google:

  • Установите Redash через Docker Compose: клонируйте репозиторий Redash, переключитесь на уязвимый тег (например, v10.1.0) и выполните docker-compose up.
  • Настройте SAML в переменных окружения Redash (например, REDASH_SAML_LOGIN_ENABLED=true, REDASH_SAML_METADATA_URL=... от IdP Google).
  • Используйте SAML IdP Google для тестирования: настройте приложение SAML Google Workspace с URL обратного вызова Redash.
  • Откройте локальный экземпляр Redash для IdP Google с помощью Ngrok.

Эта настройка позволяет протестировать поддельный ответ SAML, отправленный через Python-скрипт или Burp Suite, подтверждающий повышение привилегий.

Техническое объяснение и исправление

Уязвимость возникает из-за того, что вызов xmlsec1 в pysaml2 позволяет использовать встроенные ключи для проверки, обходя доверенный сертификат IdP. Злоумышленник генерирует пару ключей RSA, создает ответ SAML с открытым ключом в <ds:RSAKeyValue>, изменяет атрибуты (например, email на администратора) и подписывает утверждение. Xmlsec1 проверяет с использованием встроенного ключа, считая его действительным. Исправление было реализовано в pysaml2 v6.5.0 (первичный коммит от 17 января 2021 г.) в src/saml2/sigver.py. Список команд xmlsec1 был обновлен, чтобы включить --enabled-key-data raw-x509-cert, ограничивая проверку настроенным сертификатом IdP:

root@kitploit:~
com_list = [
    self.xmlsec, '--verify', '--enabled-reference-uris', 'empty,same-doc',
    '--pubkey-cert-pem', cert_file_name,
    '--enabled-key-data', 'raw-x509-cert',
    '--id-attr:%s' % id_attr, node_name,
    '--node-id', nodeid, '--output', output_file_name, xml_file_name
]

Это обеспечивает проверку цепочки доверия, предотвращая использование встроенных ключей. Redash исправил это обновлением pysaml2 в более поздних версиях (например, v11+). Уязвимые версии не использовали --insecure; ошибка заключалась в отсутствии опции ограничения.

Код эксплойта

Код эксплойта реализован в файле cve-2021-21239.py. Этот скрипт Python автоматизирует процесс подделки ответа SAML для эксплуатации CVE-2021-21239 в Redash <=10.1.0, позволяя выдать себя за пользователя и повысить привилегии через JIT-подготовку. Эксплойт нацелен на SAML IdP Google Workspace, но атака была протестирована и с другими IdP (keycloak). Скрипт выполняет следующие шаги:

  1. Разбирает аргументы командной строки: Принимает входные данные для файла шаблона SAML, URL Redash, ID IdP, ID утверждения, email, имя и фамилию, с значениями по умолчанию для тестирования (например, email="[email protected]").
  2. Определяет ID IdP: Получает idpid из конечной точки входа SAML Redash, если он не указан, обеспечивая совместимость с конфигурацией цели.
  3. Заполняет XML-шаблон: Использует шаблон (SAMLResponseTempalte.xml) с заполнителями для email, имен, временных меток и ID утверждения. Динамические временные метки UTC генерируются с окном действия в 5 минут, чтобы пройти проверку Redash.
  4. Генерирует пару ключей RSA: Создает 2048-битный закрытый ключ RSA для подписи утверждения SAML.
  5. Подписывает XML: Использует библиотеку Python xmlsec для подписи элемента <saml:Assertion> с помощью RSA-SHA256, встраивая открытый ключ в <ds:RSAKeyValue> для эксплуатации уязвимости.
  6. Проверяет подпись: Подтверждает, что подпись действительна и структурно правильна для поддельного ответа SAML.
  7. Отправляет SAMLResponse: Кодирует подписанный XML в Base64 и URL, отправляя на конечную точку обратного вызова SAML Redash (/saml/callback?org_slug=default).
  8. Извлекает cookie сессии: Получает cookie сессии из ответа, позволяя злоумышленнику выдать себя за целевого пользователя.
  9. Выводит список пользователей: Запрашивает список пользователей Redash с членством в группах. Это позволяет идентифицировать и нацелиться на администраторов.

Трудности при эксплуатации и их обход

Эксплуатация CVE-2021-21239 требовала создания поддельного ответа SAML, который Redash принимает через JIT-подготовку. Ключевые трудности и обходы:

  • Обход проверки подписи: Pysaml2 разрешал встроенные ключи, обойдено генерацией пары ключей RSA и встраиванием открытого ключа в <ds:RSAKeyValue>, подписью закрытым ключом.
  • Проблемы с подписыванием XML: Первоначальные попытки с бинарником xmlsec1 сработали, но библиотека Python xmlsec вызывала несовпадение дайджеста из-за проблем с пробелами/канонизацией. Обход путем сериализации XML в одну строку (etree.tostring(..., pretty_print=False)) перед подписью.
  • Проверка временных меток: Далекое будущее NotOnOrAfter вызывало отклонение; обход с использованием динамических временных меток UTC с окном в 5 минут.
  • Несоответствие HTTP-заголовков: Библиотека Requests дважды кодировала SAMLResponse, вызывая ошибки разбора; обход путем отправки необработанных данных формы.
  • Настройка Redash: Локальный Redash требовал Ngrok для IdP Google; обход с помощью туннелирования через Ngrok и соответствующей настройки SAML.

Эти трудности подчеркивают необходимость точной манипуляции XML и настройки окружения для эффективной эксплуатации уязвимости. Предоставленный код эксплойта успешно демонстрирует это, подделывая ответ SAML для выдачи себя за пользователей и получения доступа.

Скачать инструмент