CVE-2025-61729
High · 7.5CVSS
7.5
EPSS
0.5%
Published
Dec 2, 2025
CISA due date
—
Cloudanix analysis
A flaw in a widely-used programming language allows an attacker to crash an application by sending it a specially crafted digital certificate, making the service unavailable to legitimate users.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Moderate
- Impact
- Denial Of Service
- Component
- Library
- Class
- Denial of service
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
A vulnerability exists in the Go language's `HostnameError.Error()` function. When constructing an error string for a certificate with numerous hostnames, the function uses an inefficient string concatenation process with quadratic runtime complexity and no limit on the number of hosts included. This allows a malicious actor to trigger excessive CPU and memory consumption by providing a specially crafted certificate, leading to a denial of service (DoS).
Why it matters to the business
An attacker can render services built with vulnerable versions of Go unresponsive or cause them to crash by sending a malicious digital certificate. This can lead to service outages for customers and partners, disrupting business operations, and potentially causing financial or reputational damage. The high CVSS score of 7.5 underscores the significant risk of service unavailability.
How an attack unfolds
An attacker targets a public-facing service, such as a web server with mutual TLS (mTLS) authentication, that is built using a vulnerable version of Go. The attacker crafts a malicious X.509 certificate containing an exceptionally large number of hostnames in fields like the Subject Alternative Name (SAN). They then initiate a TLS handshake with the target service and present this certificate. When the Go application's validation logic fails and calls the `HostnameError.Error()` function to report the mismatch, the function enters a resource-intensive loop to build a massive error string. This exhausts CPU and memory resources, causing the application to hang or crash, effectively denying service to legitimate users.
How to fix it
To remediate this vulnerability, developers must upgrade their Go development environment to a version that includes the patch and recompile their applications. The specific fix was introduced in commit `1296453960bac0fb5675853c40e3747e5237e16e`. Check the official Go release notes for the first stable version that includes this commit and upgrade your toolchain accordingly before rebuilding and deploying your Go services.
How to confirm the fix worked
To validate the fix, confirm that all Go applications have been rebuilt using a patched version of the Go toolchain. You can verify the toolchain version used to build a binary by running `go version -m <path_to_binary>`. Additionally, you can use security scanning tools to check for vulnerable dependencies in your software bill of materials (SBOM). As a direct test, presenting a certificate with many hostnames to a patched application in a non-production environment should not result in excessive resource consumption.
Typical attack path
- Attacker identifies a target service built with a vulnerable Go version that processes client-provided certificates.
- Attacker generates a malicious X.509 certificate containing an abnormally large number of hostnames.
- Attacker initiates a TLS connection to the target service.
- During the TLS handshake, the attacker presents the malicious certificate to the server.
- The Go application fails to validate the certificate and triggers the vulnerable `HostnameError.Error()` function.
- The application's CPU and memory usage spike to 100% as it attempts to construct a large error string, leading to a denial of service.
How to detect it
To detect exploitation, monitor Go applications for sudden and sustained spikes in CPU and memory usage that are not associated with legitimate traffic patterns. Correlate these resource anomalies with logs from network devices or load balancers that show incoming TLS handshakes with abnormally large certificate payloads. Application performance monitoring (APM) tools may reveal that processes are stuck inside the `crypto/x509.HostnameError.Error` function. Application logs may contain extremely long, truncated error messages related to hostname validation, but the DoS condition itself may prevent logs from being written.
What your security team should do
- Immediately identify all applications built with Go that are exposed to external networks and process client certificates.
- Prioritize upgrading the Go toolchain on all build servers and developer machines to a patched version.
- Rebuild and redeploy all identified Go applications, starting with the most critical and publicly-exposed services.
- If patching cannot be done immediately, consider implementing a temporary mitigation at the network edge (e.g., WAF or reverse proxy) to reject TLS handshakes involving certificates with an unusually large size or an excessive number of SAN entries.
The record
Within HostnameError.Error(), when constructing an error string, there is no limit to the number of hosts that will be printed out. Furthermore, the error string is constructed by repeated string concatenation, leading to quadratic runtime. Therefore, a certificate provided by a malicious actor can result in excessive resource consumption.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Go | stdlib | 0 | 1.24.11 |
| AlmaLinux:10 | go-toolset | 0 | 1.25.5-1.el10_1.alma.1 |
| AlmaLinux:10 | golang | 0 | 1.25.5-1.el10_1.alma.1 |
| AlmaLinux:10 | golang-bin | 0 | 1.25.5-1.el10_1.alma.1 |
| AlmaLinux:10 | golang-docs | 0 | 1.25.5-1.el10_1.alma.1 |
| AlmaLinux:10 | golang-misc | 0 | 1.25.5-1.el10_1.alma.1 |
| AlmaLinux:10 | golang-race | 0 | 1.25.5-1.el10_1.alma.1 |
| AlmaLinux:10 | golang-src | 0 | 1.25.5-1.el10_1.alma.1 |
| AlmaLinux:10 | golang-tests | 0 | 1.25.5-1.el10_1.alma.1 |
| AlmaLinux:8 | delve | 0 | 1.25.2-1.module_el8.10.0+4074+24330916 |
| AlmaLinux:8 | go-toolset | 0 | 1.25.5-1.module_el8.10.0+4107+b32a33ce |
| AlmaLinux:8 | golang | 0 | 1.25.5-1.module_el8.10.0+4107+b32a33ce |
| AlmaLinux:8 | golang-bin | 0 | 1.25.5-1.module_el8.10.0+4107+b32a33ce |
| AlmaLinux:8 | golang-docs | 0 | 1.25.5-1.module_el8.10.0+4107+b32a33ce |
| AlmaLinux:8 | golang-misc | 0 | 1.25.5-1.module_el8.10.0+4107+b32a33ce |
| AlmaLinux:8 | golang-race | 0 | 1.25.5-1.module_el8.10.0+4107+b32a33ce |
| AlmaLinux:8 | golang-src | 0 | 1.25.5-1.module_el8.10.0+4107+b32a33ce |
| AlmaLinux:8 | golang-tests | 0 | 1.25.5-1.module_el8.10.0+4107+b32a33ce |
| AlmaLinux:8 | grafana | 0 | 9.2.10-27.el8_10 |
| AlmaLinux:8 | grafana-pcp | 0 | 5.1.1-11.el8_10 |
| AlmaLinux:8 | grafana-selinux | 0 | 9.2.10-27.el8_10 |
| AlmaLinux:9 | go-toolset | 0 | 1.25.5-2.el9_7 |
| AlmaLinux:9 | golang | 0 | 1.25.5-2.el9_7 |
| AlmaLinux:9 | golang-bin | 0 | 1.25.5-2.el9_7 |
| AlmaLinux:9 | golang-docs | 0 | 1.25.5-2.el9_7 |
| AlmaLinux:9 | golang-misc | 0 | 1.25.5-2.el9_7 |
| AlmaLinux:9 | golang-race | 0 | 1.25.5-2.el9_7 |
| AlmaLinux:9 | golang-src | 0 | 1.25.5-2.el9_7 |
| AlmaLinux:9 | golang-tests | 0 | 1.25.5-2.el9_7 |
| Bitnami | golang | 0 | 1.24.11 |
| Chainguard | aactl | 0 | 0.4.12-r39 |
| Chainguard | actions-runner-controller | 0 | 0.13.0-r3 |
| Chainguard | actions-runner-controller-compat | 0 | 0.13.0-r3 |
| Chainguard | actions-runner-controller-fips | 0 | 0.13.0-r4 |
| Chainguard | actions-runner-controller-fips-compat | 0 | 0.13.0-r4 |
| Chainguard | addon-resizer-fips | 0 | 1.8.23-r12 |
| Chainguard | addon-resizer-fips-compat | 0 | 1.8.23-r12 |
| Chainguard | age-fips | 0 | 1.2.1-r11 |
| Chainguard | amazon-cloudwatch-agent-amazon-cloudwatch-agent-config-wizard-fips | 0 | 1.300062.0-r2 |
| Chainguard | amazon-cloudwatch-agent-config-downloader-fips | 0 | 1.300062.0-r2 |
| Chainguard | amazon-cloudwatch-agent-config-translator-fips | 0 | 1.300062.0-r2 |
| Chainguard | amazon-cloudwatch-agent-fips | 0 | 1.300062.0-r2 |
| Chainguard | amazon-cloudwatch-agent-operator-fips | 0 | 3.3.0-r3 |
| Chainguard | amazon-cloudwatch-agent-operator-fips-compat | 0 | 3.3.0-r3 |
| Chainguard | amazon-cloudwatch-agent-start-amazon-cloudwatch-agent-fips | 0 | 1.300062.0-r2 |
| Chainguard | amazon-k8s-cni-fips | 0 | 1.20.5-r1 |
| Chainguard | amazon-k8s-cni-init-fips | 0 | 1.20.5-r1 |
| Chainguard | amazon-k8s-cni-init-fips-compat | 0 | 1.20.5-r1 |
| Chainguard | amazon-ssm-agent-ecs-exec-fips | 0 | 3.3.3270.0-r3 |
| Chainguard | amazon-ssm-agent-fips | 0 | 3.3.3270.0-r3 |
| Chainguard | amazon-vpc-cni-plugins-fips | 0 | 1.3_git20251112-r2 |
| Chainguard | ansible-operator | 0 | 1.42.0-r2 |
| Chainguard | ansible-operator-compat | 0 | 1.42.0-r2 |
| Chainguard | apache-beam-java-11-sdk | 0 | 2.69.0-r1 |
| Chainguard | apache-beam-java-17-sdk | 0 | 2.69.0-r1 |
| Chainguard | apache-beam-java-21-sdk | 0 | 2.69.0-r1 |
| Chainguard | apache-beam-java-sdk | 0 | 2.69.0-r1 |
| Chainguard | apache-exporter | 0 | 1.0.11-r2 |
| Chainguard | apisix-ingress-controller | 0 | 1.8.4-r6 |
| Chainguard | apisix-ingress-controller-compat | 0 | 1.8.4-r6 |
| Chainguard | apisix-ingress-controller-iamguarded-compat | 0 | 1.8.4-r6 |
| Chainguard | apm-server-fips-7.17 | 0 | 7.17.29-r7 |
| Chainguard | apm-server-fips-7.17-compat | 0 | 7.17.29-r7 |
| Chainguard | apm-server-fips-8.17 | 0 | 8.17.10-r3 |
| Chainguard | apm-server-fips-8.17-compat | 0 | 8.17.10-r3 |
| Chainguard | apm-server-fips-8.18 | 0 | 8.18.8-r2 |
| Chainguard | apm-server-fips-8.18-compat | 0 | 8.18.8-r2 |
| Chainguard | apm-server-fips-8.19 | 0 | 8.19.8-r1 |
| Chainguard | apm-server-fips-8.19-compat | 0 | 8.19.8-r1 |
| Chainguard | apm-server-fips-9.1 | 0 | 9.1.8-r1 |
| Chainguard | apm-server-fips-9.1-compat | 0 | 9.1.8-r1 |
| Chainguard | apm-server-fips-9.2 | 0 | 9.2.2-r1 |
| Chainguard | apm-server-fips-9.2-compat | 0 | 9.2.2-r1 |
| Chainguard | argo-cd-fips-2.13-repo-server | 0 | 2.13.9-r5 |
| Chainguard | argo-cd-fips-3.0 | 0 | 3.0.20-r7 |
| Chainguard | argo-cd-fips-3.0-compat | 0 | 3.0.20-r7 |
| Chainguard | argo-cd-fips-3.0-iamguarded-compat | 0 | 3.0.20-r7 |
| Chainguard | argo-cd-fips-3.0-repo-server | 0 | 3.0.20-r7 |
| Chainguard | argo-cd-fips-3.1 | 0 | 3.1.9-r7 |
| Chainguard | argo-cd-fips-3.1-compat | 0 | 3.1.9-r7 |
| Chainguard | argo-cd-fips-3.1-iamguarded-compat | 0 | 3.1.9-r7 |
| Chainguard | argo-cd-fips-3.1-repo-server | 0 | 3.1.9-r7 |
| Chainguard | argo-cd-fips-3.2 | 0 | 3.2.1-r1 |
| Chainguard | argo-cd-fips-3.2-compat | 0 | 3.2.1-r1 |
| Chainguard | argo-cd-fips-3.2-iamguarded-compat | 0 | 3.2.1-r1 |
| Chainguard | argo-cd-fips-3.2-repo-server | 0 | 3.2.1-r1 |
| Chainguard | argo-rollouts-fips | 0 | 1.8.3-r7 |
| Chainguard | argocd-image-updater | 0 | 1.0.1-r2 |
| Chainguard | argocd-image-updater-compat | 0 | 1.0.1-r2 |
| Chainguard | auditbeat-7 | 0 | 7.17.29-r7 |
| Chainguard | auditbeat-7-oci-entrypoint | 0 | 7.17.29-r7 |
| Chainguard | auditbeat-8.17 | 0 | 8.17.10-r4 |
| Chainguard | auditbeat-8.17-oci-entrypoint | 0 | 8.17.10-r4 |
| Chainguard | authservice-fips | 0 | 1.1.4-r1 |
| Chainguard | authservice-fips-compat | 0 | 1.1.4-r1 |
| Chainguard | aws-application-networking-k8s-fips | 0 | 1.1.7-r2 |
| Chainguard | aws-application-networking-k8s-fips-compat | 0 | 1.1.7-r2 |
| Chainguard | aws-ebs-csi-driver-fips-1.49 | 0 | 1.49.2-r1 |
| Chainguard | aws-ebs-csi-driver-fips-1.50 | 0 | 1.50.3-r1 |
| Chainguard | aws-ebs-csi-driver-fips-1.51 | 0 | 1.51.2-r1 |
| Chainguard | aws-ebs-csi-driver-fips-1.52 | 0 | 1.52.1-r1 |
| Chainguard | aws-ebs-csi-driver-fips-1.53 | 0 | 1.53.0-r1 |
| Chainguard | aws-efs-csi-driver-fips | 0 | 2.1.15-r1 |
| Chainguard | aws-eks-pod-identity-agent-fips | 0 | 0.1.36-r1 |
| Chainguard | aws-flb-cloudwatch | 0 | 1.9.4-r21 |
| Chainguard | aws-flb-cloudwatch-compat | 0 | 1.9.4-r21 |
| Chainguard | aws-flb-cloudwatch-compat-fips | 0 | 1.9.4-r15 |
| Chainguard | aws-flb-cloudwatch-fips | 0 | 1.9.4-r15 |
| Chainguard | aws-flb-firehose-compat-fips | 0 | 1.7.2-r15 |
| Chainguard | aws-flb-firehose-compat-fips | 0 | 1.7.2-r16 |
| Chainguard | aws-flb-firehose-fips | 0 | 1.7.2-r15 |
| Chainguard | aws-flb-firehose-fips | 0 | 1.7.2-r16 |
| Chainguard | aws-iam-authenticator-fips | 0 | 0.7.9-r1 |
| Chainguard | aws-load-balancer-controller | 0 | 2.16.0-r2 |
| Chainguard | aws-load-balancer-controller-compat | 0 | 2.16.0-r2 |
| Chainguard | aws-load-balancer-controller-fips | 0 | 2.16.0-r2 |
| Chainguard | aws-network-policy-agent-compat-fips | 0 | 1.2.7-r2 |
| Chainguard | aws-network-policy-agent-fips | 0 | 1.2.7-r2 |
| Chainguard | aws-node-termination-handler-fips | 0 | 1.25.3-r2 |
| Chainguard | aws-node-termination-handler-fips-compat | 0 | 1.25.3-r2 |
| Chainguard | aws-nuke | 0 | 3.62.0-r1 |
| Chainguard | aws-nuke-fips | 0 | 3.62.0-r1 |
| Chainguard | aws-otel-collector-fips | 0 | 0.45.1-r3 |
| Chainguard | aws-otel-collector-fips-healthcheck | 0 | 0.45.1-r3 |
| Chainguard | aws-otel-collector-healthcheck-fips | 0 | 0.45.1-r3 |
| Chainguard | aws-privateca-issuer | 0 | 1.7.1-r1 |
| Chainguard | aws-privateca-issuer-compat | 0 | 1.7.1-r1 |
| Chainguard | aws-privateca-issuer-compat-fips | 0 | 1.7.1-r1 |
| Chainguard | aws-privateca-issuer-fips | 0 | 1.7.1-r1 |
| Chainguard | aws-signer-notation-plugin-fips | 0 | 1.0.2292-r4 |
| Chainguard | aws-sigv4-proxy-fips | 0 | 1.10-r4 |
| Chainguard | aws-sigv4-proxy-fips-compat | 0 | 1.10-r4 |
| Chainguard | azcopy-fips | 0 | 10.31.0-r3 |
| Chainguard | azure-container-networking | 0 | 1.7.9-r1 |
| Chainguard | azure-service-operator-fips | 0 | 2.17.0-r0 |
| Chainguard | azure-vnet-cni | 0 | 1.7.9-r1 |
| Chainguard | azuredisk-csi-fips-1.28 | 0 | 1.28.12-r10 |
| Chainguard | azuredisk-csi-fips-1.29 | 0 | 1.29.14-r10 |
| Chainguard | azuredisk-csi-fips-1.30 | 0 | 1.30.12-r8 |
| Chainguard | azuredisk-csi-fips-1.31 | 0 | 1.31.12-r5 |
| Chainguard | azuredisk-csi-fips-1.32 | 0 | 1.32.11-r5 |
| Chainguard | azuredisk-csi-fips-1.33 | 0 | 1.33.7-r1 |
| Chainguard | azurefile-csi-1.33 | 0 | 1.33.6-r2 |
| Chainguard | azurefile-csi-1.33-compat | 0 | 1.33.6-r2 |
| Chainguard | azurefile-csi-fips-1.29 | 0 | 1.29.12-r9 |
| Chainguard | azurefile-csi-fips-1.29-compat | 0 | 1.29.12-r9 |
| Chainguard | azurefile-csi-fips-1.30 | 0 | 1.30.10-r9 |
| Chainguard | azurefile-csi-fips-1.30-compat | 0 | 1.30.10-r9 |
| Chainguard | azurefile-csi-fips-1.31 | 0 | 1.31.8-r5 |
| Chainguard | azurefile-csi-fips-1.31-compat | 0 | 1.31.8-r5 |
| Chainguard | azurefile-csi-fips-1.32 | 0 | 1.32.8-r2 |
| Chainguard | azurefile-csi-fips-1.32-compat | 0 | 1.32.8-r2 |
| Chainguard | azurefile-csi-fips-1.33 | 0 | 1.33.6-r2 |
| Chainguard | azurefile-csi-fips-1.33-compat | 0 | 1.33.6-r2 |
| Chainguard | bank-vaults-fips | 0 | 1.20.4-r35 |
| Chainguard | bank-vaults-template-fips | 0 | 1.20.4-r35 |
| Chainguard | beats-7 | 0 | 7.17.29-r7 |
| Chainguard | beats-8.17 | 0 | 8.17.10-r4 |
| Chainguard | blob-csi-fips-1.23 | 0 | 1.23.11-r60 |
| Chainguard | blob-csi-fips-1.23-compat | 0 | 1.23.11-r60 |
| Chainguard | blob-csi-fips-1.24 | 0 | 1.24.11-r8 |
| Chainguard | blob-csi-fips-1.24-compat | 0 | 1.24.11-r8 |
| Chainguard | blob-csi-fips-1.26 | 0 | 1.26.7-r6 |
| Chainguard | blob-csi-fips-1.26-compat | 0 | 1.26.7-r6 |
| Chainguard | blobfuse2-fips | 0 | 2.4.2-r8 |
| Chainguard | blobfuse2-fips-health-monitor | 0 | 2.4.2-r8 |
| Chainguard | blobfuse2-fips-syslog | 0 | 2.4.2-r8 |
| Chainguard | boring-registry | 0 | 0.16.6-r4 |
| Chainguard | boring-registry-fips | 0 | 0.16.6-r4 |
| Chainguard | buildctl | 0 | 0.26.2-r1 |
| Chainguard | buildctl-fips | 0 | 0.26.2-r2 |
| Chainguard | buildkitd | 0 | 0.26.2-r1 |
| Chainguard | buildkitd-fips | 0 | 0.26.2-r2 |
| Chainguard | cass-operator-compat-fips | 0 | 1.28.0-r3 |
| Chainguard | cass-operator-fips | 0 | 1.28.0-r3 |
| Chainguard | cass-operator-fips-no-pvc-delete | 0 | 1.28.0-r1 |
| Chainguard | cass-operator-fips-no-pvc-delete-compat | 0 | 1.28.0-r1 |
| Chainguard | ceph-csi-operator-compat-fips | 0 | 0.4.1-r1 |
| Chainguard | ceph-csi-operator-fips | 0 | 0.4.1-r1 |
| Chainguard | cert-exporter-fips | 0 | 2.17.0-r2 |
| Chainguard | cert-manager-acmesolver-fips-1.16 | 0 | 1.16.5-r6 |
| Chainguard | cert-manager-acmesolver-fips-1.17 | 0 | 1.17.4-r5 |
| Chainguard | cert-manager-acmesolver-fips-1.18 | 0 | 1.18.3-r2 |
| Chainguard | cert-manager-acmesolver-fips-1.19 | 0 | 1.19.1-r2 |
| Chainguard | cert-manager-cainjector-fips-1.16 | 0 | 1.16.5-r6 |
| Chainguard | cert-manager-cainjector-fips-1.17 | 0 | 1.17.4-r5 |
| Chainguard | cert-manager-cainjector-fips-1.18 | 0 | 1.18.3-r2 |
| Chainguard | cert-manager-cainjector-fips-1.19 | 0 | 1.19.1-r2 |
| Chainguard | cert-manager-controller-fips-1.16 | 0 | 1.16.5-r6 |
| Chainguard | cert-manager-controller-fips-1.17 | 0 | 1.17.4-r5 |
| Chainguard | cert-manager-controller-fips-1.18 | 0 | 1.18.3-r2 |
| Chainguard | cert-manager-controller-fips-1.19 | 0 | 1.19.1-r2 |
| Chainguard | cert-manager-csi-driver-fips | 0 | 0.11.1-r4 |
| Chainguard | cert-manager-fips-1.16 | 0 | 1.16.5-r6 |
| Chainguard | cert-manager-fips-1.16-acmesolver | 0 | 1.16.5-r6 |
| Chainguard | cert-manager-fips-1.16-cainjector | 0 | 1.16.5-r6 |
| Chainguard | cert-manager-fips-1.16-controller | 0 | 1.16.5-r6 |
| Chainguard | cert-manager-fips-1.16-startupapicheck | 0 | 1.16.5-r6 |
| Chainguard | cert-manager-fips-1.16-webhook | 0 | 1.16.5-r6 |
| Chainguard | cert-manager-fips-1.17 | 0 | 1.17.4-r5 |
Related vulnerabilities
- CVE-2025-68121 During session resumption in crypto/tls, if the underlying Config has its ClientCAs or… Also affects stdlib
- 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-61725 The ParseAddress function constructs domain-literal address components through repeated… Also affects stdlib