MOKSHA-2026-0017: Static Route Injection via Network.other_config

Advisory IDMOKSHA-2026-0017
Semantic IDNOC-3
Published2026-04-24
CVSS 3.17.6 High
CVSS 3.1 VectorAV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:N
CVSS 4.07.0 High
CVSS 4.0 VectorAV:N/AC:L/AT:N/PR:H/UI:N/VC:N/VI:H/VA:L/SC:N/SI:L/SA:N
XAPI ObjectNetwork
XAPI Fieldother_config:static-routes
Entry Rolepool-operator
ResearcherJakob Wolffhechel, Moksha

Affected Products

VendorProductVersions
Citrix / Cloud Software GroupXenServer / Citrix Hypervisorall versions (shared XAPI codebase)
VatesXCP-ng8.3.0

Summary

A pool-operator can inject arbitrary static routes into the host routing table by setting Network.other_config:static-routes to attacker-controlled subnet/gateway pairs. The value is parsed by nm.ml:469-489 and applied directly to the bridge interface with no validation on subnet, gateway reachability, or conflicts with existing routes. Injected routes can redirect storage network traffic, management traffic, or cloud subnet traffic through an attacker-controlled gateway, enabling man-in-the-middle attacks on infrastructure communications.

Vulnerability Description

Network.other_config is a Map(String, String) field writable by pool-operator. The static-routes key is consumed by the network manager daemon (xcp-networkd) to add routes to the bridge interface associated with the network.

Data Flow

pool-operator calls Network.add_to_other_config(net, "static-routes", "10.0.0.0/8/192.168.1.100")
  -> nm.ml:469-489 parses the static-routes value
  -> Route entries extracted as subnet/gateway pairs
  -> ip route add 10.0.0.0/8 via 192.168.1.100 dev <bridge>
  -> All traffic matching 10.0.0.0/8 now routes through attacker gateway

The static-routes value is a comma-separated list of entries in the format subnet/mask/gateway. Each entry is parsed and applied as a static route on the bridge interface. No validation occurs:

Root Causes

  1. Missing RBAC protection. Network.other_config has zero map_keys_roles entries for the static-routes key.

  2. No route validation. Routes are applied without checking for conflicts with management, storage, or HA heartbeat networks.

  3. No gateway reachability check. The gateway address is not validated as reachable on the bridge subnet.

  4. Immediate effect. Routes take effect immediately on the host, redirecting traffic without confirmation or delay.

Affected Systems

Directly Affected

Indirectly Affected

Exploitation Scenarios

Scenario Impact Pre-conditions Status
Storage traffic redirection Storage I/O routed through attacker gateway Storage on routable subnet Modeled (code-traced)
Management traffic MITM API and management traffic intercepted Management on affected bridge Modeled
Combined with SMC-1 Route + protocol injection for complete storage control SMC-1 available Modeled (chain)
BOC-1 chain vm-admin escalates to pool-operator via BOC-1 S3, then injects routes BOC-1 available Modeled (two-step chain)

Detection

Remediation

Short-Term Mitigations

Long-Term Fix

RBAC restriction. Add map_keys_roles entry for static-routes in datamodel.ml requiring _R_POOL_ADMIN.

Route validation. Validate injected routes against management, storage, and HA network ranges. Reject routes that would conflict with infrastructure-critical traffic paths.

Gateway validation. Verify that the gateway address is reachable on the bridge subnet before applying the route.

Upstream patches exist. They are held privately pending coordinated disclosure.

Disclosure

Disclosure:

References

Credits

Discovered and reported by Jakob Wolffhechel, Moksha.

Jakob Wolffhechel · Moksha · Copenhagen
jakob@wolffhechel.dk · +45 3170 7337
Published 2026-04-24 08:00 CEST · cna.moksha.dk · shittrix.moksha.dk