Обход авторизации SAML

image

 
Обнаружена критичная уязвимость в SAML (Security Assertion Markup Language), с помощью которой
можно осуществить обход авторизации. Уязвимости подвержены решения различных SSO-провайдеров и несколько библиотек, использующих SAML SSO (Single Sign-On).


Язык разметки SAML (Security Assertion Markup Language) представляет собой открытый стандарт на основе XML, который предназначен для обмена данными аутентификации и авторизации между сторонами процесса. С помощью протокола SAML пользователи могут получать доступ ко множеству своих облачных приложений, указывая всего один логин и пароль. Single Sign-On (SSO) — распространенная технология, позволяющая авторизоваться в web-приложении через «третью сторону» в виде стороннего веб-приложения.


Именно в этой реализации кроется ошибка, позволяющая злоумышленнику разместить комментарий внутри поля имени пользователя, единственным условием является наличие валидного имени пользователя.


Проблема кроется в методе обработки комментариев в разметке XML-кода. При размещении кода комментария в поле имени пользователя происходит «разрыв» строки. При обработке пользовательского имени препроцессор «обрубает» значение после поля комментария и не учитывает его при проверке:


import xml.etree.ElementTree as et
doc = "testuser"
data = et.fromstring(payload)
return data.text # returns 'testuser'


Ожидаемое значние — «testuser», но после «обрыва» вернется только значение «test».


Пример реализации данной атаки пользователем с доступом к учетной записи user@user.com.evil.com может изменить SAML для подмены NameID на user@user.com при обработке SP:



    https://idp.com/
    
        
            user@user.com.evil.com
        
    
    
        
            
            
        
        
            some base64 data that represents the signature of the assertion
        
    


Данной атаке подвержены следующие решения:


  • 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


Стоит отметить, что атака не работает против учетных записей, защищенных с помощью двухфакторной аутентификации (которая включена у ~10% пользователей согласно статистике Google).


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

© Habrahabr.ru