High, CVSS 8.2GoAmendedPublished
Telepresence: Tunnel endpoint accepts caller-supplied session ID with no ownership proof — active client sessions hijackable
CVE-2026-102339 · GHSA-6j3h-rp73-6rvf
- Affected
- Go github.com/telepresenceio/telepresence/v2 < 2.31.0
- Fixed in
- 2.31.0· Vendor fix available
- Issue
- The Traffic Manager `Tunnel` gRPC streaming endpoint accepts a session ID from the first bytes of the client-controlled message payload. No verification confirms the caller owns the session. An attacker supplying a valid active session ID receives a fully routed tunnel for that session, gaining the network routing capabilities of the legitimate Telepresence client. Tested on HEAD v2.28.0, commit b2231a4. Details The `Tunnel` handler reads identity from a client-provided binary payload rather than from a verified credential or prior authenticated gRPC call: ```go // cmd/traffic/cmd/manager/service.go:1057-1063 func (s *service) Tunnel(server grpc.BidiStreamingServer[...]) error { stream, err := tunnel.NewServerStream(ctx, tunnel.ClientToManager, server) return s.state.Tunnel(ctx, stream) // stream.SessionID() is client-controlled } ``` `state.Tunnel` looks up the session ID in the sessions map with no ownership proof: ```go //…
Recommended action: Upgrade to 2.31.0 or later, then redeploy and verify.A vendor fix does not resolve your finding until you verify it in your own systems.