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



CVE-2026-102340

CVE-2026-102340: Missing Authentication and Authorization in Telepresence Traffic Manager gRPC API

Amit Schendel
Amit Schendel
Senior Security Researcher

Nov 9, 2026·10 min read·4 visits

Executive Summary (TL;DR)

Telepresence versions prior to 2.31.0 expose an unauthenticated and unauthorized gRPC API on the Traffic Manager component (port 8081). Any compromised pod with cluster network reachability can invoke ArriveAsClient and CreateIntercept to hijack ingress traffic and steal container environment secrets across arbitrary namespaces. Upgrading to 2.31.0 and configuring security.authentication.mode to enforcing resolves the issue.

Prior to version 2.31.0, the Telepresence Traffic Manager exposed an unauthenticated gRPC API on cluster-internal port 8081 that lacked caller identity verification and Kubernetes RBAC authorization checks. An attacker operating any pod with network access to the Traffic Manager can register a session in an arbitrary managed namespace, establish service intercepts, redirect live production traffic, and exfiltrate the complete container environment of victim workloads, including mounted secrets and service account tokens.

Vulnerability Overview

Telepresence is a Cloud Native Computing Foundation (CNCF) tool maintained under telepresenceio/telepresence that enables local development workflows against remote Kubernetes and OpenShift clusters. Its architecture relies on three distinct components: the Telepresence CLI running on developer workstations, the central Traffic Manager deployed inside the cluster, and the Traffic Agent sidecar container injected into target workload pods. The Traffic Manager coordinates state between connected clients and deployed agents, exposing a gRPC server over TCP port 8081 within the cluster network.

Prior to version 2.31.0, the Traffic Manager gRPC service operated without authentication or authorization controls, tracked under CVE-2026-102340 (and GitHub Security Advisory GHSA-j8j4-rw65-56r6). This vulnerability encompasses two primary weakness classes: CWE-306 (Missing Authentication for Critical Function) and CWE-862 (Missing Authorization). The gRPC endpoint accepted plaintext HTTP/2 (h2c) connections from any network-reachable pod without verifying bearer tokens or client certificates.

Because the default cluster-wide installation configures the Traffic Manager with cluster-scoped privileges and a watchlist spanning all namespaces, the exposed API represents a critical privilege escalation vector. Any unprivileged pod capable of reaching port 8081 on the Traffic Manager service can claim arbitrary namespaces via the ArriveAsClient RPC and register traffic intercepts on arbitrary services via the CreateIntercept RPC.

Successful exploitation allows an adversary to break namespace isolation boundaries without possessing corresponding Kubernetes Role-Based Access Control (RBAC) permissions. When an intercept is established, the Traffic Manager reroutes live ingress network traffic intended for the victim service to the attacker's pod and transmits the target container's full runtime environment—exposing sensitive Kubernetes Secret mounts, projected ServiceAccount tokens, and application credentials.

Root Cause Analysis

The root cause of CVE-2026-102340 lies in the absence of gRPC server authentication interceptors and the omission of Kubernetes API authorization checks during session and intercept lifecycle management. In versions prior to 2.31.0, the server initialization in cmd/traffic/cmd/manager/manager.go instantiated the gRPC listener via server.New(ctx, opts...) using insecure credentials (insecure.NewCredentials()). Neither unary nor stream server interceptors were registered to extract or validate caller identity from incoming request metadata.

When a client initiates a session by invoking the ArriveAsClient RPC method in cmd/traffic/cmd/manager/service.go, it supplies an rpc.ClientInfo protobuf message containing a caller-chosen Namespace string. The Traffic Manager validated this input exclusively against its internal namespace watchlist using s.state.ManagesNamespace(client.Namespace). In standard deployments where the manager watches all namespaces, this check unconditionally returns true for any existing cluster namespace, allowing the caller to bind its session to privileged namespaces such as kube-system or prod without identity verification.

Furthermore, when the client subsequently invokes CreateIntercept, the service.go handler processed the requested rpc.InterceptSpec and directly invoked s.state.AddIntercept(ctx, ciReq). The Traffic Manager did not query the Kubernetes API server via a SubjectAccessReview (authorization.k8s.io/v1) to verify whether the caller possessed RBAC permissions (such as create on the pods/portforward subresource) in the target namespace.

This missing authorization directly exposes sensitive workload data due to how Telepresence synchronizes environment variables. When a Traffic Agent sidecar initializes inside a target pod, it captures the application container's environment map (cn.Environment) and reports it to the Traffic Manager via ArriveAsAgent. Upon processing an unauthorized CreateIntercept call, the Traffic Manager returns this stored environment dictionary in the InterceptInfo response, delivering the target container's secrets directly to the unauthenticated caller.

