Загрязнение параметров HTTP

Загрязнение параметров HTTP (англ. HTTP Parameter Pollution, HPP) — это уязвимость веб-приложений, основанная на внедрении закодированных разделителей строки запроса в уже существующие параметры. Уязвимость возникает, если ввод пользователя не проходит корректное кодирование при выводе веб-приложением[1]. Эта уязвимость позволяет внедрять параметры в адреса, сформированные веб-приложением. Впервые проблема была публично описана в 2009 году Стефано ди Паолой и Лукой Кареттони на конференции OWASP EU09 в Польше[1]. Влияние такой уязвимости варьируется и может колебаться от «простого неудобства» до полной деструкции работы приложения: возможно как изменение поведения веб-приложения путём перезаписи параметров HTTP, так и обход контроля ввода или точек проверки доступа, а также другие косвенные угрозы[1].

Не существует стандарта RFC, регламентирующего обработку случаев передачи нескольких параметров с одинаковым именем. Загрязнение параметров HTTP может быть использовано для кросс-канального заражения, обхода механизмов защиты от CSRF и проверки данных WAF[2].

Поведение

При передаче нескольких параметров с одинаковым именем, различные серверные технологии обрабатывают их по-разному[3].

Поведение при передаче параметру «param» значений «val1» и «val2»
Технология Результат разбора Пример
ASP.NET/IIS Все значения объединяются через запятую param=val1,val2
ASP/IIS Все значения объединяются через запятую param=val1,val2
PHP/Apache Только последнее значение param=val2
PHP/Zeus Только последнее значение param=val2
JSP, Servlet/Apache Tomcat Только первое значение param=val1
JSP, Servlet/Oracle Application Server Только первое значение param=val1
JSP, Servlet/Jetty Только первое значение param=val1
IBM Lotus Domino Только последнее значение param=val2
IBM HTTP Server Только первое значение param=val1
mod_perl, libapreq2/Apache Только первое значение param=val1
Perl CGI/Apache Только первое значение param=val1
mod_wsgi (Python)/Apache Только первое значение param=val1
Python/Zope Все значения в виде массива (list/array) param=['val1','val2']

Виды

На стороне клиента

  • Первый порядок / Отражённое загрязнение параметров[4]
  • Второй порядок / Сохраняемое загрязнение параметров[4]
  • Третий порядок / DOM-загрязнение параметров[4]

На стороне сервера

  • Стандартное загрязнение параметров[4]
  • Второй порядок загрязнения параметров[4]

Защита

Корректная валидация ввода и осведомлённость о возможностях современных веб-технологий служат эффективной защитой от загрязнения параметров HTTP[5].

Примечания

  1. 1 2 3 Balduzzi, Marco; Torrano-Gimenez, Carmen; Balzarotti, Davide; Kirda, Engin (2011). Automated Discovery of Parameter Pollution Vulnerabilities in Web Applications. Proceedings of the Network and Distributed System Security Symposium, NDSS 2011. Дата обращения 2024-06-05 – via ResearchGate.
  2. HTTP Parameter Pollution Vulnerabilities in Web Applications (англ.) (2011). Дата обращения: 5 июня 2024. Архивировано 8 ноября 2011 года.
  3. WSTG - Latest:Testing for HTTP Parameter Pollution (англ.). Дата обращения: 5 июня 2024.
  4. 1 2 3 4 5 HTTP Parameter Pollution (англ.). Дата обращения: 5 июня 2024.
  5. How to Detect HTTP Parameter Pollution Attacks (англ.). Acunetix Blog. Дата обращения: 5 июня 2024.

Литература