В этой статье я расскажу о CVE-2024-45409, критической уязвимости, затрагивающей библиотеки Ruby-SAML и OmniAuth-SAML, что непосредственно влияет на GitLab. Эта уязвимость позволяет обойти механизмы SAML-аутентификации и получить несанкционированный доступ, воспользовавшись ошибкой в обработке ответов SAML. Проблема возникает из-за слабости в проверке цифровой подписи, защищающей SAML-утверждения, что дает возможность манипулировать SAML-ответом и обходить важные проверки безопасности.
Уязвимость в Ruby-SAML GitLab
SAML — это широко используемый протокол для обмена данными аутентификации и авторизации между поставщиками идентификации (IdP) и сервисами. Ключевым элементом безопасности этого обмена является проверка целостности и подлинности данных с помощью цифровых подписей и проверки хэш-суммы.
Проблема возникает из-за недостатков в проверке цифровой подписи SAML-утверждений. В частности, уязвимость связана с тем, как используется XPath для извлечения элементов при валидации.
Атакующий может эксплуатировать это, внедряя поддельное значение DigestValue в элемент samlp:extensions. Из-за неправильного использования XPath селектора //ds:DigestValue, система будет использовать это поддельное значение вместо правильного из блока SignedInfo.
Это позволяет изменять содержимое SAML-утверждения, сохраняя при этом действительную подпись. Таким образом, можно обойти проверку подписи и получить доступ с измененными данными аутентификации.
Заключение
CVE-2024-45409 демонстрирует, как незначительная ошибка в проверке подписи может привести к серьезным последствиям, позволяя злоумышленникам обходить важные механизмы аутентификации. Этот анализ подчеркивает важность строгих процедур валидации, особенно при работе с такими протоколами, как SAML.