Skip to content
Agentmart
Submit a tool

hunt-smuggling

HTTP request smuggling / desync hunting - CL.TE, TE.CL, TE.TE, CL.0, and HTTP/2 downgrade.

Skill by Encod3d-Sec

IndexedMIT★ 335
Write a review

Chalk Labs

Need help deploying hunt-smuggling?

Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.

Book a call

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/encod3d-sec-hunt-smuggling

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

HTTP request smuggling / desync hunting - CL.TE, TE.CL, TE.TE, CL.0, and HTTP/2 downgrade. Timing-based detection, differential confirmation, no-blind-claims. Wiki-first, FIND schema output.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/hunt-smuggling

What's inside

Skill name
hunt-smuggling
Description
HTTP request smuggling / desync hunting - CL.TE, TE.CL, TE.TE, CL.0, and HTTP/2 downgrade. Timing-based detection, differential confirmation, no-blind-claims. Wiki-first, FIND schema output.
License
MIT
Instructions
121 lines in SKILL.md · view on GitHub

Before installing

  • Instructions call the network

Files (1)

  • SKILL.md

SKILL.md (first lines)

# Hunt: HTTP Request Smuggling

**Assumes `hunt-core`** for the scope gate, two-account rule, confirmation gate, enumeration limits, stop conditions, wiki protocol, FIND output, and Deadends. Do not re-derive any of that here.

## Wiki

```
qmd_query "HTTP request smuggling desync CL.TE TE.CL TE.TE CL.0 HTTP/2 downgrade" via wiki-search MCP
```

Hub: [[web-moc]] (live web index). Primary page: [[http-request-smuggling]]. Payload arsenal: `wiki/payloads/smuggling.md`.
Anchors: [[reverse-proxy-attacks]].

## Attack surface signals

Smuggling needs a front-end that parses headers differently from the back-end: a CDN/WAF/LB in
front of an origin, HTTP/1.1 keep-alive reused across users, or an HTTP/2 edge that downgrades to
HTTP/1.1. Odds rise wherever both `Transfer-Encoding` and `Content-Length` are honored somewhere
in the chain.

**Rank before probing.** Not all front-end/back-end pairs are equally likely:

- **HTTP/2 edge downgrading to HTTP/1.1 origin** - H2.CL / H2.TE re-open a surface a hardened H1
  front-end closes; highest yield on modern stacks.
- **Multiple hops in the chain** - CDN -> WAF -> LB -> origin; each added parser is another chance
  for two of them to disagree.
- **Mismatched server software front vs back** - e.g. a normalising proxy in front of a lenient
  app server, or vice versa.
- **Connection reuse to the back-end** - a poisoned prefix only reaches a victim if the back-end
  pools/keep-alives the connection across requests.
- **Endpoints behind the edge auth/path filter** - a desync that bypasses a front-end control is
  worth more than one that does not reach anything privileged.

## Methodology
1. **Detect (timing, safe):** send a deliberately malformed TE/CL and watch for a back-end read timeout.
```
# CL.TE probe (front-end uses CL, back-end uses TE) - delays if vulnerable
POST / HTTP/1.1
Content-Length: 4
Transfer-Encoding: chunked

1
A
0

```
```
# TE.CL probe (front-end TE, back-end CL)
Transfer-Encoding: chunked  +  Content-Length: 6 ; body: "0\r\n\r\nX"
```
2. **Confirm (differential):** smuggle a prefix that prepends to the victim's request, then issue a normal request and observe the poisoned response (e.g. your `G` prepended to their path -> 404 on `GET ...`). See the confirmation gate below - a timing delay alone is never the finding.
3. **TE.TE:** obfuscate the header so one server ignores it (`Transfer-Encoding: xchunked`, ` Transfer-Encoding`, `Transfer-Encoding:\tchunked`, double TE).
4. **HTTP/2:** test H2.CL / H2.TE (smuggle via H2 that downgrades to H1), and H2 request splitting via CRLF in header values.
5. **CL.0 / H2.0:** back-end ignores body -> smuggle a full second request.
6. **Exploit:** capture other users' requests (steal session cookies/headers), bypass front-end auth/path controls, cache-poison via smuggled response, escalate a reflected issue to stored.
7. **Distill when confirmed** - reusable obfuscation or H2-desync variant, GENERIC, no client host: `python3 scripts/wiki-stage.py --kind technique --slug <slug> --target-page techniques/web/http-request-smuggling.md`

