PayPal устранила уязвимость, позволявшую похитить токен OAuth, ассоциированный с каким-либо клиентским приложением PayPal.

Детали бреши обнародовал в понедельник Антонио Сансо (Antonio Sanso), старший программист Adobe, который обнаружил ее в ходе тестирования своего клиента OAuth. Патч для этой уязвимости был выпущен три недели назад.

Со слов Сансо, найденная им уязвимость связана с процедурой запроса и получения токена. Как и многие онлайн-сервисы, PayPal позволяет разработчикам создавать и модифицировать приложения, используя консоль. Готовое приложение разработчик регистрирует и посылает запрос в компанию на получение токена доступа, который в этом случае осуществляется через сервер компании.

Как оказалось, при реализации технологии OAuth разработчики PayPal допустили ошибку. Настройки сервера аутентификации позволяют ему принимать значение localhost в качестве параметра redirect_url (редирект на адрес для доставки токена доступа). Именовать компьютер, на котором установлено приложение, localhost — стандартная практика, однако в данном случае она позволила Сансо обойти систему авторизации PayPal.

Исследователь создал DNS-запись для поддельного сайта http://localhost[.]intothesymmetry[.]com, попытался использовать этот URL в качестве redirect_uri и в ответ на запрос успешно получил токен.

Журналистам Threatpost Сансо заявил, что этот трюк универсален и работает против любого OAuth-клиента PayPal. До выхода патча исследователь имел возможность беспрепятственно получать коды авторизации с помощью OAuth-запросов, использующих сфабрикованный им redirect_uri и client_id любого приложения.

В 2015 году PayPal ужесточила проверку redirect_uri и стала принимать запросы лишь в том случае, если URI-редирект, используемый кодом приложения, совпадает с информацией о приложении, отраженной в консоли разработчика. Тем не менее Сансо с его поддоменом localhost удалось обойти и это ограничение. По признанию исследователя, его каждый раз выручало «волшебное слово» — localhost.

В своем комментарии Threatpost Сансо также отметил, что использование захваченного таким образом токена в большой степени зависит от масштаба его распространения и интенсивности потока OAuth. Представители PayPal на запрос Threatpost о комментарии пока не ответили.

Сансо проживает в Швейцарии; в прошлом году он выпустил книгу по OAuth 2.0 совместно с другим автором. С его слов, уязвимость в OAuth-реализации PayPal была обнаружена в сентябре, но компания далеко не сразу приступила к разработке патча. Вначале она поддерживала переписку, затем наступила тишина, и весь октябрь исследователь провел в ожидании результата. Наконец 7 ноября его известили, что проблема решена и «сервер авторизации PayPal больше не допускает обход корректной валидации, которая в нем предусмотрена».

Обход проверки redirect_uri, найденный Сансо, перекликается с результатами, опубликованными в 2014 году Егором Хомяковым. Российский исследователь обнаружил на GitHub несколько багов, с помощью которых можно обойти существующие проверки и получить токен OAuth для доступа к любой странице Gist. Все эти бреши в итоге были пропатчены, а Хомяков получил $4 тыс. в рамках Bug Bounty.

Ошибки в реализации OAuth пришлось исправлять и Facebook. Так, в 2014 году был выпущен патч для найденной тем же Сансо уязвимости, которая позволяла обойти существующую, но не лишенную изъянов проверку redirect_uri. В 2013 году Facebook устранила аналогичный баг, обнаруженный Ниром Гольдшлягером (Nir Goldshlager), который можно было использовать, если жертву удавалось убедить перейти по ссылке на сайт атакующего.

На недавней конференции Black Hat EU три исследователя из Гонконгского университета представили PoC-атаку на угон учетной записи Android-приложений, использующих API OAuth 2.0 от Facebook, Google и Sina и поддерживающих систему единого входа для сторонних программ. По оценке докладчиков, в настоящее время к таким атакам уязвимы более 1 млрд используемых мобильных приложений.

Категории: Уязвимости