CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



GHSA-G936-7JQJ-MWV8

GHSA-g936-7jqj-mwv8: Administrative Token Leakage and Privilege Escalation in TSDProxy

Alon Barad
Alon Barad
Software Engineer

Jul 10, 2026·7 min read·16 visits

Executive Summary (TL;DR)

TSDProxy unconditionally forwards its internal administrative authentication token to all proxied backend services when identity headers are enabled, allowing attackers in control of a backend to harvest the token and compromise the reverse proxy.

An authentication bypass and token leakage vulnerability exists in TSDProxy before version 1.4.4. The application unconditionally forwards its internal administrative token to all proxied backend services when identity headers are enabled. Attackers with control over an upstream backend can capture this token and replay it to the local management API to achieve full administrative control over the proxy engine.

Vulnerability Overview

TSDProxy is an open-source Tailscale reverse proxy designed to automate the process of exposing Docker containers and internal host services directly to a Tailnet. When routing traffic to these upstream backends, TSDProxy can be configured to forward identity details using HTTP request headers, such as user IDs and usernames, allowing backend services to verify user identity seamlessly.

To facilitate internal administrative operations like starting, stopping, or pausing individual proxy definitions, TSDProxy maintains an internal HTTP management API. This management plane is designed to run locally, typically binding to the loopback interface on port 8080. It utilizes an internal per-process authentication token to validate administrative commands originating from the local machine.

The vulnerability arises because TSDProxy leaks this highly sensitive internal administrative token to untrusted third-party upstream backends. Under default configurations where identity headers are enabled, every proxied HTTP request carries the token to the backend server. This flaw creates a vector where any compromised or malicious upstream backend can capture the token and escalate privileges to fully control the TSDProxy instance.

Root Cause Analysis

The root cause of this vulnerability lies in the combination of unconditional token injection and improper context checking within the reverse proxy implementation. In the file internal/proxymanager/port.go, the handler loops through incoming requests and appends identity-related headers. If the identityHeaders boolean is enabled, the proxy attempts to extract user identity information from the request context.

The application implements a middleware called ProviderUserMiddleware which is intended to populate the request context using Tailscale's Whois utility. However, for unauthenticated requests, such as public traffic coming through a Tailscale Funnel, the middleware still inserts a zero-value Whois{} struct into the context. Consequently, calling WhoisFromContext returns a success status (ok=true) because a Whois structure exists in the context, even though the fields within that structure are completely empty.

Due to this flaw, the execution block responsible for header injection is entered for all incoming HTTP requests. Within this block, the code sets the x-tsdproxy-auth-token header using the value retrieved from core.ProxyAuthToken(). This action unconditionally appends the secret administrative token to outgoing requests destined for proxied backend applications, irrespective of whether the original requester is an administrator, a standard user, or an unauthenticated anonymous visitor.

Code Analysis

In the vulnerable version of internal/proxymanager/port.go, the header injection logic fails to validate the destination of the proxied request or the authenticity of the user. The following code segment illustrates this flaw:

// Vulnerable Code Path
if identityHeaders {
    if user, ok := model.WhoisFromContext(r.In.Context()); ok {
        // The ok boolean evaluates to true even for anonymous requests
        // The internal administrative token is sent to the upstream backend unconditionally
        r.Out.Header.Set(consts.HeaderAuthToken, core.ProxyAuthToken())
    }
}

The official patch applied in commit 434819b4421e6b7471eaeb307533f19c52c222d8 implements stringent checks to remediate the vulnerability. First, it requires the user identifier to be non-empty, preventing anonymous context entries from triggering header injection. Second, it restricts token forwarding strictly to cases where the proxy target is identified as the local management interface:

// Patched Code Path
if identityHeaders {
    if user, ok := model.WhoisFromContext(r.In.Context()); ok && user.ID != "" {
        r.Out.Header.Set(consts.HeaderID, user.ID)
        r.Out.Header.Set(consts.HeaderUsername, user.Username)
 
        // Forward the auth token only to the internal management
        // server (self-proxy case). Never expose it to external
        // backends — a leaked token allows identity spoofing on
        // the management API.
        if isManagementTarget(pconfig.GetFirstTarget()) {
            r.Out.Header.Set(consts.HeaderAuthToken, core.ProxyAuthToken())
        }
    }
}

