Admin
Администратор
HTTP Request Smuggling в 2025: Как обходить современные WAF
Введение: Почему это всё еще работает?
Несмотря на то что атака HTTP Request Smuggling (HRS) известна годами, в 2025 году она переживает ренессанс. Причина проста: усложнение инфраструктуры. Современный веб — это не просто «клиент-сервер», это цепочка из Cloudflare WAF, AWS ALB, Nginx Ingress и микросервисов на бэкенде.Каждое звено этой цепи по-своему интерпретирует RFC, и именно в этих «трудностях перевода» заголовков Content-Length (CL) и Transfer-Encoding (TE) рождаются критические уязвимости.
1. Векторы 2025: От классики к H2.CL / H2.TE
Раньше мы говорили только о десинхронизации HTTP/1.1. Сегодня основной упор идет на HTTP/2 Downgrading.Механика:
Многие современные фронтенды (CDN, балансировщики) принимают запросы по HTTP/2, но общаются с бэкендом по старинке через HTTP/1.1. При конвертации запроса «на лету» возникают аномалии:
- H2.CL: Фронтенд использует длину из фреймов H2, но при конвертации в H1.1 вставляет заголовок Content-Length, который может конфликтовать с телом.
- H2.TE: Фронтенд поддерживает H2, но бэкенд за ним ожидает chunked кодировку.
Пример атаки через Downgrading:
Вы отправляете H2 запрос, где внутри спрятан контрабандный (smuggled) заголовок. Фронтенд считает это частью одного запроса, а бэкенд видит начало второго.
2. Техники обхода современных WAF
Современные WAF (Imperva, Cloudflare, Akamai) научились блокировать классические CL.TE пейлоады. Чтобы их обойти, мы используем обфускацию заголовков.А) Манипуляция с кодировкой (TE обфускация):
WAF ищет строку Transfer-Encoding: chunked. Мы пробуем варианты, которые бэкенд поймет, а WAF пропустит:- Transfer-Encoding: [tab]chunked
- Transfer-Encoding: chunked (двойной пробел)
- Transfer-Encoding: xchunked (некоторые бэкенды читают только суффикс)
- Transfer-Encoding: chunked, identity
Б) Использование вариаций переноса строки:
Некоторые прокси принимают \n (LF) вместо \r\n (CRLF). Если WAF ищет CRLF, а бэкенд «всеяден», десинхронизация неизбежна.В) Инъекция через заголовок Host:
Иногда десинхронизация происходит не через CL/TE, а через дублирование заголовка Host, что путает маршрутизацию внутри Kubernetes-кластера.3. Сценарий: Захват админской сессии (Mass Account Takeover)
Самый сок HRS — это возможность «приклеить» свой вредоносный префикс к следующему запросу реального пользователя.Атакующий отправляет специально сформированный запрос:
HTTP:
POST / HTTP/1.1
Host: victim.com
Content-Length: 40
Transfer-Encoding: chunked
0
GET /admin/set-password?user=attacker HTTP/1.1
Foo: x
- Результат: Бэкенд выполняет ваш POST, но оставляет GET /admin... в буфере.
- Жертва: Следующий легитимный пользователь (например, админ) отправляет свой запрос с куки-файлами.
- Финал: Бэкенд склеивает ваш префикс и запрос админа. В итоге выполняется команда смены пароля от имени админа.
4. Инструментарий и автоматизация
Для успешного поиска HRS в 2025 году недостаточно одного Burp Suite. Вот стек профи:- HTTP Request Smuggler (Burp Extension): Маст-хэв для автоматического поиска десинхронов.
- Turbo Intruder: Для высокоскоростной отправки пачек запросов (важно для ловли таймингов).
- SmuggleHunter: Утилита на Go для поиска уязвимостей в больших инфраструктурах.