MOKSHA-2026-0046: MTU Manipulation / Network Partition via PIF.other_config

Advisory IDMOKSHA-2026-0046
Semantic IDPOC-3
Published2026-04-24
CVSS 3.16.5 Medium
CVSS 3.1 VectorAV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H
CVSS 4.08.3 High
CVSS 4.0 VectorAV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:N/SC:N/SI:H/SA:N
XAPI ObjectPIF
XAPI Fieldother_config:mtu
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 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.

Vulnerability Description

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:

  1. pool-operator calls PIF.add_to_other_config(pif, "mtu", "68") (minimum MTU, or any extreme value)
  2. On PIF plug or bring_pif_up, nm.determine_mtu at nm.ml:36-43 reads the mtu key
  3. The value is parsed with int_of_string - no range validation is performed
  4. On parse failure, it defaults to the Network MTU; on success, the raw integer is used
  5. The MTU is applied to the physical interface via xcp-networkd
  6. If the management interface MTU is too low, management traffic is silently dropped
  7. The host becomes unreachable from the pool - XAPI heartbeat fails

PIF.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.

Root Causes

  1. 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).

  2. Missing RBAC protection. PIF.other_config has zero map_keys_roles entries. The mtu key is writable by any pool-operator.

  3. 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.

  4. 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.

Affected Systems

Directly Affected

Indirectly Affected

Exploitation Scenarios

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

Chaining Analysis

Detection

Remediation

Short-Term Mitigations

Long-Term Fix

Validate 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

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