Additionally, the patch introduces the helper function isManagementTarget to parse the destination URL and verify if it represents a loopback host on the designated HTTP management port. This stops the administrative token from being exposed to any backend container or external host service, while maintaining the self-proxying functionality required for legitimate management operations.

Exploitation Methodology

Exploitation of GHSA-g936-7jqj-mwv8 depends on the attacker's ability to monitor HTTP requests on an upstream backend service proxied by TSDProxy. This condition is easily met if the attacker compromises an existing container, deploys an unauthorized application, or controls a legitimate backend service. Once a single request passes through the proxy, the backend application receives the x-tsdproxy-auth-token header, exposing the administrative credential.

After harvesting the token, the attacker must be capable of reaching the local management port of TSDProxy, which typically binds to 127.0.0.1:8080. This access is possible if the backend container runs with host networking privileges (--network=host), if both services share a network namespace, or if the attacker has local shell access on the host operating system. The attacker can then issue administrative requests to the loopback interface, supplying the stolen token and a spoofed identity.

By transmitting a request to /api/v1/proxies accompanied by the hijacked token, the attacker bypasses all access controls. The management API trusts the caller implicitly due to the matching token and the loopback origin, giving the attacker structural authority over the reverse proxy configuration.

Impact Assessment

The security impact of this vulnerability is critical, as it allows a complete compromise of the reverse proxy engine's management plane. Armed with the stolen administrative token, an attacker can modify proxy definitions, stop existing proxies, start new services, and alter configuration files. This level of access grants the attacker control over the routing of traffic within the Tailnet environment.

Furthermore, the management API exposes detailed configuration structures that reveal internal network topologies, container identifiers, and backend URLs. An attacker can leverage this information to map out isolated systems, locate other sensitive databases, and plan further lateral movement. Additionally, administrative capabilities such as triggering server-side webhooks present opportunities for server-side request forgery (SSRF) and localized denial of service.

The CVSS v3.1 base score is calculated at 8.3, reflecting high confidentiality, integrity, and availability impacts. While the exploitation requires the attacker to occupy a position within the internal network or a proxied backend, the resulting scope change makes the vulnerability particularly significant because a compromise of a standard container escalates directly to host-level network proxy control.

Remediation & Defense-in-Depth

The primary remediation strategy is upgrading TSDProxy to a version containing the official fix. The vulnerability is resolved in the Go pseudo-version 1.4.4-0.20260603142855-434819b4421e, which implements the patched header sanitization and the target validation checks. Organizations running TSDProxy via Docker should pull the latest image built from the main branch containing the patched proxy manager code.

In environments where immediate software upgrades are not feasible, network-level mitigations must be deployed to disrupt the exploitation path. Security teams should enforce strict network namespace isolation, ensuring that upstream backend containers are placed in isolated bridge networks rather than using host networking mode. This prevents backend applications from accessing the host loopback interface where the management API resides.

Additionally, administrators can mitigate the risk by setting identityHeaders: false in the proxy configuration file. This completely disables the forwarding of Tailscale user attributes to the backends, thereby preventing the execution block from injecting the administrative token. Finally, host firewalls should be configured to drop any traffic attempting to reach port 8080 from non-trusted interfaces or container bridge subnets.

Technical Appendix

CVSS Score
8.3/ 10
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:H

Affected Systems

TSDProxy

Affected Versions Detail

Product
Affected Versions
Fixed Version
TSDProxy
almeidapaulopt
< 1.4.4-0.20260603142855-434819b4421e1.4.4-0.20260603142855-434819b4421e
AttributeDetail
CWE IDCWE-200, CWE-287
Attack VectorNetwork
CVSS v3.1 Score8.3 (High)
ImpactPrivilege Escalation and Complete Proxy Control
Exploit Statuspoc
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1556Modify Authentication Process
Credential Access
T1078Valid Accounts
Defense Evasion
T1046Network Service Discovery
Discovery
CWE-200
Exposure of Sensitive Information to an Unauthorized Actor

