Уязвимость SAML позволяет преступнику входить в аккаунт под чужим именем

Уязвимость SAML позволяет преступнику входить в аккаунт под чужим именем

Уязвимость SAML позволяет преступнику входить в аккаунт под чужим именем

Исследователи безопасности из Duo Labs и US Computer Emergency Response Team Coordination Center (CERT/CC) сообщили о новой уязвимости SAML, которая позволяет злоумышленникам осуществлять аутентификацию в качестве законных пользователей без знания пароля.

SAML (Security assertion markup language — язык разметки декларации безопасности) — основанный на XML язык, который часто используется для обмена данными аутентификации и авторизации между сторонами, в частности, между поставщиком сервиса (service provider) и поставщиком учетных записей (identity provider). 

Самая важная область использования SAML — в технологиях единого входа (single sign-on, SSO), которые обеспечивают сквозную аутентификацию при работе через Web-браузер. В отличие от других схем аутентификации, таких как OAuth, OpenID, OpenID Connect и Facebook Connect, SSO хранит идентификатор на центральном сервере, где у пользователей есть учетные записи.

Когда пользователь пытается войти в другие корпоративные приложения, эти приложения (поставщики услуг) отправляют запросы на локальный SSO-сервер (поставщик учетных записей) через SAML.

Исследователи Duo Labs обнаружили недостаток дизайна, который влияет на программы SSO и несколько библиотек с открытым исходным кодом, предназначенных для поддержки SSO-операций на основе SAML. Подробное описание недостатка можно прочитать в отчете Duo Labs

Суть уязвимости в том, как эти библиотеки обрабатывают XML-комментарии, включенные в середину запроса ответа SAML. Например, специалисты заметили, что даже если злоумышленник вставляет комментарий внутри поля имени пользователя, он все равно может получить доступ к аккаунту. Единственным условием для использования уязвимости является наличие учетной записи в сети жертвы.

На данный момент уязвимость касается следующих провайдеров SAML:

OneLogin - python-saml — CVE-2017-11427

OneLogin - ruby-saml — CVE-2017-11428

Clever - saml2-js — CVE-2017-11429

OmniAuth-SAML — CVE-2017-11430

Shibboleth — CVE-2018-0489

Duo Network Gateway — CVE-2018-7340

Как видно, недостаток затрагивает не всех провайдеров, кроме того, он не касается учетных записей, защищенных двухфакторной аутентификацией.

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

Расширения Chrome могут слить секреты URL через атаку по стороннему каналу

Как оказалось, расширения Chrome можно использовать для слива кодов авторизации, сеансовых ID и других секретов из URL любой открытой вкладки. Никаких специальных разрешений для этого не понадобится, только доступ к declarativeNetRequest API.

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

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

Исследователь Луан Эррера (Luan Herrera) обнаружил, что блокировку, диктуемую правилами, Chrome производит почти мгновенно, за 10-30 мс, а остальные запросы выполняются дольше (~50-100ms) — из-за сетевых подключений. Эту разницу во времени расширение может использовать для бинарного поиска с целью посимвольного слива URL.

// extensions/browser/api/web_request/extension_web_request_event_router.cc:1117-1127
case DNRRequestAction::Type::BLOCK:
  ClearPendingCallbacks(browser_context, *request);
  DCHECK_EQ(1u, actions.size());
  OnDNRActionMatched(browser_context, *request, action);
  return net::ERR_BLOCKED_BY_CLIENT;

Оракул для подобной тайминг-атаки строится с использованием chrome.tabs.reload для перезагрузки страницы и перехватчика chrome.tabs.onUpdated, помогающего отследить событие status === "complete". Замер времени между reload и завершением загрузки покажет, заблокирован запрос или успешно обработан.

Повторение проверок и бинарного поиска позволяет получить полный URL (с довеском после «?»), затратив на каждый знак строки несколько прогонов. Таким образом, можно незаметно для пользователя украсть включенные приложением в адрес секреты — токены OAuth и сброса пароля, API-ключи, ссылки на контент, закрытый для поисковых систем.

Проверка PoC проводилась на Windows 11 24H2 с использованием Chrome разных версий:

  • 144.0.7559.97 (Stable)
  • 145.0.7632.18 (Beta)
  • 146.0.7647.4 (Dev)
  • 146.0.7653.0 (Canary)

В Google подтвердили возможность подобной атаки по стороннему каналу, но заявили, что решить проблему нереально.

RSS: Новости на портале Anti-Malware.ru