A pool-operator in XAPI-based hypervisors (XenServer, XCP-ng) can cause network partition by setting the mtu key in PIF.other_config to an extreme value. The nm.ml:36-43 function parses the value with int_of_string and applies it as the interface MTU with no range validation. Setting MTU too low on the management interface causes packet drops that partition the host from the pool. Setting MTU too high causes fragmentation and dropped jumbo frames. On pools with HA enabled, management network partitioning triggers HA fencing.
PIF.other_config is a Map(String, String) field writable by pool-operator with zero map_keys_roles entries. The mtu key overrides the Network-level MTU setting with highest precedence in the other_config merge chain.
The code path:
pool-operator calls PIF.add_to_other_config(pif, "mtu", "68") (minimum MTU, or any extreme value)bring_pif_up, nm.determine_mtu at nm.ml:36-43 reads the mtu keyint_of_string - no range validation is performedxcp-networkdPIF.other_config has the highest merge precedence in nm.ml:112-120: it overrides both Network.other_config and Pool.other_config. A PIF-level MTU override cannot be counteracted at the pool or network level.
Missing input validation. The nm.determine_mtu function at nm.ml:36-43 accepts any integer value. No range check enforces the valid MTU range (68-9216 for most interfaces).
Missing RBAC protection. PIF.other_config has zero map_keys_roles entries. The mtu key is writable by any pool-operator.
Highest merge precedence. PIF.other_config overrides pool-wide and network-level MTU settings. A per-PIF MTU injection cannot be overridden by administrators at a higher scope.
No operational safeguard. No check verifies whether the new MTU value is compatible with the current network topology or whether the interface carries management traffic.
| Scenario | Impact | Pre-conditions | Status |
|---|---|---|---|
| Management network partition | Host unreachable from pool, XAPI heartbeat fails | pool-operator, management PIF target | Source-traced |
| HA fencing trigger | MTU corruption causes management partition, HA fences the host | pool-operator, HA enabled | Source-traced |
| Storage I/O disruption | MTU mismatch on storage PIF causes packet drops, storage timeouts | pool-operator, storage PIF target | Source-traced |
| BOC-1 chain | vm-admin uses BOC-1 S3 to self-grant pool-operator, then sets extreme MTU | vm-admin, BOC-1 | Source-traced |
PIF.other_config for mtu key changes, especially on management PIFsdisclosure/vendor-detection-guidance.mdPIF.other_config records for unexpected mtu valuesValidate MTU range at write time. Reject mtu values outside the range 68-9216 in PIF.add_to_other_config or add write-time validation in nm.determine_mtu.
Add map_keys_roles. Protect the mtu key at _R_POOL_ADMIN in the PIF field definition.
Add operational guard. Warn or reject MTU changes on management-carrying PIFs that could partition the host.
Upstream patches exist. They are held privately pending coordinated disclosure.
Disclosure:
nm.ml:36-43 (determine_mtu, no range validation), nm.ml:112-120 (merge precedence), datamodel.ml:2784-2788 (PIF.other_config field definition)disclosure/advisories/poc-security-advisory.md (POC-3)research/investigations/pif-other-config.mdDiscovered and reported by Jakob Wolffhechel, Moksha.