Security Digest · Critical advisory (no CVE assigned)

GHSA-g936-7jqj-mwv8: TSDProxy: Internal proxy auth token forwarded to backend services enables management API escalation

Description A vulnerability was discovered in TSDProxy where it forwards its internal per-process authentication token to all proxied backend services.

CVSS 9.0 Critical GitHub-reviewed · critical

Should you act?

  • Only if you depend on one of the packages below, directly or transitively, in a vulnerable version. Check your lockfile with govulncheck ./....
  • No CVE has been assigned, so it will not appear in CVE-based scanners that ignore GitHub advisories. npm audit, pip-audit and Dependabot do read GitHub advisories.

Affected packages

EcosystemPackageVulnerableFirst fixed
Gogithub.com/almeidapaulopt/tsdproxy< 1.4.4-0.20260603142855-434819b4421e1.4.4-0.20260603142855-434819b4421e

Details

Description

A vulnerability was discovered in TSDProxy where it forwards its internal per-process authentication token to all proxied backend services. When identityHeaders is enabled (the default), tsdproxy injects x-tsdproxy-auth-token into every upstream HTTP request alongside user identity headers. This token is the same secret used by the management HTTP server to trust forwarded Tailscale identity claims. A backend that receives this token can replay it from localhost to the management port with an arbitrary x-tsdproxy-id value, bypassing Tailscale authentication entirely.

The token is forwarded unconditionally: ProviderUserMiddleware always calls WhoisNewContext regardless of whether the user is authenticated. In the ReverseProxy.Rewrite function, WhoisFromContext returns ok=true even for zero-value Whois{} (unauthenticated or Funnel requests). The HeaderAuthToken is set for every request when identityHeaders=true.

The attack requires the backend to reach 127.0.0.1:8080. This holds in: (1) non-Docker deployments where tsdproxy and a backend run on the same host, (2) Docker host-network-mode containers, (3) containers sharing tsdproxy's network namespace.

Affected files

- internal/proxymanager/port.go:123-132 - internal/core/admin.go:160-182

Steps to reproduce

1. Deploy tsdproxy on a host (non-Docker) with a backend at http://localhost:3000. 2. Make a request through the Tailscale proxy. The backend receives x-tsdproxy-auth-token in the request headers. 3. From the host, replay the token to the management API:

CVSS: 9.0 (v3.1) CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:H

Sources and references

  1. GitHub Advisory GHSA-g936-7jqj-mwv8 github.com
  2. github.com github.com

Critical Go advisories · Today’s Security Digest