HTTP Connection Request Smuggling

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks

Ця сторінка узагальнює, розширює та оновлює основоположне дослідження PortSwigger про Browser-Powered Desync Attacks та подальшу роботу з зловживанням станом з'єднання HTTP/2. Вона зосереджується на вразливостях, де походження визначається лише один раз на з'єднанні TCP/TLS, що дозволяє зловмиснику "переправляти" запити до іншого внутрішнього хоста після встановлення каналу.

Connection-State Attacks

First-request Validation

При маршрутизації запитів зворотні проксі можуть покладатися на заголовок Host (або :authority в HTTP/2), щоб визначити сервер призначення, часто спираючись на білий список хостів, яким дозволено доступ. Однак існує вразливість у ряді проксі, де білий список застосовується лише до самого першого запиту в з'єднанні. Внаслідок цього зловмисники можуть отримати доступ до внутрішніх віртуальних хостів, спочатку надіславши дозволений запит, а потім повторно використовуючи те ж саме підключення:

http
GET / HTTP/1.1
Host: allowed-external-host.example

GET /admin HTTP/1.1
Host: internal-only.example

First-request Routing

Багато HTTP/1.1 зворотних проксі відображають вихідне з'єднання до пулу бекенду виключно на основі першого запиту, який вони пересилають. Усі наступні запити, надіслані через той же фронтальний сокет, безшумно повторно використовуються, незалежно від їх заголовка Host. Це можна поєднати з класичними атаками на заголовок Host, такими як отруєння скидання пароля або отруєння веб-кешу, щоб отримати доступ, подібний до SSRF, до інших віртуальних хостів:

http
GET / HTTP/1.1
Host: public.example

POST /pwreset HTTP/1.1
Host: private.internal

tip

У Burp Suite Professional ≥2022.10 ви можете увімкнути HTTP Request Smuggler → Connection-state probe для автоматичного виявлення цих вразливостей.


НОВЕ у 2023-2025 – Зловживання з'єднаннями HTTP/2/3

Сучасні браузери регулярно об'єднують запити HTTP/2 та HTTP/3 в одне TLS-з'єднання, коли сертифікат, протокол ALPN та IP-адреса збігаються. Якщо фронтенд авторизує лише перший запит, кожен наступний об'єднаний запит успадковує цю авторизацію – навіть якщо змінюється Host/:authority.

Сценар експлуатації

  1. Зловмисник контролює evil.com, який розв'язується до того ж краєвого вузла CDN, що й цільовий internal.company.
  2. Браузер жертви вже має відкрите HTTP/2 з'єднання з evil.com.
  3. Зловмисник вбудовує прихований <img src="https://internal.company/…"> на свою сторінку.
  4. Оскільки параметри з'єднання збігаються, браузер повторно використовує існуюче TLS-з'єднання та мультиплексує запит для internal.company.
  5. Якщо CDN/маршрутизатор лише перевіряв перший запит, внутрішній хост стає доступним.

PoCs для Chrome/Edge/Firefox доступні в доповіді Джеймса Кеттла “HTTP/2: The Sequel is Always Worse” (Black Hat USA 2023).

Інструменти

  • Burp Suite 2023.12 представив експериментальну точку вставки HTTP/2 Smuggler, яка автоматично намагається об'єднувати та використовувати техніки TE/CL.
  • smuggleFuzz (https://github.com/microsoft/smugglefuzz) – Фреймворк на Python, випущений у 2024 році для брутфорсу векторів десинхронізації фронтенду/бекенду через HTTP/2 та HTTP/3, включаючи перестановки стану з'єднання.

Заходи пом'якшення

  • Завжди повторно перевіряйте Host/:authority на кожному запиті, а не лише під час створення з'єднання.
  • Вимкніть або строго обмежте об'єднання за походженням на шарах CDN/балансувальника навантаження (наприклад, http2_origin_cn вимкнено в NGINX).
  • Використовуйте окремі сертифікати або IP-адреси для внутрішніх та зовнішніх імен хостів, щоб браузер не міг легально їх об'єднувати.
  • Віддавайте перевагу connection: close або proxy_next_upstream після кожного запиту, де це можливо.

Реальні випадки (2022-2025)

РікКомпонентCVEПримітки
2022AWS Application Load BalancerЗаголовок Host перевірявся лише на першому запиті; виправлено шляхом патчування правил двигуна (розкрито SecurityLabs).
2023Apache Traffic Server < 9.2.2CVE-2023-39852Дозволяв зловживання запитами через повторне використання з'єднання HTTP/2, коли було встановлено CONFIG proxy.config.http.parent_proxy_routing_enable.
2024Envoy Proxy < 1.29.0CVE-2024-2470Неправильна перевірка :authority після першого потоку дозволила зловживання запитами між орендарями в спільних мережах.

Чек-лист для виявлення

  1. Надішліть два запити в одному TCP/TLS з'єднанні з різними заголовками Host або :authority.
  2. Спостерігайте, чи другий відповідь походить з першого хоста (безпечний) або з другого хоста (вразливий).
  3. У Burp: Repeat → keep-alive → Send → Follow.
  4. При тестуванні HTTP/2 відкрийте окремий потік (ID 1) для безпечного хоста, потім мультиплексуйте другий потік (ID 3) до внутрішнього хоста та шукайте відповідь.

Посилання

  • PortSwigger Research – HTTP/2: The Sequel is Always Worse (Black Hat USA 2023)
  • Envoy Security Advisory CVE-2024-2470 – Неправильна перевірка авторитету

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks