MOKSHA-2026-0029: SR-IOV VIF Whitelist Bypass via VIF.other_config

Advisory IDMOKSHA-2026-0029
Semantic IDVIOC-1
Published2026-04-24
CVSS 3.17.1 High
CVSS 3.1 VectorAV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N
CVSS 4.05.3 Medium
CVSS 4.0 VectorAV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
XAPI ObjectVIF
XAPI Fieldother_config (SR-IOV path)
Entry Rolevm-admin
ResearcherJakob Wolffhechel, Moksha

Affected Products

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

Summary

On SR-IOV-backed VIFs in XAPI-based hypervisors (XenServer, XCP-ng), all VIF.other_config keys bypass the whitelist filter and are written unfiltered to guest-readable xenstore. The standard VIF path (Device.Vif.add at device.ml:827-829) applies a whitelist restricting xenstore writes to 7 known keys (promiscuous, ethtool-rx, ethtool-tx, ethtool-sg, ethtool-tso, ethtool-ufo, ethtool-gso). The SR-IOV path (Device.NetSriovVf.add at device.ml:978-1006) does not apply this whitelist. This breaks the security equivalence assumption between standard and SR-IOV VIFs, allowing a vm-admin to inject arbitrary key-value pairs into guest-readable xenstore on SR-IOV networks.

Vulnerability Description

VIF.other_config is a Map(String, String) field writable by vm-admin. For standard VIFs, xenopsd applies a whitelist filter that restricts which keys are written to xenstore.

Standard VIF Path (Filtered)

Device.Vif.add (device.ml:827-829)
  -> vif_udev_keys whitelist applied
  -> Only 7 known keys written to xenstore
  -> Guest sees only: promiscuous, ethtool-rx, ethtool-tx, ethtool-sg,
     ethtool-tso, ethtool-ufo, ethtool-gso

SR-IOV VIF Path (Unfiltered)

Device.NetSriovVf.add (device.ml:978-1006)
  -> NO whitelist filter applied
  -> ALL other_config keys written to xenstore
  -> Guest sees everything in VIF.other_config

The whitelist filter is a security control that was implemented for standard VIFs but completely omitted from the SR-IOV code path. Any key written to VIF.other_config by administrators, automation, or upstream systems becomes visible to the guest VM via xenstore on SR-IOV VIFs.

Root Causes

  1. Missing security control in SR-IOV path. The vif_udev_keys whitelist is applied in Device.Vif.add but absent from Device.NetSriovVf.add. This is a code divergence - the security control was not replicated when the SR-IOV path was implemented.

  2. Missing RBAC protection. VIF.other_config has zero map_keys_roles entries in datamodel.ml. All keys are writable by vm-admin.

  3. Trust boundary violation. other_config is assumed to be host-internal metadata. Exposing it to the guest via xenstore violates this assumption.

Affected Systems

Directly Affected

Pre-conditions

Indirectly Affected

Exploitation Scenarios

Scenario Impact Pre-conditions Status
Infrastructure metadata disclosure Guest reads host-internal metadata from VIF.other_config via xenstore SR-IOV VIF, metadata in other_config Source-traced
Future injection surface Arbitrary keys in xenstore create injection vector for future xenstore-consuming code SR-IOV VIF Source-traced (architectural)
Cross-tenant metadata exposure In multi-tenant environments, admin-set metadata leaks to tenant VMs SR-IOV VIF, multi-tenant Modeled

Detection

Remediation

Short-Term Mitigations

Long-Term Fix

Apply whitelist filter to SR-IOV VIFs. Add the same vif_udev_keys whitelist to Device.NetSriovVf.add that exists in Device.Vif.add.

Audit SR-IOV code path for other divergences. If the whitelist was missed, other security controls may also be absent from the SR-IOV path.

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