🛡️ CVE-2026-32254 — kube-router

🟠 CVSS 8.0 — High ✅ No Known Exploit NVD
8.0
CVSS Score
0 Low4 Medium7 High9 Critical10

Description

Kube-router Proxy Module Blindly Trusts ExternalIPs/LoadBalancer IPs Enabling Cluster-Wide Traffic Hijacking and DNS DoS

# kube-router Proxy Module Does Not Validate ExternalIPs or LoadBalancer IPs Against Configured Ranges

Summary

This issue primarily affects multi-tenant clusters where untrusted users are granted namespace-scoped permissions to create or modify Services. Single-tenant clusters or clusters where all Service creators are trusted are not meaningfully affected.

The kube-router proxy module's buildServicesInfo() function directly copies IPs from Service.spec.externalIPs and status.loadBalancer.ingress into node-level network configuration (kube-dummy-if interface, IPVS virtual services, LOCAL routing table) without validating them against the --service-external-ip-range parameter. A user with namespace-scoped Service CRUD permissions can bind arbitrary VIPs on all cluster nodes or cause denial of service to critical cluster services such as kube-dns.

The --service-external-ip-range parameter is only consumed by the netpol (network policy) module for firewall RETURN rules. The proxy module never reads this configuration, creating a gap between administrator expectations and actual enforcement.

Kubernetes' DenyServiceExternalIPs Feature Gate was introduced in v1.22 and remains disabled by default through v1.31, meaning most clusters allow Services to carry externalIPs without any admission control.

Note: This vulnerability class is not unique to kube-router. The upstream Kubernetes project classified the equivalent issue as [CVE-2020-8554](https://github.com/kubernetes/kubernetes/issues/97076) (CVSS 5.0/Medium), describing it as a design limitation with no planned in-tree fix. The reference service proxy (kube-proxy) and other third-party service proxy implementations exhibit the same behavior. kube-router's --service-external-ip-range parameter provides more defense-in-depth than most alternatives -- the gap is that this defense did not extend to the proxy module.

Details

Vulnerability Description

Kube-router's proxy module does not validate externalIPs or loadBalancer IPs before programming them into the node's network configuration:

1. Unconditional externalIPs copy: buildServicesInfo() directly copy()s Service.spec.ExternalIPs without any range validation

2. Unconditional LoadBalancer IP trust: The same function appends status.loadBalancer.ingress[].ip without verification

3. --service-external-ip-range not checked by proxy: This parameter is only referenced in the netpol module, the proxy module never checks it

4. Cluster-wide impact: IPs are bound to kube-dummy-if on all cluster nodes, added to IPVS, and added to the kube-router-svip ipset

5. No conflict detection: ExternalIPs that overlap with existing ClusterIPs (e.g., kube-dns 10.96.0.10) cause the legitimate IPVS real servers to be fully replaced by the attacker's endpoints during the stale-endpoint cleanup cycle, redirecting all traffic for that VIP:port to attacker-controlled pods

Vulnerable Code Locations

File: pkg/controllers/proxy/network_services_controller.go

Lines 866, 898 - Unconditional externalIPs copy:

```go

externalIPs: make([]string, len(svc.Spec.ExternalIPs)),

copy(svcInfo.externalIPs, svc.Spec.ExternalIPs) // No range check

```

Lines 900-904 - Unconditional LoadBalancer IP trust:

```go

for _, lbIngress := range svc.Status.LoadBalancer.Ingress {

if len(lbIngress.IP) > 0 {

svcInfo.loadBalancerIPs = append(svcInfo.loadBalancerIPs, lbIngress.IP)

}

}

```

File: pkg/controllers/proxy/utils.go

Lines 425-461 - getAllExternalIPs() merges IPs without range validation:

```go

func getAllExternalIPs(svc *serviceInfo, includeLBIPs bool) map[v1.IPFamily][]net.IP {

// Only performs IP parsing and deduplication, no range checking

}

```

File: pkg/controllers/proxy/service_endpoints_sync.go

Lines 460-464 - Binds arbitrary IPs to kube-dummy-if via netlink:

```go

err = nsc.ln.ipAddrAdd(dummyVipInterface, externalIP.String(), nodeIP.String(), true)

```

File: pkg/controllers/netpol/network_policy_controller.go

Lines 960-967 - --service-external-ip-range is ONLY referenced here:

```go

for _, externalIPRange := range config.ExternalIPCIDRs {

_, ipnet, err := net.ParseCIDR(externalIPRange)

npc.serviceExternalIPRanges = append(npc.serviceExternalIPRanges, *ipnet)

}

// The proxy module never references ExternalIPCIDRs

```

Root Cause

The proxy module was implemented without externalIP range validation. The --service-external-ip-range parameter creates a gap between administrator expectations and actual enforcement: administrators may believe externalIPs are restricted to the configured range, but the proxy module (which actually configures IPVS and network interfaces) does not enforce this restriction.

This is consistent with the broader Kubernetes ecosystem. [CVE-2020-8554](ht

How this vulnerability can be exploited

This issue can be reached over the network, attack complexity is low, an attacker needs low-level privileges on the target. No user interaction is required. The scope is unchanged, so the impact stays within the vulnerable component. Rated impact: confidentiality none, integrity low, availability high.

Affected software

CVE-2026-32254 is recorded against 3 packages.

  • github.com/cloudnativelabs/kube-router
  • github.com/cloudnativelabs/kube-router/v2
  • kube-router (fixed in 2.8.0)

Timeline and source

Published on 26 March 2026. No public exploit is currently recorded for this entry. A vendor advisory or fix has been published. Record sourced from NVD.

References

github.com (Advisory)
nvd.nist.gov (Advisory)
github.com (Fix)
github.com (Web)

Details

Severity High
CVSS Score 8.0
CVSS Vector CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:H
CWE N/A
Public Exploit ✅ No
Source NVD
Published 2026-03-26
Updated 2026-08-12
Modified 2026-03-26

Affected Packages

Software From version Fixed in
github.com/cloudnativelabs/kube-router
github.com/cloudnativelabs/kube-router/v2
kube-router 2.8.0

Similar Threats

Site Security Check

Is kube-router part of your stack?

CVE-2026-32254 is rated CVSS 8.0 High. BotEraser scans your installation against known CVE records and tells you whether this vulnerability applies to the versions you actually run.

Scan My Site Free →

No credit card required  ·  Results in minutes

ⓘ Data Notice: The information presented above has been compiled from publicly available internet sources. Boteraser aggregates this data solely for informational purposes and does not independently classify, evaluate, or endorse any findings about the vulnerabilities listed. The accuracy and completeness of this information is the sole responsibility of the original publishers. Boteraser and its operators accept no liability for any decisions made based on this data.