A vm-admin in XAPI-based hypervisors (XenServer, XCP-ng) can inject FIST/-prefixed keys into VM.xenstore_data, polluting the Fault Injection Service Testing (FIST) namespace. The FIST prefix is included in allowed_xsdata_prefixes at domain.ml:164, allowing keys starting with FIST/ to pass through the xenopsd filter and be written to guest xenstore. While XAPI's actual fault injection mechanism reads /tmp/fist_* files on disk (not xenstore entries), the namespace pollution persists in the XAPI database across VM restarts, is visible to all API consumers, and establishes a pre-positioned injection path if any future code adds xenstore-based FIST consumption. The field has zero map_keys_roles entries.
VM.xenstore_data is a Map(String, String) field writable by vm-admin with zero per-key RBAC. The only security control is a prefix filter in xenopsd at domain.ml:164-170 that accepts keys starting with vm-data/ or FIST/.
The code path:
vm-admin writes a FIST-prefixed key: VM.add_to_xenstore_data(vm, "FIST/disable_reboot", "1")message_forwarding.ml:2092-2099)filtered_xsdata prefix check at domain.ml:164-170 because FIST is in allowed_xsdata_prefixes/local/domain/<domid>/FIST/disable_rebootThe FIST namespace in xenstore is not connected to XAPI's actual fault injection mechanism (xapi_fist.ml), which checks for /tmp/fist_* files on disk. The two mechanisms share a namespace but are not linked. The xenstore path is a data passthrough only.
The security concerns:
FIST/ prefix serves no legitimate user purpose - it was added for internal developer testingVM.xenstore_data are visible to all XAPI API consumers (XenCenter, XO, scripts)Debug namespace exposed to unprivileged users. The FIST/ prefix is included in allowed_xsdata_prefixes alongside vm-data/, granting vm-admin write access to a debugging namespace.
Missing RBAC protection. VM.xenstore_data has zero map_keys_roles entries. No key prefix is restricted to a higher privilege level.
Persistent data injection. FIST keys written to VM.xenstore_data persist in the XAPI database and are rewritten to xenstore on every VM boot, creating a persistent namespace pollution vector.
No namespace separation. The xenstore FIST namespace and the file-based FIST mechanism share the same name without any connection, creating confusion about whether xenstore FIST entries have operational effects.
VM.xenstore_data see FIST-prefixed entries and may misinterpret them| Scenario | Impact | Pre-conditions | Status |
|---|---|---|---|
| Namespace pollution | Inject persistent FIST-prefixed data visible to all API consumers | vm-admin | Source-traced |
| Future attack surface | Pre-position FIST entries for exploitation if xenstore-based FIST consumption is added | vm-admin | Modeled |
| Guest-side injection | Guest writes FIST keys to vm-data; bidirectional sync propagates them to XAPI DB | Guest domain, bidirectional sync (XSD-3) | Live-tested |
| BOC-1 chain | vm-admin uses BOC-1 S3 to bulk-inject FIST keys across all VMs | vm-admin, BOC-1 | Source-traced |
vm-data/ (not directly to FIST/), and via bidirectional sync (XSD-3) these values propagate to the XAPI database. If a future code path reads FIST keys from the DB, this creates a guest-to-host injection chain.VM.xenstore_data for keys with the FIST/ prefixFIST/ key creation by non-internal sessionsdisclosure/vendor-detection-guidance.mdVM.xenstore_data records for unexpected FIST/ keysRemove FIST from allowed_xsdata_prefixes. The FIST/ prefix serves no legitimate user purpose and should be removed from allowed_xsdata_prefixes at domain.ml:164. If developer testing requires FIST in xenstore, restrict it to _R_LOCAL_ROOT_ONLY via map_keys_roles.
Add map_keys_roles protection. Restrict FIST/* keys to _R_LOCAL_ROOT_ONLY in the VM.xenstore_data field definition.
Upstream patches exist. They are held privately pending coordinated disclosure.
Disclosure:
domain.ml:164-170 (allowed_xsdata_prefixes includes FIST), domain.ml:604-624 (vm-data dir created with rwperm), message_forwarding.ml:2092-2099 (zero validation on write), datamodel_vm.ml:2818-2831 (VM.xenstore_data field definition)disclosure/advisories/xsd-security-advisory.md (XSD-2)research/investigations/vm-xenstore-data.mdDiscovered and reported by Jakob Wolffhechel, Moksha.