Загрязнение параметров HTTP
Загрязнение параметров HTTP (англ. HTTP Parameter Pollution, HPP) — это уязвимость веб-приложений, основанная на внедрении закодированных разделителей строки запроса в уже существующие параметры. Уязвимость возникает, если ввод пользователя не проходит корректное кодирование при выводе веб-приложением[1]. Эта уязвимость позволяет внедрять параметры в адреса, сформированные веб-приложением. Впервые проблема была публично описана в 2009 году Стефано ди Паолой и Лукой Кареттони на конференции OWASP EU09 в Польше[1]. Влияние такой уязвимости варьируется и может колебаться от «простого неудобства» до полной деструкции работы приложения: возможно как изменение поведения веб-приложения путём перезаписи параметров HTTP, так и обход контроля ввода или точек проверки доступа, а также другие косвенные угрозы[1].
Не существует стандарта RFC, регламентирующего обработку случаев передачи нескольких параметров с одинаковым именем. Загрязнение параметров HTTP может быть использовано для кросс-канального заражения, обхода механизмов защиты от CSRF и проверки данных WAF[2].
Поведение
При передаче нескольких параметров с одинаковым именем, различные серверные технологии обрабатывают их по-разному[3].
| Технология | Результат разбора | Пример |
|---|---|---|
| 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'] |
Виды
Защита
Корректная валидация ввода и осведомлённость о возможностях современных веб-технологий служат эффективной защитой от загрязнения параметров HTTP[5].
Примечания
Литература
- 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.