Уязвимость в SAP Cloud SDK для Python может привести к отправке учетных данных клиента OAuth2 приложения на сервер, контролируемый злоумышленником, сообщила SAP в консультативном заключении по безопасности от 13 октября. Уязвимость затрагивает мультиарендные приложения на платформе SAP Business Technology Platform (BTP), использующие SDK — официальный клиент SAP для служб BTP. Злоумышленник должен иметь возможность контролировать поддомен арендатора, имя которого приложение передает SDK для указания арендатора, к которому относится запрос.
Уязвимость отслеживается как CVE-2026-89111 и имеет оценку CVSS от SAP 10.0 из 10. В консультативном заключении указана версия 0.45.2, выпущенная 21 августа, как исправление.
SDK обрабатывает аутентификацию для этих служб с помощью учетных данных клиента приложения: идентификатора клиента и секрета клиента. Версия 0.45.2 добавила проверку, которая отклоняет любой поддомен арендатора, не являющийся простым именем.
Шесть последующих выпусков не применяют эту проверку во всех случаях, обнаружил The Hacker News. Версии с 0.53.0 по 0.55.0, опубликованные между 10 и 18 сентября, пропускают ее, когда приложение вызывает модуль Destination service SDK.
Версия 0.53.0 перенесла этот модуль на новый общий код для запроса токенов, и этот код не включал проверку. Версия 0.55.1 добавила ее туда 18 сентября.
«Передача поддомена арендатора, содержащего разделители URL, теперь вызывает ValueError немедленно, вместо того чтобы молча направлять учетные данные на конечную точку, контролируемую злоумышленником», — говорится в заметках к выпуску 0.55.1.
The Hacker News провел собственные тесты SAP для проверки 13 октября на исходном коде каждого выпуска от 0.45.1 до 0.58.4 и трех выпусков 0.36. Шесть выпусков не прошли 9 из 11 тестов, добавленных SAP в версии 0.55.1. Эта версия и 11 последующих выпусков прошли все 11 тестов.
По состоянию на 13 октября в консультативном заключении не указаны версии выше 0.45.2 как затронутые. Ни оно, ни заметки к выпуску не сообщают, подпадают ли шесть выпусков под действие CVE-2026-89111.
Два выпуска из старой линейки 0.36 также не имеют проверки. Версии 0.36.1 и 0.36.2 были опубликованы 4 и 10 сентября, после августовского исправления, и не прошли тесты, написанные для нее SAP. Обе попадают в диапазон версий ниже 0.45.2, указанный в консультативном заключении.
Версии с 0.45.2 по 0.52.2 и с 0.55.1 по 0.58.4 содержат проверку. Версия 0.58.4 была последним выпуском на PyPI, индексе пакетов Python, 13 октября.
Обновление в рамках линейки 0.36 не добавляет проверку. Ни один из трех ее выпусков не содержит ее.
Приложения, которые пока не могут обновиться, могут сравнить каждый поддомен арендатора со списком зарегистрированных арендаторов перед передачей его в SDK, говорится в консультативном заключении SAP.
Уязвимость имеет значение только там, где приложение передает поддомен арендатора в SDK. Августовское исправление охватило три модуля: Agent Gateway, Destination и Document Management Service.
В консультативном заключении не указано, должны ли приложения, использовавшие выпуск без проверки, заменить свои учетные данные клиента.
Когда приложение передает поддомен арендатора, SDK запрашивает токен доступа для этого арендатора. Для этого он берет URL токена из конфигурации приложения и заменяет часть его поддоменом арендатора.
Выпуски без проверки использовали любое предоставленное значение. Затем SDK отправлял идентификатор клиента и секрет клиента приложения по полученному URL для запроса токена.
По словам SAP, злоумышленник, контролирующий поддомен арендатора, может направить этот запрос на свой собственный сервер.
Проверка принимает только одно имя, состоящее из букв, цифр и дефисов, длиной до 63 символов. Любое другое значение останавливает запрос с ошибкой.
SAP классифицирует уязвимость как подделку запроса на стороне сервера (SSRF) — слабость, при которой сервер может быть заставлен отправить запрос к непреднамеренному месту назначения.
Что злоумышленник мог бы сделать с учетными данными, зависит от того, что разрешено клиенту приложения. В консультативном заключении это не указано.
Непроверенный код присутствовал в SDK с момента его первого выпуска на PyPI 16 марта.
В заметках к августовскому выпуску исправление указано в разделе «Исправления ошибок» и не упоминает безопасность. «Ранее недействительные значения молча использовались для построения некорректного URL», — говорится в заметках.
Консультативное заключение последовало через 53 дня. Оно отмечает пользователя GitHub по имени СунандМ за сообщение об уязвимости и не сообщает об атаках.
Всегда имейте в виду, что редакции могут придерживаться предвзятых взглядов в освещении новостей.
Автор – Swati Khandelwal