Code Analysis

The remediation for CVE-2026-102340 was implemented across three commits in Pull Request #4217 (04ec3464fe8878fdc96420cdc8036edefa0dc9ae, 6871235b674a6e843908d09696354c4b0f91578c, and 36458b65a010d2b316af48cd90e193ba190785d9). Prior to the patch, the ArriveAsClient and CreateIntercept RPC handlers accepted client claims at face value and only verified whether the target namespace was actively watched by the manager.

// Pre-patch logic in cmd/traffic/cmd/manager/service.go
func (s *service) ArriveAsClient(ctx context.Context, client *rpc.ClientInfo) (*rpc.SessionInfo, error) {
    if val := validateClient(client); val != "" {
        return nil, status.Error(codes.InvalidArgument, val)
    }
    // VULNERABLE: Only checks if the manager watches the namespace, not if the caller has RBAC access
    if !s.state.ManagesNamespace(client.Namespace) {
        return nil, status.Errorf(codes.InvalidArgument, "namespace %s is not managed", client.Namespace)
    }
    return &rpc.SessionInfo{
        SessionId:         string(s.state.AddClient(client, ptypes.TimestampNow())),
        ManagerInstallId: s.state.Id(),
    }, nil
}

To address the missing authentication (CWE-306), commit 04ec3464fe8878fdc96420cdc8036edefa0dc9ae introduced the cmd/traffic/cmd/manager/auth package. This package implements a gRPC server interceptor that extracts bearer tokens from the authorization metadata header and validates them against the Kubernetes TokenReview API (authentication.k8s.io/v1). Validated identities are stored in the request context as an auth.Principal, and results are cached in memory (with a 2-minute TTL for valid tokens and a 10-second TTL for failed validations) to prevent API server exhaustion. For Traffic Agents, the mutating webhook was updated to inject projected service account tokens bound to the traffic-manager audience (agentconfig.ManagerTokenAudience), and ArriveAsAgent now verifies that the token's pod claims match the reported AgentInfo.

To remediate the missing authorization (CWE-862), commits 6871235b674a6e843908d09696354c4b0f91578c and 36458b65a010d2b316af48cd90e193ba190785d9 integrated a SubjectAccessReview authorizer (CanPortForward) into CreateIntercept. The patched code in cmd/traffic/cmd/manager/service.go inspects the authenticated Principal from the context and checks whether the caller has RBAC permission to create the pods/portforward subresource in the target namespace or on the specific workload pods:

@@ -1170,6 +1187,9 @@ func (s *service) CreateIntercept(ctx context.Context, ciReq *rpc.CreateIntercep
 	}
 
 	if err := s.authorizeIntercept(ctx, namespace, spec); err != nil {
+		if s.authMode == auth.ModeEnforcing {
+			return nil, err
+		}
 		clog.Warnf(ctx, "intercept %q in namespace %s: %v (not enforced)", spec.Name, namespace, err)
 	}
 
