CVE-2025-22870
Medium · 4.4CVSS
4.4
EPSS
0.4%
Published
Mar 12, 2025
CISA due date
—
Cloudanix analysis
A flaw in how network addresses are handled could allow an attacker with local access to bypass security proxies, potentially exposing sensitive internal traffic.
- Exploitation
- Local Privilege
- Attacker needs
- Local User
- Complexity
- Low
- Impact
- Data Exposure
- Component
- Library
- Class
- Improper Input Validation
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The vulnerability causes incorrect parsing of IPv6 addresses that include a zone ID. When matching hostnames against proxy exclusion lists (like the NO_PROXY environment variable), the zone ID can be misinterpreted as part of the hostname. This allows a crafted request to improperly match an exclusion rule, causing it to bypass the configured proxy. This can lead to unintended network traffic routing, potentially resulting in low-impact information disclosure or denial of service.
Why it matters to the business
This vulnerability allows for the bypass of network security controls implemented by proxies. An attacker could cause sensitive application traffic, which is intended to be routed through a secure and monitored proxy, to be sent directly to its destination, evading inspection, logging, and filtering. This can lead to information leakage, policy violations, and a weakened security posture by creating blind spots in network monitoring.
How an attack unfolds
An attacker with local access to a system or control over an application's network requests can exploit this vulnerability. The attacker first identifies the proxy exclusion rules configured in the environment, typically via the NO_PROXY variable. They then craft a network request to a destination using an IPv6 address that includes a specially formatted zone ID. This zone ID is designed to mimic a domain in the exclusion list. When the vulnerable application processes this request, it misinterprets the zone ID as part of the hostname, incorrectly matches it against the exclusion list, and consequently sends the traffic directly to the destination, bypassing the intended security proxy.
How to fix it
The primary remediation is to upgrade affected components to a version that correctly parses IPv6 addresses with zone IDs. For affected Red Hat Single Sign-On products, upgrade to version `15.0.4-1.redhat_00001.1.el8sso` or later. If patching is not immediately possible, a potential mitigation is to review and tighten `NO_PROXY` rules to be as specific as possible, avoiding broad wildcards that are easier to mimic. However, this is not a complete solution, and patching is strongly recommended.
How to confirm the fix worked
To validate the fix, configure a test environment with a proxy server and set the `NO_PROXY` environment variable to a wildcard domain (e.g., `*.example.com`). From an application running on this system, attempt to make a network request to a crafted IPv6 address with a zone ID that matches the wildcard, such as `http://[::1%25test.example.com]`. Monitor the proxy's access logs. If the request appears in the proxy logs, the system is correctly routing the traffic and is not vulnerable. If the request bypasses the proxy, the system is vulnerable.
Typical attack path
- Attacker gains local access to a system or compromises an application that makes outbound network requests.
- The attacker identifies the proxy exclusion rules, such as those defined in the `NO_PROXY` environment variable.
- The attacker crafts a network request to a malicious or external destination using a specially formatted IPv6 address.
- The crafted IPv6 address includes a zone ID that mimics a hostname pattern present in the proxy exclusion list.
- The vulnerable application incorrectly parses the address, matches it against the exclusion list, and bypasses the configured proxy.
- The request is sent directly to the attacker-controlled or external destination, evading security monitoring and filtering.
How to detect it
To detect potential historical exploitation, security teams should analyze network flow logs (e.g., VPC flow logs, firewall logs) for direct outbound connections from hosts that are configured to use a proxy for all or most traffic. Correlate these direct connections against proxy server logs to identify traffic that should have been proxied but was not. Additionally, search application and system logs for connection attempts to hostnames containing IPv6 addresses with a zone ID, specifically looking for the `%25` or `%` characters within the hostname string, which may indicate an attempt to trigger the parsing flaw.
- URL or hostname strings in logs containing an IPv6 address with a zone ID, such as `[...%25...]` or `[...%...]`.
- Network connections to hostnames that appear to be malformed IPv6 addresses containing domain names, for example: `[::1%25malicious-domain.com]`.
What your security team should do
- Prioritize patching affected systems, especially those in multi-tenant or less trusted environments where local access is a credible threat.
- Audit `NO_PROXY` environment variable configurations across your fleet to ensure they are as specific as possible and do not use overly broad wildcards.
- Review network egress logs for unexpected direct connections from servers that are supposed to route all traffic through a proxy, as this could indicate a bypass.
The record
Matching of hosts against proxy patterns can improperly treat an IPv6 zone ID as a hostname component. For example, when the NO_PROXY environment variable is set to "*.example.com", a request to "[::1%25.example.com]:80` will incorrectly match and not be proxied.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Go | golang.org/x/net | 0 | 0.36.0 |
| Chainguard | aactl | 0 | 0.4.12-r28 |
| Chainguard | actions-runner-controller | 0 | 0.10.1-r6 |
| Chainguard | actions-runner-controller-compat | 0 | 0.10.1-r6 |
| Chainguard | actions-runner-controller-fips | 0 | 0.10.1-r6 |
| Chainguard | actions-runner-controller-fips-compat | 0 | 0.10.1-r6 |
| Chainguard | addon-resizer | 0 | 1.8.23-r3 |
| Chainguard | addon-resizer-compat | 0 | 1.8.23-r3 |
| Chainguard | addon-resizer-fips | 0 | 1.8.23-r3 |
| Chainguard | addon-resizer-fips-compat | 0 | 1.8.23-r3 |
| Chainguard | agentbeat-fips | 0 | 8.17.3-r3 |
| Chainguard | amazon-cloudwatch-agent | 0 | 1.300054.0-r1 |
| Chainguard | amazon-cloudwatch-agent-all | 0 | 1.300054.0-r1 |
| Chainguard | amazon-cloudwatch-agent-amazon-cloudwatch-agent-config-wizard | 0 | 1.300054.0-r1 |
| Chainguard | amazon-cloudwatch-agent-amazon-cloudwatch-agent-config-wizard-fips | 0 | 1.300053.1-r1 |
| Chainguard | amazon-cloudwatch-agent-compat | 0 | 1.300054.0-r1 |
| Chainguard | amazon-cloudwatch-agent-config-downloader | 0 | 1.300054.0-r1 |
| Chainguard | amazon-cloudwatch-agent-config-downloader-fips | 0 | 1.300053.1-r1 |
| Chainguard | amazon-cloudwatch-agent-config-translator | 0 | 1.300054.0-r1 |
| Chainguard | amazon-cloudwatch-agent-config-translator-fips | 0 | 1.300053.1-r1 |
| Chainguard | amazon-cloudwatch-agent-fips | 0 | 1.300053.1-r1 |
| Chainguard | amazon-cloudwatch-agent-operator | 0 | 2.2.0-r1 |
| Chainguard | amazon-cloudwatch-agent-operator-compat | 0 | 2.2.0-r1 |
| Chainguard | amazon-cloudwatch-agent-operator-fips | 0 | 2.2.0-r1 |
| Chainguard | amazon-cloudwatch-agent-operator-fips-compat | 0 | 2.2.0-r1 |
| Chainguard | amazon-cloudwatch-agent-start-amazon-cloudwatch-agent | 0 | 1.300054.0-r1 |
| Chainguard | amazon-cloudwatch-agent-start-amazon-cloudwatch-agent-fips | 0 | 1.300053.1-r1 |
| Chainguard | amazon-eks-ami | 0 | 20250304-r0 |
| Chainguard | amazon-k8s-cni | 0 | 1.19.3-r2 |
| Chainguard | amazon-k8s-cni-compat | 0 | 1.19.3-r2 |
| Chainguard | amazon-k8s-cni-fips | 0 | 1.19.3-r3 |
| Chainguard | amazon-k8s-cni-init | 0 | 1.19.3-r2 |
| Chainguard | amazon-k8s-cni-init-compat | 0 | 1.19.3-r2 |
| Chainguard | amazon-k8s-cni-init-fips | 0 | 1.19.3-r3 |
| Chainguard | amazon-k8s-cni-init-fips-compat | 0 | 1.19.3-r3 |
| Chainguard | amazon-ssm-agent | 0 | 3.3.1957.0-r4 |
| Chainguard | amazon-ssm-agent-ecs-exec | 0 | 3.3.1957.0-r4 |
| Chainguard | ansible-operator | 0 | 1.37.1-r5 |
| Chainguard | ansible-operator-compat | 0 | 1.37.1-r5 |
| Chainguard | apache-beam-java-11-sdk | 0 | 2.63.0-r1 |
| Chainguard | apache-beam-java-17-sdk | 0 | 2.63.0-r1 |
| Chainguard | apache-beam-java-21-sdk | 0 | 2.63.0-r1 |
| Chainguard | apache-beam-java-sdk | 0 | 2.63.0-r1 |
| Chainguard | apache-beam-python-3.11-sdk | 0 | 2.63.0-r2 |
| Chainguard | apko | 0 | 0.25.5-r0 |
| Chainguard | apm-server | 0 | 8.17.3-r2 |
| Chainguard | apm-server-compat | 0 | 8.17.3-r2 |
| Chainguard | apm-server-fips | 0 | 8.17.3-r0 |
| Chainguard | argo-cd-2.10 | 0 | 2.10.18-r13 |
| Chainguard | argo-cd-2.10-compat | 0 | 2.10.18-r13 |
| Chainguard | argo-cd-2.10-repo-server | 0 | 2.10.18-r13 |
| Chainguard | argo-cd-2.11 | 0 | 2.11.13-r6 |
| Chainguard | argo-cd-2.11-compat | 0 | 2.11.13-r6 |
| Chainguard | argo-cd-2.11-repo-server | 0 | 2.11.13-r6 |
| Chainguard | argo-cd-2.12 | 0 | 2.12.10-r7 |
| Chainguard | argo-cd-2.12-compat | 0 | 2.12.10-r7 |
| Chainguard | argo-cd-2.12-repo-server | 0 | 2.12.10-r7 |
| Chainguard | argo-cd-2.13 | 0 | 2.13.5-r7 |
| Chainguard | argo-cd-2.13-compat | 0 | 2.13.5-r7 |
| Chainguard | argo-cd-2.13-repo-server | 0 | 2.13.5-r7 |
| Chainguard | argo-cd-fips-2.10 | 0 | 2.10.18-r11 |
| Chainguard | argo-cd-fips-2.10-compat | 0 | 2.10.18-r11 |
| Chainguard | argo-cd-fips-2.10-repo-server | 0 | 2.10.18-r11 |
| Chainguard | argo-cd-fips-2.11 | 0 | 2.11.13-r5 |
| Chainguard | argo-cd-fips-2.11-compat | 0 | 2.11.13-r5 |
| Chainguard | argo-cd-fips-2.11-repo-server | 0 | 2.11.13-r5 |
| Chainguard | argo-cd-fips-2.12 | 0 | 2.12.10-r7 |
| Chainguard | argo-cd-fips-2.12-compat | 0 | 2.12.10-r7 |
| Chainguard | argo-cd-fips-2.12-repo-server | 0 | 2.12.10-r7 |
| Chainguard | argo-cd-fips-2.13 | 0 | 2.13.5-r6 |
| Chainguard | argo-cd-fips-2.13-compat | 0 | 2.13.5-r6 |
| Chainguard | argo-cd-fips-2.13-repo-server | 0 | 2.13.5-r6 |
| Chainguard | argo-cd-fips-2.14 | 0 | 2.14.5-r2 |
| Chainguard | argo-cd-fips-2.14-compat | 0 | 2.14.5-r2 |
| Chainguard | argo-cd-fips-2.14-repo-server | 0 | 2.14.5-r2 |
| Chainguard | argo-events | 0 | 1.9.5-r5 |
| Chainguard | argo-events-compat | 0 | 1.9.5-r5 |
| Chainguard | argo-events-fips | 0 | 1.9.5-r5 |
| Chainguard | argo-events-fips-compat | 0 | 1.9.5-r5 |
| Chainguard | argo-rollouts | 0 | 1.8.0-r33 |
| Chainguard | argo-rollouts-compat | 0 | 1.8.0-r33 |
| Chainguard | argo-rollouts-fips | 0 | 1.8.0-r5 |
| Chainguard | argo-workflow-cli | 0 | 3.6.5-r1 |
| Chainguard | argo-workflow-cli-fips | 0 | 3.6.5-r1 |
| Chainguard | argo-workflow-controller | 0 | 3.6.5-r1 |
| Chainguard | argo-workflow-controller-compat | 0 | 3.6.5-r1 |
| Chainguard | argo-workflow-controller-compat-fips | 0 | 3.6.5-r1 |
| Chainguard | argo-workflow-controller-fips | 0 | 3.6.5-r1 |
| Chainguard | argo-workflow-executor | 0 | 3.6.5-r1 |
| Chainguard | argo-workflow-executor-compat | 0 | 3.6.5-r1 |
| Chainguard | argo-workflow-executor-compat-fips | 0 | 3.6.5-r1 |
| Chainguard | argo-workflow-executor-fips | 0 | 3.6.5-r1 |
| Chainguard | argo-workflows | 0 | 3.6.5-r1 |
| Chainguard | argo-workflows-fips | 0 | 3.6.5-r1 |
| Chainguard | argo-workflows-known-hosts | 0 | 3.6.5-r1 |
| Chainguard | argo-workflows-known-hosts-fips | 0 | 3.6.5-r1 |
| Chainguard | argo-workflows-ui | 0 | 3.6.5-r1 |
| Chainguard | argocd-image-updater | 0 | 0.15.2-r8 |
| Chainguard | argocd-image-updater-compat | 0 | 0.15.2-r8 |
| Chainguard | atlantis | 0 | 0.33.0-r4 |
| Chainguard | atlantis-fips | 0 | 0.33.0-r5 |
| Chainguard | auditbeat-7 | 0 | 7.17.28-r4 |
| Chainguard | auditbeat-7-oci-entrypoint | 0 | 7.17.28-r4 |
| Chainguard | auditbeat-8 | 0 | 8.17.3-r3 |
| Chainguard | auditbeat-8-oci-entrypoint | 0 | 8.17.3-r3 |
| Chainguard | auditbeat-fips-7 | 0 | 7.17.28-r3 |
| Chainguard | auditbeat-fips-8 | 0 | 8.17.3-r3 |
| Chainguard | authservice-fips | 0 | 1.0.4-r4 |
| Chainguard | authservice-fips-compat | 0 | 1.0.4-r4 |
| Chainguard | aws-application-networking-k8s | 0 | 1.1.0-r5 |
| Chainguard | aws-application-networking-k8s-compat | 0 | 1.1.0-r5 |
| Chainguard | aws-ebs-csi-driver | 0 | 1.40.1-r1 |
| Chainguard | aws-ebs-csi-driver-fips | 0 | 1.41.0-r0 |
| Chainguard | aws-efs-csi-driver | 0 | 2.1.6-r2 |
| Chainguard | aws-efs-csi-driver-fips | 0 | 2.1.6-r2 |
| Chainguard | aws-iam-authenticator | 0 | 0.6.30-r2 |
| Chainguard | aws-load-balancer-controller | 0 | 2.12.0-r1 |
| Chainguard | aws-load-balancer-controller-compat | 0 | 2.12.0-r1 |
| Chainguard | aws-load-balancer-controller-fips | 0 | 2.12.0-r1 |
| Chainguard | aws-network-policy-agent | 0 | 1.2.0-r1 |
| Chainguard | aws-network-policy-agent-compat | 0 | 1.2.0-r1 |
| Chainguard | aws-network-policy-agent-compat-fips | 0 | 1.1.6-r4 |
| Chainguard | aws-network-policy-agent-fips | 0 | 1.1.6-r4 |
| Chainguard | aws-privateca-issuer-compat-fips | 0 | 1.4.1-r2 |
| Chainguard | aws-privateca-issuer-fips | 0 | 1.4.1-r2 |
| Chainguard | aws-s3-controller | 0 | 1.0.27-r32 |
| Chainguard | aws-s3-controller-compat | 0 | 1.0.27-r32 |
| Chainguard | azcopy | 0 | 10.28.0-r4 |
| Chainguard | azcopy-fips | 0 | 10.28.0-r4 |
| Chainguard | azure-aad-pod-identity-mic | 0 | 1.8.17-r20 |
| Chainguard | azure-aad-pod-identity-nmi | 0 | 1.8.17-r20 |
| Chainguard | azuredisk-csi-1.29 | 0 | 1.29.12-r5 |
| Chainguard | azuredisk-csi-1.29-compat | 0 | 1.29.12-r5 |
| Chainguard | azuredisk-csi-1.30 | 0 | 1.30.9-r3 |
| Chainguard | azuredisk-csi-1.30-compat | 0 | 1.30.9-r3 |
| Chainguard | azuredisk-csi-fips-1.28 | 0 | 1.28.11-r9 |
| Chainguard | azuredisk-csi-fips-1.29 | 0 | 1.29.12-r5 |
| Chainguard | azuredisk-csi-fips-1.30 | 0 | 1.30.9-r3 |
| Chainguard | bank-vaults | 0 | 1.20.4-r27 |
| Chainguard | bank-vaults-fips | 0 | 1.20.4-r24 |
| Chainguard | bank-vaults-template | 0 | 1.20.4-r27 |
| Chainguard | bank-vaults-template-fips | 0 | 1.20.4-r24 |
| Chainguard | beats-7 | 0 | 7.17.28-r4 |
| Chainguard | beats-8 | 0 | 8.17.3-r3 |
| Chainguard | beats-fips-7 | 0 | 7.17.28-r3 |
| Chainguard | beats-fips-8 | 0 | 8.17.3-r3 |
| Chainguard | bom | 0 | 0.6.0-r18 |
| Chainguard | boring-registry | 0 | 0.16.3-r1 |
| Chainguard | boring-registry-fips | 0 | 0.16.3-r1 |
| Chainguard | buildah | 0 | 1.39.2-r32 |
| Chainguard | buildctl | 0 | 0.20.1-r2 |
| Chainguard | buildctl-fips | 0 | 0.20.1-r2 |
| Chainguard | buildkitd | 0 | 0.20.1-r2 |
| Chainguard | buildkitd-fips | 0 | 0.20.1-r2 |
| Chainguard | caddy | 0 | 2.9.1-r7 |
| Chainguard | caddy-fips | 0 | 2.9.1-r7 |
| Chainguard | caddy-man | 0 | 2.9.1-r7 |
| Chainguard | caddy-src | 0 | 2.9.1-r7 |
| Chainguard | cadvisor | 0 | 0.52.1-r3 |
| Chainguard | cadvisor-compat | 0 | 0.52.1-r3 |
| Chainguard | cadvisor-fips | 0 | 0.52.1-r2 |
| Chainguard | calico-3.27 | 0 | 3.27.5-r33 |
| Chainguard | calico-3.27-apiserver | 0 | 3.27.5-r33 |
| Chainguard | calico-3.27-app-policy | 0 | 3.27.5-r33 |
| Chainguard | calico-3.27-calicoctl | 0 | 3.27.5-r33 |
| Chainguard | calico-3.27-cni | 0 | 3.27.5-r33 |
| Chainguard | calico-3.27-cni-compat | 0 | 3.27.5-r33 |
| Chainguard | calico-3.27-felix | 0 | 3.27.5-r33 |
| Chainguard | calico-3.27-kube-controllers | 0 | 3.27.5-r33 |
| Chainguard | calico-3.27-node | 0 | 3.27.5-r33 |
| Chainguard | calico-3.27-pod2daemon | 0 | 3.27.5-r33 |
| Chainguard | calico-3.27-pod2daemon-flexvol-compat | 0 | 3.27.5-r33 |
| Chainguard | calico-3.27-typha-client | 0 | 3.27.5-r33 |
| Chainguard | calico-3.27-typhad | 0 | 3.27.5-r33 |
| Chainguard | calico-3.28 | 0 | 3.28.3-r33 |
| Chainguard | calico-3.29 | 0 | 3.29.2-r31 |
| Chainguard | calico-apiserver-3.27 | 0 | 3.27.5-r33 |
| Chainguard | calico-apiserver-3.28 | 0 | 3.28.3-r33 |
| Chainguard | calico-apiserver-3.29 | 0 | 3.29.2-r31 |
| Chainguard | calico-apiserver-compat-3.27 | 0 | 3.27.5-r33 |
| Chainguard | calico-apiserver-compat-3.28 | 0 | 3.28.3-r33 |
| Chainguard | calico-apiserver-compat-3.29 | 0 | 3.29.2-r31 |
| Chainguard | calico-apiserver-compat-fips-3.27 | 0 | 3.27.5-r35 |
| Chainguard | calico-apiserver-fips-3.27 | 0 | 3.27.5-r35 |
| Chainguard | calico-apiserver-fips-3.28 | 0 | 3.28.3-r32 |
| Chainguard | calico-apiserver-fips-3.29 | 0 | 3.29.2-r31 |
| Chainguard | calico-app-policy-3.27 | 0 | 3.27.5-r33 |
| Chainguard | calico-app-policy-3.28 | 0 | 3.28.3-r33 |
| Chainguard | calico-app-policy-3.29 | 0 | 3.29.2-r31 |
| Chainguard | calico-app-policy-fips-3.27 | 0 | 3.27.5-r35 |
| Chainguard | calico-app-policy-fips-3.28 | 0 | 3.28.3-r32 |
| Chainguard | calico-app-policy-fips-3.29 | 0 | 3.29.2-r31 |
| Chainguard | calico-cni-3.27 | 0 | 3.27.5-r33 |
| Chainguard | calico-cni-3.28 | 0 | 3.28.3-r33 |
| Chainguard | calico-cni-3.29 | 0 | 3.29.2-r31 |
| Chainguard | calico-cni-compat-3.27 | 0 | 3.27.5-r33 |
| Chainguard | calico-cni-compat-3.28 | 0 | 3.28.3-r33 |
| Chainguard | calico-cni-compat-3.29 | 0 | 3.29.2-r31 |
| Chainguard | calico-cni-compat-fips-3.27 | 0 | 3.27.5-r35 |
| Chainguard | calico-cni-compat-fips-3.28 | 0 | 3.28.3-r32 |
Related vulnerabilities
- CVE-2026-27141 Due to missing nil check, sending 0x0a-0x0f HTTP/2 frames will cause a running server to… Also affects golang.org/x/net
- CVE-2025-58190 The html.Parse function in golang.org/x/net/html has an infinite parsing loop when… Also affects golang.org/x/net
- CVE-2025-47911 The html.Parse function in golang.org/x/net/html has quadratic parsing complexity when… Also affects golang.org/x/net
- CVE-2024-45338 An attacker can craft an input to the Parse functions that would be processed… Also affects golang.org/x/net
- CVE-2023-45288 An attacker may cause an HTTP/2 endpoint to read arbitrary amounts of header data by… Also affects golang.org/x/net
- CVE-2023-44487 The HTTP/2 protocol allows a denial of service (server resource consumption) because… Also affects golang.org/x/net
- CVE-2026-33186 gRPC-Go is the Go language implementation of gRPC. Also affects aactl
- CVE-2025-15558 Docker CLI for Windows searches for plugin binaries in C:\ProgramData\Docker\cli-plugins… Also affects aactl