**Drive it through Burp** for operator visibility. Use Burp Repeater "Send group in sequence
(single connection)" for the differential and the HTTP Request Smuggler extension for the sweep;
push each load-bearing smuggled request into Repeater rather than leaving it in a curl loop.

## Confirmation gate

**NOT confirmation:** a single slow response or timing noise alone; a back-end read timeout by
itself; a malformed request the front-end simply rejects; a delay you have not reproduced. A
single timing observation is a signal to investigate, never proof of a desync.

**IS confirmation:** a reliable differential - a smuggled prefix that changes the *next* request's
response (your own follow-up, or a captured victim request), reproduced on a clean connection; or
a consistent timing delta reproduced across several runs and matched to a specific desync variant;
or a DNS/HTTP hit to your unique Burp Collaborator / interactsh subdomain fired by a
Collaborator-pointed smuggled request.

**Blind / OOB desync.** When you plant a Collaborator-pointed smuggled request, append a row to
`targets/<eng>/oob.md`: `| <token> | <sink url+param> | smuggling | <date> | waiting | |`
(columns: token | sink | class | planted | status | source; token = your unique Burp
Collaborator / interactsh label). The recon-capture hook auto-correlates the incoming callback to
flip the row to HIT and SessionStart surfaces HITs; a HIT row is the gate to scaffold the FIND.
**Do NOT claim a blind** smuggling desync without the captured differential or a HIT row.

## Chaining

A confirmed desync is a delivery primitive, not the endpoint. Chain it:

- **Smuggled response -> cache poisoning.** Poison a shared cache with a smuggled response so it
  serves to every user; hand off to `hunt-cache`.
- **Request hijack.** Capture the next user's full request (session cookie, auth header, CSRF
  token) by smuggling a prefix that appends their request to a body you read back.
- **Front-end control bypass -> stored.** Smuggle past an edge auth/path filter to reach an
  internal endpoint, or escalate a reflected issue to stored via a poisoned response.

## Evasion

If the direct CL/TE probe is normalised clean, the desync is often still there behind
obfuscation - work the TE.TE variants (step 3) and the HTTP/2 downgrade (step 4), which re-opens
the surface a hardened HTTP/1.1 front-end closes. Header casing, line-folding, and bare-CR/LF
tricks beyond those live in `wiki/payloads/smuggling.md`.

## Severity

| Impact | Typical |
|---|---|
| Captured victim requests (session cookie / auth header) at scale | critical |
| Admin session theft | critical |
| Front-end auth / path-control bypass | high |
| Cache poisoning via smuggled response | high |
| Reflected escalated to stored via poisoning | high |

Rated on demonstrated impact per `hunt-core`. A desync you can trigger but cannot yet show
capturing a victim request or poisoning a response is a mechanism, not the severity ceiling.

## Deadends

```
Append: - [ ] smuggling on <host> -- CL.TE/TE.CL/TE.TE/CL.0/H2 all clean
              (single normalising front-end, no timing delta or differential after a full sweep)
```

Record which variants you swept, not just that it failed. The next pass needs to know the boundary.

From Encod3d-Sec/TORCH, MIT.

More from Encod3d-Sec/TORCH

Signals

Stars
335
Forks
49
Open issues
0
Last commit (this folder)
Jul 27, 2026 (3 months ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from Encod3d-Sec

Done for you

Rather not set it up yourself?

Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.

See how we build AI agents →Read the case studies

Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.

launches shipped
50+
launches shipped
media placements
500+
media placements
founders on every account
2
founders on every account

Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block

Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.

Get hunt-smuggling running in your business

Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.

Goes to the Chalk Labs founders, not the newsletter. Privacy

Need help deploying hunt-smuggling?

CallGet help
Cite this page

hunt-smuggling skill. Agent Mart. https://agentmart.dev/skills/encod3d-sec-hunt-smuggling (last updated 2026-10-24)