
CVE-2026-33267 — Apache Traffic Server @ header internal-metadata spoof (CVSS 10.0). Verified: @ headers leak to plugins on 10.1.2, stripped on 10.1.4
@ header → internal metadata spoofCVSS 10.0 (Critical) · CWE-20 · GHSA-jrh6-9hgv-mqm7
Apache Traffic Server reserves @-prefixed headers (@Ats-Internal, @ICAP-Status, @TCPInfo, ...)
for internal metadata: they live in the in-memory header structure but are never serialized
on the wire. In vulnerable versions (9.2.0–9.2.14, 10.1.0–10.1.3) these headers coming from the
client request and the origin response are not stripped before plugin hooks run
(TS_HTTP_READ_REQUEST_HDR_HOOK, TS_HTTP_READ_RESPONSE_HDR_HOOK, remap plugins). A remote
attacker can spoof ATS internal metadata; plugins (cache, ACL, header_rewrite, …) may then trust
attacker-controlled internal state — impact depends on the plugins in use.
a9aee837db — "CVE-2026-33267: 9.2.x: Strip external @ headers before plugin hooks"4ab63dbd93 — same fixHttpTransact::strip_at_headers() runs before READ_REQUEST_HDR /
READ_RESPONSE_HDR hooks; counters proxy.process.http.client_request_at_headers_stripped /
proxy.process.http.origin_response_at_headers_stripped added.Custom at_probe plugin logging @ headers at both hooks, plus a raw-socket client
(curl silently drops @ headers):
Negative control on the fixed build: 0 plugin observations (the plugin never sees the headers).
python3 at_headers_spoof.py 127.0.0.1 8080 /
Sends GET / with @Ats-Internal: pwned and @Another-At: test over a raw socket and prints the
response head. On vulnerable ATS the custom plugin (or any @-metadata-trusting plugin) receives
the spoofed headers; on fixed builds they are stripped before hooks.
@ metadata on the target deployment (e.g. header_rewrite/cache
directives referencing @ fields).a9aee837db · Fix 10.1.x: 4ab63dbd93| Build | Client-supplied @Ats-Internal | Origin-supplied @Origin-Test |
|---|
| ATS 10.1.2 (vulnerable) | 🟥 LEAKED (plugin observed it) | 🟥 LEAKED (8 observations) |
| ATS 10.1.4 (fixed, built from source) | ✅ STRIPPED ("stripped internal @ header") | ✅ STRIPPED |