CVE-2025-68121
Critical · 10.0CVSS
10.0
EPSS
0.9%
Published
Feb 5, 2026
CISA due date
—
Cloudanix analysis
A flaw in how encrypted connections are re-established can allow an attacker to bypass security checks, potentially leading to unauthorized access to sensitive systems or data.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Moderate
- Impact
- Other
- Component
- Library
- Class
- Authentication Bypass
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
A state confusion vulnerability exists in the crypto/tls library's session resumption logic. If an application's TLS configuration, specifically the ClientCAs or RootCAs fields, is mutated between an initial handshake and a subsequent resumed handshake, the validation for the resumed session will incorrectly use the stale configuration from the initial handshake. This allows a client or server to bypass certificate authority validation, leading to a successful handshake when it should have been rejected.
Why it matters to the business
This vulnerability can lead to a complete authentication bypass, allowing unauthorized clients to connect to protected services or enabling man-in-the-middle attacks where clients are tricked into connecting to malicious servers. A successful exploit could result in data breaches, unauthorized system access, and full compromise of data confidentiality and integrity. The critical CVSS score of 10.0 underscores the potential for severe operational disruption and reputational damage.
How an attack unfolds
An attacker would exploit this flaw by forcing a scenario where TLS configuration changes between a client's initial connection and its attempt to resume a session. First, a legitimate client establishes a valid TLS session. The attacker then waits for or induces a change in the server's TLS configuration (e.g., updating the list of trusted client CAs). When the client attempts to resume the session, the attacker can hijack this attempt. The vulnerable server fails to apply the new, stricter configuration, instead validating the resumption against the original, now-obsolete rules, thereby granting the attacker an authenticated session they are not entitled to.
How to fix it
The vulnerability resides in the Go programming language's standard library (`crypto/tls`). To remediate, identify all applications built with a vulnerable version of Go and recompile them using a patched Go toolchain. As a defense-in-depth measure, developers should treat `tls.Config` objects as immutable once they are in use and avoid dynamically modifying the `ClientCAs` or `RootCAs` fields.
How to confirm the fix worked
To confirm remediation, verify that all relevant Go applications have been rebuilt with a patched version of the Go compiler and standard library. To identify exposure, perform a code review searching for patterns where `tls.Config` objects are cloned or dynamically generated (e.g., via `GetConfigForClient`) and their `ClientCAs` or `RootCAs` fields are subsequently mutated. Dynamic testing can also be performed by simulating a configuration change and verifying that session resumption with a now-invalid certificate fails as expected.
Typical attack path
- An attacker positions themselves on the network to intercept or monitor TLS traffic to a vulnerable server.
- A legitimate client performs a full TLS handshake, establishing a valid session.
- The server-side application logic modifies its TLS configuration, for example, by changing the set of trusted client certificate authorities.
- The attacker, or an unauthorized client, initiates a session resumption handshake with the server, presenting the session identifier from the legitimate client's initial connection.
- The server's vulnerable TLS library incorrectly uses the cached state from the original handshake for validation, ignoring the updated CA requirements.
- The attacker's session is successfully established, bypassing the intended client certificate authentication.
- The attacker proceeds to access protected resources, exfiltrate data, or manipulate the application as an authenticated user.
How to detect it
Detecting historical exploitation is difficult, as a successful attack would generate network logs that appear to be a legitimate TLS session resumption. Detection efforts should focus on correlating application-level audit logs with network flow data. Search for anomalies such as a session being resumed from an IP address different from the original owner, or application logs showing authenticated actions that are inconsistent with the legitimate user's behavior, particularly following any event that might trigger a TLS configuration change.
What your security team should do
- Immediately inventory all production applications to identify those built with the Go programming language.
- Prioritize rebuilding critical and internet-facing Go applications with a patched version of the Go toolchain.
- Instruct development teams to review their use of the `crypto/tls` package for patterns of dynamic `tls.Config` mutation, which can expose this flaw.
The record
During session resumption in crypto/tls, if the underlying Config has its ClientCAs or RootCAs fields mutated between the initial handshake and the resumed handshake, the resumed handshake may succeed when it should have failed. This may happen when a user calls Config.Clone and mutates the returned Config, or uses Config.GetConfigForClient. This can cause a client to resume a session with a server that it would not have resumed with during the initial handshake, or cause a server to resume a session with a client that it would not have resumed with during the initial handshake.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Go | stdlib | 0 | 1.24.13 |
| Chainguard | aactl | 0 | 0.4.12-r40 |
| Chainguard | actions-runner-controller | 0 | 0.13.1-r2 |
| Chainguard | actions-runner-controller-fips | 0 | 0.13.1-r3 |
| Chainguard | addon-resizer | 0 | 1.8.23-r13 |
| Chainguard | addon-resizer-fips | 0 | 1.8.23-r15 |
| Chainguard | age | 0 | 0 |
| Chainguard | age-fips | 0 | 0 |
| Chainguard | agentbeat | 0 | 9.2.4-r2 |
| Chainguard | agentbeat-fips | 0 | 9.2.4-r2 |
| Chainguard | amass | 0 | 5.0.1-r6 |
| Chainguard | amazon-cloudwatch-agent-operator | 0 | 3.3.1-r2 |
| Chainguard | amazon-cloudwatch-agent-operator-fips | 0 | 3.3.1-r3 |
| Chainguard | amazon-ecs-agent | 0 | 1.101.3-r0 |
| Chainguard | amazon-ecs-agent-fips | 0 | 1.101.3-r0 |
| Chainguard | amazon-ecs-cni-plugins | 0 | 2024.9.0_git20260129-r2 |
| Chainguard | amazon-ecs-cni-plugins-fips | 0 | 2024.9.0_git20260129-r4 |
| Chainguard | amazon-eks-ami | 0 | 20260129-r2 |
| Chainguard | amazon-eks-ami-fips | 0 | 20260129-r1 |
| Chainguard | amazon-k8s-cni | 0 | 0 |
| Chainguard | amazon-k8s-cni-fips | 0 | 0 |
| Chainguard | amazon-k8s-cni-init | 0 | 1.21.1-r4 |
| Chainguard | amazon-k8s-cni-init-fips | 0 | 1.21.1-r4 |
| Chainguard | amazon-k8s-cni-init-fips-compat | 0 | 0 |
| Chainguard | amazon-ssm-agent | 0 | 3.3.3270.0-r5 |
| Chainguard | amazon-ssm-agent-ecs-exec | 0 | 3.3.3270.0-r5 |
| Chainguard | amazon-ssm-agent-ecs-exec-fips | 0 | 3.3.3270.0-r5 |
| Chainguard | amazon-vpc-cni-plugins | 0 | 1.3_git20251112-r5 |
| Chainguard | amazon-vpc-cni-plugins-fips | 0 | 1.3_git20251112-r6 |
| Chainguard | ansible-operator | 0 | 1.42.0-r7 |
| Chainguard | ansible-operator-fips | 0 | 1.42.0-r5 |
| Chainguard | apache-beam-java-11-sdk | 0 | 0 |
| Chainguard | apache-beam-java-17-sdk | 0 | 0 |
| Chainguard | apache-beam-java-21-sdk | 0 | 0 |
| Chainguard | apache-exporter | 0 | 1.0.12-r2 |
| Chainguard | apisix-ingress-controller | 0 | 2.0.1-r4 |
| Chainguard | apm-server-7.17 | 0 | 7.17.29-r10 |
| Chainguard | apm-server-8.17 | 0 | 8.17.10-r5 |
| Chainguard | apm-server-8.19 | 0 | 8.19.11-r1 |
| Chainguard | apm-server-9.0 | 0 | 9.0.8-r3 |
| Chainguard | apm-server-9.1 | 0 | 9.1.10-r1 |
| Chainguard | apm-server-9.2 | 0 | 9.2.5-r1 |
| Chainguard | apm-server-fips-7.17 | 0 | 7.17.29-r9 |
| Chainguard | apm-server-fips-8.19 | 0 | 8.19.11-r1 |
| Chainguard | apm-server-fips-9.0 | 0 | 9.0.8-r4 |
| Chainguard | apm-server-fips-9.1 | 0 | 9.1.10-r1 |
| Chainguard | apm-server-fips-9.2 | 0 | 9.2.5-r1 |
| Chainguard | argo-cd-2.13 | 0 | 2.13.9-r8 |
| Chainguard | argo-cd-2.13-compat | 0 | 2.13.9-r8 |
| Chainguard | argo-cd-2.14 | 0 | 2.14.21-r7 |
| Chainguard | argo-cd-2.14-compat | 0 | 2.14.21-r7 |
| Chainguard | argo-cd-3.0 | 0 | 3.0.23-r1 |
| Chainguard | argo-cd-3.0-compat | 0 | 3.0.23-r1 |
| Chainguard | argo-cd-3.1 | 0 | 3.1.12-r2 |
| Chainguard | argo-cd-3.1-compat | 0 | 3.1.12-r2 |
| Chainguard | argo-cd-3.2 | 0 | 3.2.6-r1 |
| Chainguard | argo-cd-3.2-compat | 0 | 3.2.6-r1 |
| Chainguard | argo-cd-fips-2.14 | 0 | 2.14.21-r7 |
| Chainguard | argo-cd-fips-2.14-compat | 0 | 2.14.21-r7 |
| Chainguard | argo-cd-fips-3.0 | 0 | 3.0.23-r2 |
| Chainguard | argo-cd-fips-3.0-compat | 0 | 3.0.23-r2 |
| Chainguard | argo-cd-fips-3.1 | 0 | 3.1.12-r2 |
| Chainguard | argo-cd-fips-3.1-compat | 0 | 3.1.12-r2 |
| Chainguard | argo-cd-fips-3.2 | 0 | 3.2.6-r2 |
| Chainguard | argo-cd-fips-3.2-compat | 0 | 3.2.6-r2 |
| Chainguard | argo-events | 0 | 1.9.10-r2 |
| Chainguard | argo-events-fips | 0 | 1.9.10-r2 |
| Chainguard | argo-rollouts | 0 | 1.8.3-r8 |
| Chainguard | argo-rollouts-fips | 0 | 1.8.3-r9 |
| Chainguard | argo-workflow-controller-3.6 | 0 | 3.6.18-r2 |
| Chainguard | argo-workflow-controller-3.7 | 0 | 3.7.9-r1 |
| Chainguard | argo-workflow-executor-3.6 | 0 | 3.6.18-r2 |
| Chainguard | argo-workflow-executor-3.7 | 0 | 3.7.9-r1 |
| Chainguard | argo-workflows-3.6 | 0 | 3.6.18-r2 |
| Chainguard | argo-workflows-3.7 | 0 | 3.7.9-r1 |
| Chainguard | argocd-image-updater-fips | 0 | 1.1.0-r1 |
| Chainguard | atlantis | 0 | 0.40.0-r1 |
| Chainguard | atlantis-fips | 0 | 0.40.0-r2 |
| Chainguard | auditbeat-7 | 0 | 7.17.29-r9 |
| Chainguard | auditbeat-8.17 | 0 | 8.17.10-r7 |
| Chainguard | auditbeat-8.18 | 0 | 8.18.8-r8 |
| Chainguard | auditbeat-9.0 | 0 | 9.0.8-r6 |
| Chainguard | auditbeat-9.1 | 0 | 9.1.10-r2 |
| Chainguard | auditbeat-9.2 | 0 | 9.2.5-r0 |
| Chainguard | auditbeat-fips-7 | 0 | 7.17.29-r9 |
| Chainguard | auditbeat-fips-8.17 | 0 | 8.17.10-r5 |
| Chainguard | auditbeat-fips-8.18 | 0 | 8.18.8-r5 |
| Chainguard | auditbeat-fips-8.19 | 0 | 8.19.11-r0 |
| Chainguard | auditbeat-fips-9.0 | 0 | 9.0.8-r5 |
| Chainguard | auditbeat-fips-9.1 | 0 | 9.1.10-r2 |
| Chainguard | auditbeat-fips-9.2 | 0 | 9.2.5-r0 |
| Chainguard | authentik-go-server-fips | 0 | 2025.12.1-r3 |
| Chainguard | authservice | 0 | 1.1.5-r3 |
| Chainguard | authservice-fips | 0 | 1.1.5-r2 |
| Chainguard | aws-application-networking-k8s | 0 | 2.0.0-r2 |
| Chainguard | aws-application-networking-k8s-fips | 0 | 2.0.0-r2 |
| Chainguard | aws-ebs-csi-driver-1.49 | 0 | 1.49.2-r3 |
| Chainguard | aws-ebs-csi-driver-1.50 | 0 | 1.50.3-r3 |
| Chainguard | aws-ebs-csi-driver-1.51 | 0 | 1.51.2-r3 |
| Chainguard | aws-ebs-csi-driver-1.52 | 0 | 1.52.1-r4 |
| Chainguard | aws-ebs-csi-driver-1.53 | 0 | 1.53.0-r3 |
| Chainguard | aws-ebs-csi-driver-1.54 | 0 | 1.54.0-r3 |
| Chainguard | aws-ebs-csi-driver-1.55 | 0 | 1.55.0-r1 |
| Chainguard | aws-ebs-csi-driver-fips-1.49 | 0 | 1.49.2-r3 |
| Chainguard | aws-ebs-csi-driver-fips-1.50 | 0 | 1.50.3-r3 |
| Chainguard | aws-ebs-csi-driver-fips-1.51 | 0 | 1.51.2-r3 |
| Chainguard | aws-ebs-csi-driver-fips-1.52 | 0 | 1.52.1-r3 |
| Chainguard | aws-ebs-csi-driver-fips-1.53 | 0 | 1.53.0-r3 |
| Chainguard | aws-ebs-csi-driver-fips-1.54 | 0 | 1.54.0-r2 |
| Chainguard | aws-ebs-csi-driver-fips-1.55 | 0 | 1.55.0-r1 |
| Chainguard | aws-efs-csi-driver | 0 | 2.3.0-r2 |
| Chainguard | aws-efs-csi-driver-fips | 0 | 2.3.0-r2 |
| Chainguard | aws-eks-pod-identity-agent | 0 | 0.1.36-r5 |
| Chainguard | aws-eks-pod-identity-agent-fips | 0 | 0.1.36-r3 |
| Chainguard | aws-flb-cloudwatch | 0 | 1.9.4-r25 |
| Chainguard | aws-flb-cloudwatch-fips | 0 | 1.9.4-r20 |
| Chainguard | aws-flb-firehose | 0 | 1.7.2-r24 |
| Chainguard | aws-flb-firehose-fips | 0 | 1.7.2-r19 |
| Chainguard | aws-flb-kinesis | 0 | 1.10.3-r6 |
| Chainguard | aws-flb-kinesis-fips | 0 | 1.10.3-r7 |
| Chainguard | aws-fsx-csi-driver | 0 | 1.8.0-r2 |
| Chainguard | aws-fsx-csi-driver-fips | 0 | 1.8.0-r2 |
| Chainguard | aws-iam-authenticator | 0 | 0.7.10-r3 |
| Chainguard | aws-iam-authenticator-fips | 0 | 0.7.10-r2 |
| Chainguard | aws-load-balancer-controller | 0 | 3.0.0-r1 |
| Chainguard | aws-load-balancer-controller-fips | 0 | 3.0.0-r2 |
| Chainguard | aws-network-policy-agent | 0 | 1.3.1-r2 |
| Chainguard | aws-network-policy-agent-fips | 0 | 1.3.1-r2 |
| Chainguard | aws-node-termination-handler | 0 | 1.25.4-r2 |
| Chainguard | aws-node-termination-handler-fips | 0 | 1.25.4-r1 |
| Chainguard | aws-otel-collector-fips | 0 | 0.47.0-r1 |
| Chainguard | aws-otel-collector-healthcheck | 0 | 0.47.0-r1 |
| Chainguard | aws-otel-collector-healthcheck-fips | 0 | 0.47.0-r1 |
| Chainguard | aws-privateca-issuer | 0 | 1.8.0-r4 |
| Chainguard | aws-privateca-issuer-fips | 0 | 1.8.0-r3 |
| Chainguard | aws-s3-controller | 0 | 1.3.0-r1 |
| Chainguard | aws-signer-notation-plugin | 0 | 1.0.2292-r8 |
| Chainguard | aws-signer-notation-plugin-fips | 0 | 1.0.2292-r6 |
| Chainguard | aws-sigv4-proxy | 0 | 1.11-r3 |
| Chainguard | aws-sigv4-proxy-fips | 0 | 1.11-r2 |
| Chainguard | azcopy | 0 | 10.32.0-r1 |
| Chainguard | azcopy-fips | 0 | 10.32.0-r1 |
| Chainguard | azure-aad-pod-identity-mic | 0 | 1.8.17-r33 |
| Chainguard | azure-aad-pod-identity-nmi | 0 | 1.8.17-r33 |
| Chainguard | azure-ipam | 0 | 0.4.0-r10 |
| Chainguard | azure-service-operator | 0 | 2.17.0-r2 |
| Chainguard | azure-service-operator-fips | 0 | 2.17.0-r2 |
| Chainguard | azure-vnet-cni | 0 | 1.7.12-r2 |
| Chainguard | azure-workload-identity-webhook | 0 | 1.5.1-r7 |
| Chainguard | azuredisk-csi-1.28 | 0 | 1.28.12-r14 |
| Chainguard | azuredisk-csi-1.29 | 0 | 1.29.14-r13 |
| Chainguard | azuredisk-csi-1.30 | 0 | 1.30.12-r11 |
| Chainguard | azuredisk-csi-1.31 | 0 | 1.31.12-r7 |
| Chainguard | azuredisk-csi-1.32 | 0 | 1.32.12-r1 |
| Chainguard | azuredisk-csi-1.33 | 0 | 1.33.8-r2 |
| Chainguard | azuredisk-csi-1.34 | 0 | 1.34.1-r1 |
| Chainguard | azuredisk-csi-fips-1.28 | 0 | 1.28.12-r12 |
| Chainguard | azuredisk-csi-fips-1.29 | 0 | 1.29.14-r12 |
| Chainguard | azuredisk-csi-fips-1.30 | 0 | 1.30.12-r10 |
| Chainguard | azuredisk-csi-fips-1.31 | 0 | 1.31.12-r7 |
| Chainguard | azuredisk-csi-fips-1.32 | 0 | 1.32.12-r1 |
| Chainguard | azuredisk-csi-fips-1.33 | 0 | 1.33.8-r2 |
| Chainguard | azuredisk-csi-fips-1.34 | 0 | 1.34.1-r1 |
| Chainguard | azurefile-csi-1.29 | 0 | 1.29.12-r11 |
| Chainguard | azurefile-csi-1.30 | 0 | 1.30.10-r11 |
| Chainguard | azurefile-csi-1.31 | 0 | 1.31.8-r7 |
| Chainguard | azurefile-csi-1.32 | 0 | 1.32.9-r3 |
| Chainguard | azurefile-csi-1.33 | 0 | 1.33.7-r2 |
| Chainguard | azurefile-csi-fips-1.29 | 0 | 1.29.12-r11 |
| Chainguard | azurefile-csi-fips-1.30 | 0 | 1.30.10-r11 |
| Chainguard | azurefile-csi-fips-1.31 | 0 | 1.31.8-r7 |
| Chainguard | azurefile-csi-fips-1.32 | 0 | 1.32.9-r2 |
| Chainguard | azurefile-csi-fips-1.33 | 0 | 1.33.7-r2 |
| Chainguard | azurefile-csi-fips-1.34 | 0 | 1.34.3-r2 |
| Chainguard | backup-restore-operator-7.0 | 0 | 7.0.5-r1 |
| Chainguard | backup-restore-operator-8.1 | 0 | 8.1.2-r1 |
| Chainguard | backup-restore-operator-9.0 | 0 | 9.0.1-r1 |
| Chainguard | backup-restore-operator-fips-7.0 | 0 | 7.0.5-r1 |
| Chainguard | backup-restore-operator-fips-8.1 | 0 | 8.1.2-r1 |
| Chainguard | backup-restore-operator-fips-9.0 | 0 | 9.0.1-r1 |
| Chainguard | bank-vaults | 0 | 1.32.1-r2 |
| Chainguard | bank-vaults-fips | 0 | 1.20.4-r38 |
| Chainguard | bank-vaults-template | 0 | 1.32.1-r2 |
| Chainguard | bank-vaults-template-fips | 0 | 1.20.4-r38 |
| Chainguard | bazelisk | 0 | 1.28.1-r1 |
| Chainguard | blob-csi-1.23 | 0 | 1.23.11-r64 |
| Chainguard | blob-csi-1.24 | 0 | 1.24.11-r13 |
| Chainguard | blob-csi-1.25 | 0 | 1.25.10-r9 |
| Chainguard | blob-csi-1.26 | 0 | 1.26.9-r2 |
| Chainguard | blob-csi-1.27 | 0 | 1.27.2-r1 |
| Chainguard | blob-csi-fips-1.23 | 0 | 1.23.11-r65 |
| Chainguard | blob-csi-fips-1.24 | 0 | 1.24.11-r13 |
| Chainguard | blob-csi-fips-1.25 | 0 | 1.25.10-r8 |
| Chainguard | blob-csi-fips-1.26 | 0 | 1.26.9-r1 |
| Chainguard | blob-csi-fips-1.27 | 0 | 1.27.2-r1 |
| Chainguard | blobfuse2-fips | 0 | 2.4.2-r10 |
| Chainguard | blobfuse2-fips-health-monitor | 0 | 0 |
| Chainguard | blobfuse2-health-monitor | 0 | 0 |
| Chainguard | bom | 0 | 0.7.1-r5 |
| Chainguard | boring-registry | 0 | 0.16.6-r7 |
Related vulnerabilities
- CVE-2025-22873 It was possible to improperly access the parent directory of an os.Root by opening a… Also affects stdlib
- GO-2026-4403 Improper access to parent directory of root in os Also affects stdlib
- CVE-2025-61726 The net/url package does not set a limit on the number of query parameters in a query. Also affects stdlib
- CVE-2025-61728 archive/zip uses a super-linear file name indexing algorithm that is invoked the first… Also affects stdlib
- CVE-2025-61730 During the TLS 1.3 handshake if multiple messages are sent in records that span… Also affects stdlib
- CVE-2025-61727 An excluded subdomain constraint in a certificate chain does not restrict the usage of… Also affects stdlib
- CVE-2025-61729 Within HostnameError.Error(), when constructing an error string, there is no limit to the… Also affects stdlib
- CVE-2025-61725 The ParseAddress function constructs domain-literal address components through repeated… Also affects stdlib