@@ -1192,10 +1212,16 @@ func (s *service) CreateIntercept(ctx context.Context, ciReq *rpc.CreateIntercep
 func (s *service) authorizeIntercept(ctx context.Context, namespace string, spec *rpc.InterceptSpec) error {
 	p := auth.PrincipalFrom(ctx)
 	if p == nil {
+		if s.authMode == auth.ModeEnforcing {
+			return errors.Errorf(codes.Unauthenticated, "intercept creation requires an authenticated caller")
+		}
 		clog.Debugf(ctx, "caller is unauthenticated; skipping intercept authorization")
 		return nil
 	}

> [!IMPORTANT] > Assessment of Fix Completeness: Commit 36458b65a010d2b316af48cd90e193ba190785d9 introduces three configurable authentication modes via security.authentication.mode: disabled, permissive, and enforcing. To maintain backward compatibility during rolling upgrades, the initial default mode is permissive, which logs warnings on unauthenticated or unauthorized requests but does not block them. Consequently, upgrading to v2.31.0 without explicitly setting the mode to enforcing leaves the cluster vulnerable to exploitation.

Exploitation

Exploiting CVE-2026-102340 requires network access to the Traffic Manager gRPC endpoint on port 8081 within the Kubernetes cluster. No specialized exploit payloads or memory corruption primitives are necessary; an attacker with command execution inside any unprivileged container can abuse the standard Telepresence gRPC protocol definition or an unmodified Telepresence client binary to conduct the attack.

First, the attacker locates the Traffic Manager service (typically reachable via Kubernetes DNS at traffic-manager.ambassador.svc.cluster.local:8081) and opens an unauthenticated HTTP/2 connection. In the first phase of the protocol handshake, the attacker invokes the ArriveAsClient RPC method, passing a crafted ClientInfo structure that specifies a high-value target namespace (such as prod) in the Namespace field. The Traffic Manager verifies that prod is on its watchlist and returns a valid SessionInfo object containing a SessionId.

Next, the attacker uses the acquired SessionId to enumerate active workloads via the WatchAgents stream or directly invokes CreateIntercept. In the CreateInterceptRequest, the attacker provides an InterceptSpec targeting a sensitive service (for example, auth-service in the prod namespace), specifies the tcp or http mechanism, and points the destination host and port to the attacker's pod IP.

If a Traffic Agent sidecar is already present on the target workload—or once the Traffic Manager dynamically injects the mutating webhook sidecar into the victim deployment—the agent connects back to the manager and uploads the target pod's environment variables. The Traffic Manager transitions the intercept state to ACTIVE and returns the InterceptInfo protobuf message to the attacker.

At this stage, the attacker immediately receives the victim container's environment map from the InterceptInfo.Environment field, extracting database connection strings, API keys, and paths or values of mounted Kubernetes secrets. Simultaneously, the Traffic Agent inside the victim pod reconfigures its local tunnel to forward incoming service requests to the attacker's pod, allowing the attacker to inspect, modify, or drop live production traffic.

Impact Assessment

CVE-2026-102340 carries a CVSS v3.1 base score of 8.5 (High) with the vector string CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N. The Attack Vector is Network (AV:N) and Privileges Required is Low (PR:L), reflecting that an attacker must have access to the internal Kubernetes pod network (such as via a compromised low-privilege pod or SSRF capable of speaking HTTP/2). The Scope is Changed (S:C) because the vulnerability resides in the Traffic Manager control plane component but enables direct compromise of workloads across unrelated namespaces throughout the cluster.

The Confidentiality Impact is High (C:H). By establishing an unauthorized intercept against workloads in sensitive namespaces, an attacker obtains full read access to both live network traffic traversing the target pod and the container's runtime environment variables. In standard Kubernetes architectures, this exposes database credentials, internal microservice API keys, and Kubernetes ServiceAccount tokens, which can subsequently be used to authenticate directly to the Kubernetes API server and escalate privileges across the cluster.

The Integrity Impact is rated Low (I:L) and Availability Impact is None (A:N) in the base CVSS vector, though operational impact in production environments can be severe. Because an attacker can hijack ingress traffic destined for arbitrary services and redirect it to an attacker-controlled pod, the attacker can perform Man-in-the-Middle (MitM) attacks, inject forged responses into internal service-to-service communications, or cause targeted denial of service by blackholing intercepted connections.

From a threat intelligence perspective, CVE-2026-102340 has an EPSS score of 0.00281 (20.78th percentile) and is not currently listed in the CISA Known Exploited Vulnerabilities (KEV) catalog. Because the vulnerable port (8081) is cluster-internal by default, exploitation is primarily a post-compromise lateral movement and privilege escalation technique (MITRE ATT&CK T1068 and T1552.007) rather than an external initial access vector, unless an organization misconfigures its cluster ingress to expose the Traffic Manager externally.

Remediation

To remediate CVE-2026-102340, administrators must upgrade both the cluster-side Telepresence Traffic Manager and all developer client binaries to version 2.31.0 or later. Because version 2.31.0 defaults to permissive authentication mode to prevent disruption during phased rollouts, upgrading the software alone is insufficient to block exploitation. Administrators must explicitly configure the Traffic Manager to operate in enforcing mode.

When deploying or upgrading the Traffic Manager via Helm, enable strict authentication enforcement by setting security.authentication.mode in the Helm values file:

security:
  authentication:
    mode: enforcing

Alternatively, if managing the Traffic Manager Deployment manifests directly, set the AUTHENTICATION_MODE environment variable on the manager container:

env:
  - name: AUTHENTICATION_MODE
    value: "enforcing"

Ensure that the Traffic Manager's ClusterRole includes permissions to create tokenreviews (in authentication.k8s.io) and subjectaccessreviews (in authorization.k8s.io), which are automatically provisioned by the updated Helm chart in v2.31.0. Additionally, existing Traffic Agent sidecars injected prior to v2.31.0 must be restarted or re-injected so their pod specifications include the projected traffic-manager audience service account token volume.

For environments where immediate upgrading or enforcement is not feasible, administrators should implement compensating controls using Kubernetes NetworkPolicy resources and namespace scoping. Restrict the Traffic Manager's watchlist to specific non-sensitive development namespaces rather than the entire cluster, and apply a NetworkPolicy in the Traffic Manager's namespace (default ambassador) to restrict ingress on TCP port 8081 strictly to authorized namespaces and pods:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: restrict-traffic-manager-access
  namespace: ambassador
spec:
  podSelector:
    matchLabels:
      app: traffic-manager
  policyTypes:
    - Ingress
  ingress:
    - from:
        - namespaceSelector:
            matchLabels:
              kubernetes.io/metadata.name: telepresence-authorized-clients
      ports:
        - protocol: TCP
          port: 8081

Official Patches

telepresenceioGitHub Security Advisory GHSA-j8j4-rw65-56r6
telepresenceioTelepresence v2.31.0 Release Notes
telepresenceioGitHub Pull Request #4217 implementing authentication and RBAC authorization

Fix Analysis (3)

Technical Appendix

CVSS Score
8.5/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N
EPSS Probability
0.28%
Top 79% most exploited

Affected Systems

Telepresence Traffic ManagerTelepresence Traffic AgentTelepresence CLIKubernetes and OpenShift clusters running Telepresence < 2.31.0

Affected Versions Detail

Product
Affected Versions
Fixed Version
telepresence
telepresenceio
< 2.31.02.31.0
AttributeDetail
CVE IDCVE-2026-102340 (GHSA-j8j4-rw65-56r6)
Weakness ClassCWE-306 (Missing Authentication) & CWE-862 (Missing Authorization)
CVSS v3.1 Score8.5 High (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N)
Attack VectorCluster-internal network access to Traffic Manager gRPC port 8081
Security ImpactCross-namespace traffic hijacking and full container environment/secret exfiltration
EPSS Score0.28% (20.78th percentile)
CISA KEV StatusNot Listed
Fixed Versionv2.31.0 (with security.authentication.mode=enforcing)

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1068Exploitation for Privilege Escalation
Privilege Escalation
T1552.007Unsecured Credentials: Container API Tokens
Credential Access
CWE-306
Missing Authentication for Critical Function

The software does not perform any authentication for functionality that requires a provable user identity or consumes a significant amount of resources, combined with CWE-862 (Missing Authorization) where the software does not perform an authorization check when an actor attempts to access a resource or perform an action.

Vulnerability Timeline

Patches developed for Traffic Agent authentication (04ec3464fe8878fdc96420cdc8036edefa0dc9ae) and RBAC SubjectAccessReview authorization (6871235b674a6e843908d09696354c4b0f91578c).
2026-07-21
Opt-in authentication enforcement modes implemented (36458b65a010d2b316af48cd90e193ba190785d9).
2026-07-22
Telepresence v2.31.0 released via Pull Request #4217; GHSA-j8j4-rw65-56r6 and CVE-2026-102340 publicly disclosed.
2026-11-04
NVD and CVE records updated with CVSS v3.1 metrics and EPSS scoring.
2026-11-09

References & Sources

  • [1]GitHub Security Advisory (GHSA-j8j4-rw65-56r6)
  • [2]National Vulnerability Database (NVD) - CVE-2026-102340
  • [3]Official CVE.org Record - CVE-2026-102340
  • [4]Telepresence v2.31.0 Release
  • [5]GitHub Pull Request #4217
  • [6]Fix Commit: Authenticate traffic-agents to the traffic-manager
  • [7]Fix Commit: Authorize intercept creation against the caller's RBAC
  • [8]Fix Commit: Add an authentication mode with opt-in enforcement
  • [9]CVEProject cvelistV5 Record
  • [10]Red Hat Security Advisory - CVE-2026-102340
  • [11]Wiz Vulnerability Database - CVE-2026-102340

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

•12 minutes ago•CVE-2026-88984
7.2

CVE-2026-88984: RBAC Authorization Bypass in Kubeflow Pipelines Multi-User API Server

CVE-2026-88984 (GHSA-ghgh-57qv-h687) is an incorrect authorization vulnerability affecting Kubeflow Pipelines (KFP) prior to version 2.16.1 in multi-user deployments. The multi-user API server treats the empty Kubernetes namespace associated with shared or global pipelines as an unconditional authorization exception across all API verbs. Consequently, any authenticated user can modify, overwrite, or delete shared pipeline definitions and pipeline versions without possessing the required Kubernetes RBAC permissions, compromising the integrity and availability of global machine learning workflows.

Amit Schendel
Amit Schendel
0 views•10 min read
•about 2 hours ago•CVE-2026-63198
7.3

CVE-2026-63198: OAuth 2.0 Silent Authorization Scope Escalation in traQ

CVE-2026-63198 (GHSA-8cfq-jgf7-8m27) is an incorrect authorization vulnerability (CWE-863) in traQ, an open-source messaging platform developed in Go by Digital Creators Club traP. The flaw resides in the OAuth 2.0 authorization endpoint handler (`router/oauth2/authorization_endpoint.go`). When processing silent authorization requests (`prompt=none`) with an omitted or empty `scope` parameter, the application evaluates prior user consent against the empty requested scope set prior to applying default scope fallback logic. Because an empty set vacuously satisfies the subset check against any existing token, consent verification succeeds if the user has ever authorized the client for any single scope. Subsequently, the token issuance logic defaults the empty scope parameter to all scopes registered to the client (`req.ValidScopes`), allowing a client application with partial consent to silently escalate privileges without user interaction.

Alon Barad
Alon Barad
3 views•9 min read
•about 3 hours ago•CVE-2026-63475
4.3

CVE-2026-63475: Persistent Denial of Service via Circular Symbolic References in isomorphic-git

CVE-2026-63475 (GHSA-96wc-2m84-2cj7) is an uncontrolled recursion and infinite loop vulnerability in isomorphic-git prior to version 1.38.6. When processing Git protocol responses from a malicious or man-in-the-middle (MitM) server, isomorphic-git writes server-advertised symbolic reference (symref) capabilities directly to the local repository filesystem without validating for circular dependencies. Because the reference resolution logic in GitRefManager.resolve() lacks both cycle detection and a default recursion depth limit, any subsequent operation that resolves the circular references enters a non-terminating asynchronous recursion loop. Because the malicious references are persisted on disk, this condition induces a persistent denial of service (DoS) against the affected repository.

Amit Schendel
Amit Schendel
4 views•12 min read
•about 4 hours ago•CVE-2026-63470
9.3

CVE-2026-63470: Call-Time Code Injection via Unescaped Route-Handler Docstrings in fastapi-code-generator

CVE-2026-63470 (GHSA-h667-4jj2-cgv4) is a code injection vulnerability (CWE-94) in fastapi-code-generator prior to version 0.8.1. The tool generates FastAPI route handlers by directly interpolating the OpenAPI Operation.summary field into triple-double-quoted Python docstrings without escaping embedded triple quotes or backslashes. An attacker who supplies or modifies an OpenAPI specification can break out of the docstring literal and inject arbitrary Python expressions into the generated route handler body, resulting in remote code execution when the affected HTTP endpoint is called.

Alon Barad
Alon Barad
5 views•10 min read
•2 days ago•CVE-2026-16454
4.3

CVE-2026-16454: Object-Level Authorization Bypass in Eclipse hawkBit Direct Device Integration Controller

CVE-2026-16454 is an object-level authorization bypass vulnerability (CWE-284, CWE-862) in Eclipse hawkBit versions 1.0.3 and prior. The flaw exists within the Direct Device Integration (DDI) REST controller (hawkbit-ddi-resource), where endpoints responsible for enumerating software module metadata and serving firmware binaries fail to verify whether the requested software module is assigned to the authenticated device. Consequently, any device with valid credentials (such as a TargetToken or GatewayToken) can enumerate software module identifiers and download arbitrary firmware artifacts across the entire tenant namespace.

Amit Schendel
Amit Schendel
11 views•9 min read
•2 days ago•CVE-2026-62284
8.6

CVE-2026-62284: Remote Code Execution and SSRF via Unsanitized Kubeconfig in OSAC Operator

CVE-2026-62284 (GHSA-5w5g-j6hw-6p8f) is a code injection and server-side request forgery vulnerability in the console-proxy component of the OSAC Operator. The RemoteConfigResolver parses Kubernetes Secrets containing kubeconfig files via clientcmd.RESTConfigFromKubeConfig without sanitizing execution-related fields. An attacker with RBAC permissions to create or modify labeled Secrets in monitored namespaces can supply a malicious exec credential plugin, resulting in arbitrary command execution within the console-proxy pod.

Amit Schendel
Amit Schendel
8 views•8 min read