Уязвимость SAP Cloud SDK могла отправить OAuth2-секреты злоумышленнику

В официальном Python-клиенте SAP для сервисов SAP Business Technology Platform (BTP) обнаружили критическую уязвимость. Ошибка в Cloud SDK for Python могла привести к тому, что приложение отправляло на сервер злоумышленника свои учётные данные OAuth2: client ID и client secret. SAP присвоила уязвимости CVE-2026-89111 и максимальную оценку CVSS — 10,0 из 10. Компания классифицировала её как SSRF: уязвимость, из-за которой сервер обращается не к тому адресу, который должен был использовать.
Уязвимость SAP Cloud SDK могла отправить OAuth2-секреты злоумышленнику
Изображение носит иллюстративный характер

Риск возникал, когда приложение передавало SDK поддомен арендатора — tenant subdomain, по которому определяется клиент для запроса. SDK формировал адрес для получения токена, подставляя переданное значение в URL из конфигурации приложения. В версиях без проверки поддомен использовался как есть. Если им управлял атакующий, он мог направить запрос на собственный сервер и получить client ID и client secret приложения. Что именно можно сделать с этими данными, зависит от разрешений клиента; в бюллетене SAP возможные действия злоумышленника не перечислены.
Добавленная проверка разрешает только одно имя длиной не более 63 символов, составленное из букв, цифр и дефисов. Значение с другими символами отклоняется, запрос останавливается с ошибкой. Исправление вошло в версию 0.45.2, выпущенную 21 августа. По данным SAP, эта проверка относится к модулям Agent Gateway, Destination и Document Management Service.
История версий, однако, оказалась сложнее одной исправленной сборки. В версиях ниже 0.45.2 проверки не было: это подтверждает бюллетень SAP, а тестирование The Hacker News охватило, среди прочих, версии 0.36.0, 0.36.1, 0.36.2 и 0.45.1. В версиях с 0.45.2 по 0.52.2 проверка присутствовала: издание проверило все 18 выпусков этого диапазона.
Новая проблема появилась в версии 0.53.0, когда модуль Destination перевели на общий код для получения токенов. В этом коде проверки не оказалось. В версиях с 0.53.0 по 0.55.0, опубликованных с 10 по 18 сентября, она отсутствовала как минимум в некоторых запросах через Destination. В версии 0.55.0 проверка также отсутствовала для вызовов Document Management Service. Выпуск 0.55.1 от 18 сентября вернул её в общий код. В примечаниях к релизу сказано: «Теперь передача поддомена арендатора с разделителями URL немедленно вызывает ValueError вместо того, чтобы незаметно направлять учётные данные на конечную точку, контролируемую злоумышленником».
13 октября The Hacker News проверила исходный код всех выпусков с 0.45.1 по 0.58.4, а также трёх версий ветки 0.36, используя тесты, добавленные SAP в версии 0.55.1. Шесть выпусков с 0.53.0 по 0.55.0 провалили девять из 11 тестов. Версия 0.55.1 и следующие за ней 11 выпусков прошли все проверки. Версии 0.36.1 и 0.36.2, вышедшие 4 и 10 сентября, тоже не содержали проверки, хотя исправление 0.45.2 было опубликовано ещё 21 августа. Все три выпуска ветки 0.36 оказались без неё.
На 13 октября бюллетень SAP называл уязвимыми версии ниже 0.45.2 и не отмечал как затронутые выпуски выше этого порога. При этом ни бюллетень, ни примечания к релизам не уточняют, относятся ли шесть версий с отсутствующей проверкой из диапазона 0.53.0–0.55.0 к CVE-2026-89111. Результаты тестирования показывают, что защита в них пропущена, но официального решения SAP об их статусе по CVE в опубликованных материалах нет.
Пользователям подходят версии 0.45.2–0.52.2 или 0.55.1–0.58.4. На 13 октября самой новой версией на PyPI была 0.58.4. Обновление внутри ветки 0.36 проблему не исправляет. Если обновить приложение пока нельзя, SAP советует до передачи значения в SDK сверять каждый tenant subdomain со списком зарегистрированных арендаторов приложения. Компания не сообщает, нужно ли менять client ID и client secret, если приложение работало на версии без проверки.
Непроверенный код присутствовал в SDK с первого выпуска пакета на PyPI, опубликованного 16 марта. Исправление появилось в версии 0.45.2 от 21 августа, но в примечаниях его поместили в раздел «Исправления ошибок», а не обозначили как устранение уязвимости. Там говорилось: «Ранее недопустимые значения без предупреждения использовались для формирования некорректного URL». В качестве сообщившего об ошибке указан пользователь GitHub SunandM. Примечания не содержат сведений об атаках; бюллетень безопасности SAP вышел 13 октября.


Новое на сайте

20854Как дешёвые Android-смартфоны превращаются в чужие прокси? 20853В Индии имя звонящего появится на экране вместе с номером 20852Как проверить готовность команды к звонку с клонированным голосом? 20851Уязвимости MarkLogic: делегированные права могли открыть путь к администраторскому... 20850Как GitHub закрыл лазейку, угрожавшую тысячам npm-пакетов? 20849Hirudo подменяет банковские приложения, чтобы обойти их защиту 20848Как Vghost превратил старую ошибку Linux в путь к root? 20847Уязвимости в PAN-OS и Cisco Secure Email Gateway уже используют атакующие 20846Как уязвимость GitLab могла открыть сервер для чужого кода? 20845Уязвимость SAP Cloud SDK могла отправить OAuth2-секреты злоумышленнику 20844Уязвимость в Nextcloud открыла путь к веб-оболочкам на серверах 20843Смогут ли малые ИИ-модели превратить бытовую технику в ботнет? 20842Пять уязвимостей NGINX: кому грозит риск и как закрыть его 20841Тайный диктофон в OpenAI: что утверждают следователи 20840Как проверять уязвимость входа, не заходя дальше дозволенного?
Ссылка