The product exposes sensitive information to an actor that is not explicitly authorized to have access to that information.

Known Exploits & Detection

GitHub Security AdvisoryAdvisory text outlining the manual steps to harvest and replay the x-tsdproxy-auth-token.

Vulnerability Timeline

Security patch commit 434819b applied to repository
2026-06-03
GHSA-g936-7jqj-mwv8 advisory officially published
2026-07-10

References & Sources

  • [1]GitHub Security Advisory GHSA-g936-7jqj-mwv8
  • [2]TSDProxy Code Repository
  • [3]TSDProxy Security Patch Commit

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 9 hours ago•CVE-2026-14669
8.8

CVE-2026-14669: PostgreSQL to_char() Timezone Abbreviation Heap-Based Buffer Overflow

CVE-2026-14669 is a critical heap-based buffer overflow vulnerability in PostgreSQL's date/time formatting function to_char(timestamptz). The flaw arises from unsafe copying of user-controlled timezone abbreviations into a fixed-size internal buffer. An authenticated database user can trigger this issue by setting a long POSIX timezone abbreviation containing custom formatting, allowing them to overwrite adjacent heap structures and hijack execution control to achieve remote code execution (RCE) with the privileges of the 'postgres' operating system user.

Alon Barad
Alon Barad
7 views•6 min read
•2 days ago•CVE-2026-63462
7.5

CVE-2026-63462: Unauthenticated Stack Overflow Denial of Service in Unleash Server

An unauthenticated remote denial of service vulnerability exists in the Unleash feature management platform. By submitting a crafted JSON payload containing deeply nested structures to an OpenAPI-validated endpoint, an attacker can trigger uncontrolled recursion within the error formatting module. This leads to a call-stack exhaustion (RangeError: Maximum call stack size exceeded) inside the Node.js runtime, causing the service to crash immediately without recovery.

Alon Barad
Alon Barad
11 views•6 min read
•2 days ago•CVE-2026-63004
5.5

CVE-2026-63004: Server-Side Request Forgery in Unleash Addon and Integration Subsystem

CVE-2026-63004 is a server-side request forgery (SSRF) vulnerability in the Unleash feature management platform. Authenticated administrators with CREATE_ADDON or UPDATE_ADDON privileges can exploit this vulnerability to initiate requests to loopback addresses, private networks, and cloud metadata endpoints, potentially leading to information disclosure and credential extraction.

Amit Schendel
Amit Schendel
9 views•8 min read
•2 days ago•CVE-2026-63466
4.1

CVE-2026-63466: Process-Wide Security Degradation via Global Module Mutation in Unleash

Prior to version 8.0.3, Unleash's Markdown event formatter directly mutated the global template-escaping function of the shared mustache Node.js module, resulting in a process-wide security degradation where HTML/Markdown escaping was permanently disabled for the application lifetime.

Alon Barad
Alon Barad
3 views•6 min read
•2 days ago•CVE-2026-76904
9.8

CVE-2026-76904: Unauthenticated SQL Injection in GeoTools PostGIS DataStore Component

A critical SQL injection vulnerability exists in the GeoTools open-source Java library. This vulnerability is situated within the post-processing phase of OGC Filter conversion inside the PostGIS DataStore module. Specifically, the `jsonArrayContains` function does not validate or sanitize its arguments before constructing PostgreSQL SQL/JSON path evaluation queries. An unauthenticated remote attacker can exploit this weakness by submitting crafted filters via standard OGC services like WFS or WMS to execute arbitrary SQL commands on the underlying database system.

Alon Barad
Alon Barad
15 views•5 min read
•2 days ago•CVE-2026-61824
8.2

CVE-2026-61824: High-Severity Cross-Site Scripting (XSS) via Unsanitized Site Extractors in Defuddle

CVE-2026-61824 is a high-severity Cross-Site Scripting (XSS) vulnerability in kepano/defuddle before version 0.19.1. Custom site extractors for platforms such as X/Twitter, Substack, and YouTube constructed HTML representations via template string interpolation without output escaping. This allowed malicious pages to bypass standard parser sanitization routines and execute arbitrary JavaScript.

Amit Schendel
Amit Schendel
8 views•7 min read