Что такое HPP (HTTP Parameter Pollution) атака? Уроки хакинга. Глава 3

HTTP Parameter Pollution, или HPP, происходит, когда сайт принимает пользовательский ввод и использует его для создания запроса к другой системе без валидации этого ввода. Это может пройзойти одним из двух способов, через сервер (или бэкенд) и через клиентскую сторону.

Картинки по запросу HTTP Parameter Pollution

Silverlightfox приводит прекрасный пример серверной HPPатаки на StackExchange предположим, у нас есть следующий сайт, https://www.example.com/transferMoney.php, который через метод POST принимает следующие параметры:

amount=1000&fromAccount=12345

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

• ОтдельныйURLбэкенда:https://backend.example/doTransfer.php
• Отдельныепараметрыдлябэкенда:toAccount=9876&amount=100

Теперь, если бэкенд, получая дублирующиеся параметры, принимает только последний параметр, можно предположить, что хакер сможет изменить POST-запрос к сайту для отправки следующего параметра toAccount:

amount=1000&fromAccount=12345&toAccount=99999

Сайт, уязвимый к HPP атаке передаст запрос бэкенду в таком виде:

toAccount=9876&amount=1000&fromAccount=12345&toAccount=99999

В этом случае второй параметр toAccount, отправленный злоумышленником, перезапишет запрос к бэкенду и позволит перевести деньги на предоставленный хакером счет (99999) вместо счета, установленного системой (9876).

Это можно использовать, внося правки в собственные запросы, которые обрабатываются уязвимой системой. Но также это может быть более полезным для хакера, если он может сгенерировать ссылку с другого сайта и обмануть пользователей, заставив их ненамеренно отправить вредный запрос с дополнительными параметрами, добавленными хакером.

[ad name=»Responbl»]

С другой стороны, HPP на клиентской стороне включает инъекцию дополнительных параметров в ссылки и другие src атрибуты. Позаимствуем пример с OWASP и предположим, что у нас есть следующий код:

<? $val=htmlspecialchars($_GET[’par’],ENT_QUOTES); ?>
<a href=”/page.php?action=view&par=’.<?=$val?>.’”>Посмо 3 три меня!</a>

Это принимает значение для par из UTL, убеждается, что оно безопасное и создает из него ссылку. Если хакер отправит:

   http://host/page.php?par=123%26action=edit

то полученная в результате ссылка будет выглядеть так:

<a href=”/page.php?action=view&par=123&amp;action=edit”>Посмо меня!</a>

Это может заставить приложение к выполнению действия редактирования вместо просмотра.

И серверная и клиентская HPP зависят от того, какая технология используется на бэкенде и как она действует, получая несколько параметров с одинаковыми именами. Например, PHP/Apache используют последний переданный параметр из нескольких с одинаковыми именами, Apache Tomcat использует первый параметр, ASP/ISS используют все параметры, и так далее. В результате, нет одного гарантированного способа для отправки нескольких параметров с одинаковыми именами и обнаружение HPP потребует некоторых экспериментов, чтобы узнать, как работает тестируемый вами сайт.

Примеры

1. Кнопки социальных сетей HackerOne

Сложность: Низкая
Url: https://hackerone.com/blog/introducing-signal-and-impact Ссылка на отчет: https://hackerone.com/reports/1059536 Дата отчета: 18 декабря 2015
Выплаченное вознаграждение: $500

Описание: На HackerOne есть кнопки для шаринга контента через популярные социальные сети, такие как Twitter, Facebook и прочие. Эти кнопки содержат конкретные параметры для ссылки на социальную сеть.

Обнаруженная уязвимость позволяла хакеру подставить другие параметры URL в ссылку и направить её на любой сайт, а HackerOne включил бы этот параметр в POST-запрос к социальной сети, создавая таким образом нежелаемое поведение.

Пример использования уязвимости менял url:

https://hackerone.com/blog/introducing-signal

на

https://hackerone.com/blog/introducing-signal?&u=https://vk.c

Обратите внимание на добавленный параметр u. Если бы посетители HackerOne нажали на обновленную таким образом ссылку, пытаясь поделиться контентом через социальные сети, вредоносная ссылка выглядела бы так:

https://www.facebook.com/sharer.php?u=https://hackerone.com/b

Здесь последний параметр u получает приоритет над первым и, соответственно, используется для публикации на Facebook. При публикации в Twitter, предложенный стандартный текст также мог бы быть изменен:

https://hackerone.com/blog/introducing-signal?&u=https://vk.c
site:https://vk.com/durov

[ad name=»Responbl»]

Выводы

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

Риски, раскрываемые использованием HTTP Parameter Pollution сильно зависят от действий, выполняемых бэкендом сайта и тем, куда будут отправлены вредоносные параметры.

Оглавление:

Базовые знания о HTTP протоколе. Глава 1

Что такое HTML иньекция. Уроки хакинга. Глава 2.

Что такое HPP (HTTP Parameter Pollution) атака? Уроки хакинга. Глава 3

Что такое CRLF инъекция, примеры использования. Уроки хакинга, Глава 4.

Уязвимости в логике приложений. Уроки хакинга. Глава 6

Уязвимости в логике работы приложений. Примеры.

Что такое XSS атака (Cross Site Scripting Attacks). Уроки хакинга. Глава 7.

SQL иньекции. Виды и примеры использования. Уроки хакинга. Глава 8.

Уязвимости Открытого Перенаправления. Уроки хакинга. Глава 9

 

Click to rate this post!
[Total: 7 Average: 3.6]

Специалист в области кибер-безопасности. Работал в ведущих компаниях занимающихся защитой и аналитикой компьютерных угроз. Цель данного блога - простым языком рассказать о сложных моментах защиты IT инфраструктур и сетей.

9 comments On Что такое HPP (HTTP Parameter Pollution) атака? Уроки хакинга. Глава 3

Leave a reply:

Your email address will not be published.