Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Submit
ToolsExploitsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

FeedsContactPrivacy© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
ats-authproxy-prefix — Apache Traffic Server 10.2.0 - High - Remote - Privilege leftover - authproxy prefix | Kitploit
Tools/GitHubGitHub/abraxas/ats-authproxy-prefix
Authentication & AuthorizationVulnerability AnalysisWeb Proxies & InterceptionExploitationWeb SecurityLabs & Practice
GitHubabraxas/ats-authproxy-prefix

ats-authproxy-prefix

Apache Traffic Server 10.2.0 - High - Remote - Privilege leftover - authproxy prefix

View Repository
514 days agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

Abraxas Labs - ats-authproxy-prefix

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  ats-authproxy-prefix

ats-authproxy-prefix

Class: Privilege leftover Reach: Remote

Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation

authproxy --forward-header-prefix copies identity fields from a 2xx auth helper onto the client request. HttpSetMimeHeader finds and overwrites only the first field of that name. Extra client copies survive. An origin that last-wins the same header treats the client value as identity.

Stock plugin.config is empty. This leftover needs the plugin on a remap with the prefix option. The client still has to pass auth (2xx). Auth 403 never reaches origin.

IDno CVE yet
ClassPrivilege leftover (identity header plant)
ReachRemote (HTTP through authproxy with --forward-header-prefix)
CWECWE-444, CWE-863
CVSSHigh: 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
ProductApache Traffic Server
Affected10.2.0 (b1df7334b39a878971c376da849e8da4984918b6) authproxy prefix overlay
Authclient who already gets a 2xx from the auth helper. Plugin on.
LicenseGNU Affero GPL v3.0
Lab127.0.0.1:18760 only

I pinned public tag 10.2.0 peel b1df7334. The lab is a source-built ats-10.2.0-lab:local reverse proxy on loopback. Auth helper 2xx vs 403. Origin last-wins X-Auth-User.

What an attacker can do

Reach an ATS remap that loads authproxy.so with --forward-header-prefix=X-Auth-. Send two X-Auth-User lines on a request the helper accepts as 2xx.

MethodSinkPrivilege
Duplicate X-Auth-User after a 2xx auth helperStateAuthorized overlay then HttpSetMimeHeader (authproxy.cc:660-690, utils.cc:87-102)Integrity (lab-proven): origin last-wins. Lab: X-Auth-User-0: realuser plus X-Auth-User-1: ATS-AUTHPROXY-PREFIX-WITNESS. CONTROL none/single stay REALUSER-ONLY.
Same plantorigin ACL / user lookup keyed on that headerRecon (inferred): whatever that planted identity can read at origin. Not a heap dump. Not ATS config.
Auth helper 403 with the same duplicatesStateUnauthorized; origin not reenabledClosed (lab-proven): origin hits unchanged. Client 403. Witness not in the body.

Lab-proven vs inferred: duplicate last-wins, single overwrite, none, and 403-not-reached are lab. Origin privilege after plant is inferred from last-wins identity.

Requires: authproxy.so with --forward-header-prefix. Client must pass auth (2xx). Origin must treat those prefix headers as identity (the reason the option exists). Not loaded in default plugin.config.

Adjacent surface that stays closed

SurfaceLab
No client prefix headerCONTROL none: origin REALUSER-ONLY
Single client prefixCONTROL single: first field overwritten; witness does not survive
Auth helper 403origin not reached (control-403=yes)
Plugin not loadedleftover does not apply
Hop-by-hop / @ headersstripped before plugin hooks (CVE-2026-33267)
Empty auth-response header listno longer asserts (changelog)
certifier SNI / url_sig C=closed on this pin (CVE-2026-58162 / 58181)

Not CVE-2026-58162. SHA-256/SHA-512 only on uri_signing. url_sig C= missing delimiter still denies.

Lab

python3 ats-authproxy-prefix-Abraxas-Labs.py

or

cd lab
./run.sh

Loopback 127.0.0.1:18760 (origin 18761, auth helper 18762). Compose project ats-authproxy-prefix. Image ats-10.2.0-lab:local. Witness ATS-AUTHPROXY-PREFIX-WITNESS. Last line:

SUCCESS ats-authproxy-prefix pin=10.2.0 control-none=REALUSER-ONLY control-single=REALUSER-ONLY control-403=yes dup-last-wins=yes ATS-AUTHPROXY-PREFIX-WITNESS

The fix

Strip every client field whose name starts with --forward-header-prefix before overlay. HttpRemoveMimeHeader already walks TSMimeHdrFieldFind until none remain (utils.cc:104-114). Use it on the client request for the configured prefix, then set. Make HttpSetMimeHeader destroy TSMimeHdrFieldNextDup extras the way origin_server_auth set_header and access_control setHeader already do.

Until then, do not point origin ACL at authproxy prefix headers unless the origin first-wins, or reject duplicate prefix names at the origin.

References

  • github.com/apache/trafficserver tag 10.2.0 (b1df7334b39a878971c376da849e8da4984918b6)
  • plugins/authproxy/authproxy.cc StateAuthorized
  • plugins/authproxy/utils.cc HttpSetMimeHeader / HttpRemoveMimeHeader
  • authproxy admin guide
  • Contrast: origin_server_auth.cc set_header walks NextDup
  • CWE-444 · CWE-863
Download Tool