CVE-2021-25736 Overview
CVE-2021-25736 is an Improper Access Control vulnerability affecting Kubernetes kube-proxy on Windows platforms. The vulnerability occurs when kube-proxy unintentionally forwards traffic to local processes listening on the same port (spec.ports[*].port) as a LoadBalancer Service when the LoadBalancer controller does not set the status.loadBalancer.ingress[].ip field. This can lead to unauthorized information disclosure as network traffic intended for the LoadBalancer may be redirected to unintended local processes.
Critical Impact
Attackers with low privileges can potentially intercept sensitive network traffic through unintended traffic forwarding on Windows-based Kubernetes clusters, leading to high confidentiality impact across scope boundaries.
Affected Products
- Kubernetes Kubernetes (multiple versions)
- Microsoft Windows (when used as Kubernetes node operating system)
- Clusters using LoadBalancer Services without properly configured status.loadBalancer.ingress[].ip field
Discovery Timeline
- 2023-10-30 - CVE-2021-25736 published to NVD
- 2025-06-12 - Last updated in NVD database
Technical Details for CVE-2021-25736
Vulnerability Analysis
This vulnerability stems from improper process interpreter handling (CWE-114) in the Windows implementation of kube-proxy. When a LoadBalancer Service is configured in a Kubernetes cluster running on Windows nodes, kube-proxy is responsible for routing network traffic appropriately. However, when the LoadBalancer controller fails to populate the status.loadBalancer.ingress[].ip field, kube-proxy may incorrectly route incoming traffic to local processes that happen to be listening on the same port defined in spec.ports[*].port.
The attack requires network access and low privileges, but the complexity is high as specific conditions must be met: the cluster must be running on Windows, using LoadBalancer Services, and the LoadBalancer controller must not set the ingress IP field. When successfully exploited, the vulnerability affects resources beyond the vulnerable component's security scope, potentially exposing sensitive data intended for the LoadBalancer to unauthorized local processes.
Root Cause
The root cause lies in the Windows-specific kube-proxy implementation's handling of LoadBalancer Service traffic routing. When the status.loadBalancer.ingress[].ip field is empty or unset, the kube-proxy fails to properly validate the destination before forwarding traffic. This creates a condition where traffic can be inadvertently routed to any local process listening on the matching port number, bypassing the intended LoadBalancer routing logic.
Attack Vector
The attack vector is network-based, requiring the attacker to have low-level privileges within the cluster. The exploitation scenario involves:
- An attacker identifies a Windows-based Kubernetes cluster using LoadBalancer Services
- The attacker verifies that the LoadBalancer controller does not set the status.loadBalancer.ingress[].ip field
- A malicious or compromised local process is configured to listen on the same port as the target LoadBalancer Service
- Network traffic intended for the LoadBalancer Service is intercepted by the malicious local process
- Sensitive information from the redirected traffic is captured, leading to confidentiality breach
Clusters where the LoadBalancer controller properly sets the status.loadBalancer.ingress[].ip field are unaffected by this vulnerability.
Detection Methods for CVE-2021-25736
Indicators of Compromise
- Unexpected local processes listening on ports matching LoadBalancer Service configurations
- Anomalous network traffic patterns on Windows Kubernetes nodes where traffic is routed to local processes instead of LoadBalancer endpoints
- LoadBalancer Services with empty status.loadBalancer.ingress[].ip fields in Windows-based clusters
- Unusual process activity on ports typically reserved for LoadBalancer Services
Detection Strategies
- Monitor Kubernetes Service configurations for LoadBalancer types with missing or empty status.loadBalancer.ingress[].ip fields using kubectl get svc -o yaml
- Implement network traffic analysis on Windows nodes to detect traffic redirection anomalies
- Deploy runtime security monitoring to identify unexpected processes binding to LoadBalancer Service ports
- Use SentinelOne Singularity for Kubernetes to detect suspicious network behavior and unauthorized process activity on cluster nodes
Monitoring Recommendations
- Configure alerts for LoadBalancer Service creation events where the ingress IP field remains unset after controller processing
- Implement continuous monitoring of local process port bindings on Windows Kubernetes nodes
- Enable audit logging for kube-proxy operations to track traffic routing decisions
- Deploy network segmentation monitoring to detect cross-scope traffic that may indicate exploitation
How to Mitigate CVE-2021-25736
Immediate Actions Required
- Verify all LoadBalancer Services in Windows-based Kubernetes clusters have properly configured status.loadBalancer.ingress[].ip fields
- Audit LoadBalancer controller configurations to ensure they properly populate ingress IP addresses
- Review and restrict which processes can bind to ports matching LoadBalancer Service configurations
- Consider migrating critical LoadBalancer workloads to Linux-based nodes until patching is complete
Patch Information
Kubernetes has addressed this vulnerability through code changes. Administrators should review the GitHub Pull Request #99958 for patch details and update to patched Kubernetes versions. Additional information is available in the Kubernetes Security Announcement. NetApp users should also reference the NetApp Security Advisory for product-specific guidance.
Workarounds
- Ensure your LoadBalancer controller is configured to always set the status.loadBalancer.ingress[].ip field for all LoadBalancer Services
- Implement network policies to restrict traffic flow on Windows nodes and prevent unauthorized process access to LoadBalancer ports
- Consider using NodePort or ClusterIP service types as alternatives where LoadBalancer functionality is not strictly required
- Deploy admission controllers to validate LoadBalancer Service configurations before deployment
# Verify LoadBalancer Service configuration
kubectl get svc -A -o jsonpath='{range .items[?(@.spec.type=="LoadBalancer")]}{.metadata.namespace}/{.metadata.name}: {.status.loadBalancer.ingress[*].ip}{"\n"}{end}'
# Check for services with missing ingress IP (potential vulnerability exposure)
kubectl get svc -A -o json | jq '.items[] | select(.spec.type=="LoadBalancer") | select(.status.loadBalancer.ingress == null or .status.loadBalancer.ingress[].ip == null) | .metadata.name'
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.


