Web-серверы и HTTP-прокси-серверы по-прежнему уязвимы к HTTP Request Smuggling даже спустя 15 лет с момента их обнаружения.
Специалист из компании SafeBreach сообщил о четырех новых вариантах атаки HTTP Request Smuggling («контрабандный HTTP-запрос»), которые могут быть использованы против различных коммерческих web-серверов и прокси-серверов HTTP.
Вице-президент по исследованиям безопасности в SafeBreach Амит Кляйн (Amit Klein) представил свои находки на конференции по кибербезопасности Black Hat. По его словам, web-серверы и HTTP-прокси-серверы по-прежнему уязвимы к HTTP Request Smuggling даже спустя 15 лет с момента их обнаружения.
HTTP Request Smuggling основывается на различиях в обработке данных одного или нескольких HTTP-устройств (кэш-сервер, прокси-сервер, межсетевой экран и т.п.) находящихся между пользователем и web-сервером. Техника HTTP Request Smuggling позволяет провести различные виды атак — отравление кэша, похищение сеанса, межсайтовое выполнение сценариев, а также предоставляет возможность обойти защиту межсетевого экрана.
Новые варианты, раскрытые Кляйном, включают использование различных комбинаций прокси-серверов, включая Aprelium Abyss, Microsoft IIS, Apache и Tomcat в режиме web-сервера, а также Nginx, Squid, HAProxy, Caddy и Traefik в режиме HTTP-прокси.
Эксперт представил список всех четырех новых вариантов, включая один старый, который исследователь успешно использовал в своих экспериментах:
"Header SP/CR junk: …";
"Wait for It";
HTTP/1.2 для обхода защиты mod_security-like;
A plain solution;
"CR header".
При обработке HTTP-запросов, содержащих два поля заголовка Content-Length, было обнаружено, что Abyss, например, принимает второй заголовок как действительный, тогда как Squid использует первый заголовок Content-Length, что привело к разной интерпретации запросов и возникновению «контрабандного HTTP-запроса».
В ситуациях, когда Abyss получает HTTP-запрос с телом, длина которого меньше указанного значения Content-Length, он ждет 30 секунд, чтобы выполнить запрос, но не раньше, чем проигнорирует оставшееся тело запроса. Как отметил Кляйн, в данной ситуации также возникает разная интерпретация запросов между Squid и Abyss, поскольку последний интерпретирует части исходящего HTTP-запроса как второй запрос.
В рамках другого варианта атаки используется HTTP/1.2 для обхода защиты WAF, как определено в OWASP ModSecurity Core Rule Set (CRS) для предотвращения HTTP Request Smuggling.
Использования поля заголовка «Content-Type: text / plain» также было достаточно, чтобы обойти проверки уровней Paranoia Level 1 и 2, указанные в CRS, и создать уязвимость, связанную с HTTP Request Smuggling.
Эксперт сообщил о своих находках Aprelium, Squid и OWASP CRS, и проблемы были исправлены в версии Abyss X1 2.14, версиях Squid 4.12 и 5.0.3 и версии CRS 3.3.0.
Одно найти легче, чем другое. Спойлер: это не темная материя