Инженер из Египта Ясер Али во время исследования работы PayPal обнаружил уязвимость, которая позволила ему полностью обойти используемую сервисом систему защиты от CSRF-атак (межсайтовая подделка запросов). Эту уязвимость он подробно описал в своем блоге, мы перевели и адаптировали пост с описанием уязвимости.
Для успешного проведения атаки такого рода злоумышленнику требуется заставить жертву обманным путем попасть по специально подготовленной ссылке, с помощью которой он сможет создавать запросы от лица жертвы. Атака возможна только если пользователь авторизован на веб-сайте, который подвергается ей.
Пост подготовлен специально для корпоративного блога сайта о платежных системах c мониторингом обменников Web-payment.ru.
Многоразовые CSRF-токены
Первое, что обнаружил Али — возможность многократного использования CSRF-токена, который позволяет проверить подлинность каждого запроса, сделанного пользователем. Токен можно обнаружить в теле любого запроса, а его параметр Auth меняется для каждого отдельного запроса в целях обеспечения безопасности. Однако после подробного исследования, было установлено, что Auth продолжается действовать для конкретного имени или email-адреса пользователя даже при повторном использовании. В случае, если злоумышленнику удастся найти какой-либо из ранее сгенерированных CSRF-токенов, он сможет с легкостью совершать действия от лица любого авторизованного в данных момент пользователя.
Тем не менее, данная возможность судя по всему не представляет реальной опасности, так как получить значение Auth из сессии жертвы нельзя.
Обход системы авторизации CSRF
Известно, что параметр Auth проверяет каждый запрос пользователя. Али решил проверить, что будет, если «неавторизованный» злоумышленник попытается провести запрос на отправку денег. В таком случае PayPal попросит взломщика предоставить свой email-адрес или пароль. В ответ, злоумышленник может предоставить email жертвы, ввести любой пароль и таким образом перехватить запрос, который будет содержать подлинный многоразовый CSRF-токен авторизации, позволяющий авторизовать запросы данного пользователя.
Дальнейший разбор показал, что, перехватив POST-запрос со страниц, которые могут предоставлять токены до того, как пользователь авторизуется, атакующий, может заполучить CSRF Auth, применимый для всех пользователей. Такой волшебный CSRF Auth можно, например, найти на странице www.paypal.com/eg/cgi-bin/webscr?cmd=_send-money. Проделав все эти действия, злоумышленник может подделать практически любой запрос от лица реального пользователя.
Приложение генерирует подлинный Auth-токен для вышедшего из системы пользователя!
Проверив процесс смены пароля на сервисе, Али пришел к выводу, что взломщик не сможет сменить пароль пользователя без знания его секретных вопросов. Кроме того, пользователь, в свою очередь, не может изменить свои секретные вопросы, не зная своего пароля.
Изменение секретных вопросов в обход системы защиты
Дальнейшее исследование показало, что процесс «создания» секретных вопросов, который запускается как только пользователь начинает регистрацию, не защищается паролем и может быть использован для сброса секретных вопросов многократно, без ввода пароля. Таким образом, имея в своем распоряжении CFSR Auth, злоумышленник может подделать эту процедуру и сменить секретные вопросы жертвы.
Первая попытка «создания» секретных вопросов не защищается паролем и может быть использована многократно в дальнейшем
Произведя все описанные выше действия, злоумышленник может совершить нацеленную на конкретных пользователей PayPal атаку с помощью подделки запросов по принципу CSRF и заполучить с ее помощью полный контроль над их аккаунтами. В числе прочего, взломщик будет иметь возможность подделать следующие запросы:
- Добавлять/удалять/подтверждать email-адреса
- Изменять секретные вопросы
- Изменять адрес доставки или расчётный адрес
- Изменять способы оплаты
- Изменять настройки пользователя (уведомления, настройки мобильного номера)
- Добавлять привилегированных пользователей в бизнес аккаунт
- … многое другое...
Али также написал на Python'e интерактивный сервер, для того, чтобы автоматизировать процесс и продемонстрировать, как взломщик мог бы воспользоваться этой уязвимостью на практике.
Видео от автора, показывающее процесс взлома:
Впрочем, сами баги были обнаружены в начале августа, инженер вовремя сообщил об уязвимостях, которые были закрыты, а информация о них обнародована уже после этого, поэтому в настоящий момент они уже не представляют какой-либо угрозы для PayPal.
За свою находку Али, по собственному признанию, получил максимальное вознаграждение, которое PayPal предлагает всем сообщившим о каких-либо критических проблемах в защите системы, $10 000.