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.
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.
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
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.
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.
Missing RBAC protection. VIF.other_config has zero map_keys_roles entries in datamodel.ml. All keys are writable by vm-admin.
Trust boundary violation. other_config is assumed to be host-internal metadata. Exposing it to the guest via xenstore violates this assumption.
| 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 |
VIF.other_config writes on SR-IOV-backed VIFsdisclosure/vendor-detection-guidance.mdVIF.other_config on SR-IOV networksApply 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:
vendor/xenopsd/xc/device.ml:827-829 (standard VIF whitelist), vendor/xenopsd/xc/device.ml:978-1006 (SR-IOV path - no whitelist)disclosure/advisories/vif-security-advisory.md (VIOC-1)research/investigations/vif-other-config.mdDiscovered and reported by Jakob Wolffhechel, Moksha.