A vm-admin in XAPI-based hypervisors (XenServer, XCP-ng) can set the polling-duration and related polling keys (polling-idle-threshold) in VBD.other_config to extreme values within the partially validated range. While in_range validation exists in xenopsd, the accepted range still includes values that alter I/O polling behavior, leading to suboptimal polling configuration and performance degradation on affected VBDs. The VBD.other_config field has zero map_keys_roles entries, leaving all infrastructure keys writable by vm-admin.
VBD.other_config is a Map(String, String) field defined in datamodel.ml with zero map_keys_roles entries - the only other_config field in the audit with absolutely no per-key RBAC protection.
The polling-duration and polling-idle-threshold keys flow from XAPI to xenopsd as extra backend keys:
vm-admin writes VBD.other_config:polling-duration = VALUE
|
v
XAPI stores to database (zero write-time validation)
|
v
xapi_xenops.ml:663 reads polling-duration from other_config
|
v
extra_backend_keys passed to xenopsd
|
v
xenopsd writes to xenstore backend path
|
v
blkback driver reads polling parameters from xenstore
At xapi_xenops.ml:663, the polling-duration value is read from VBD.other_config and included in extra_backend_keys that are forwarded to xenopsd. Similarly, polling-idle-threshold is read at xapi_xenops.ml:671. xenopsd applies partial validation via in_range bounds checking, accepting values from 0 to max_int. Values within this range are written to the VBD's xenstore backend path and consumed by the blkback kernel driver to configure I/O polling behavior.
The issue is that extreme values within the accepted range (e.g., polling-duration=2147483647) produce suboptimal polling configurations that degrade VBD I/O performance without triggering any validation rejection.
Missing RBAC protection. VBD.other_config has zero map_keys_roles entries in datamodel.ml. The polling-duration key is writable by vm-admin via add_to_other_config.
Insufficient range validation. While in_range bounds checking exists in xenopsd, the accepted range (0 to max_int) is too broad. Values at the extremes of the range produce valid but suboptimal polling configurations.
No resource impact assessment. xenopsd applies the polling parameters without evaluating whether the values are reasonable for the underlying storage device.
set_other_config RBAC bypass. The set_other_config method replaces the entire map atomically and bypasses map_keys_roles per-key checks.
| Scenario | Impact | Pre-conditions | Status |
|---|---|---|---|
| Extreme polling-duration | VBD I/O performance degradation from excessive or insufficient polling | vm-admin, running VM with VBD | Live-tested |
| Extreme polling-idle-threshold | Polling behavior anomaly affecting I/O latency | vm-admin, running VM with VBD | Source-traced |
| BOC-1 chain | vm-admin sets polling parameters on all VBDs in pool via RBAC collapse | vm-admin, BOC-1 | Source-traced |
in_range validation limits exploitability. The impact is performance degradation, not a privilege escalation or data compromise.VBD.other_config for changes to polling-duration and polling-idle-threshold keysdisclosure/vendor-detection-guidance.mdVBD.other_config entries for unexpected polling-duration or polling-idle-threshold valuesAdd map_keys_roles protection. Restrict polling-duration and polling-idle-threshold to _R_POOL_ADMIN in datamodel.ml. I/O polling configuration is a host-level resource management decision that should not be writable by delegated VM administrators.
Tighten range validation. Replace the broad (0, max_int) range with device-appropriate bounds (e.g., (0, 10000) for polling-duration in microseconds).
Upstream patches exist. They are held privately pending coordinated disclosure.
Disclosure:
datamodel.ml (VBD.other_config field definition - zero map_keys_roles), xapi_xenops.ml:663 (polling-duration read), xapi_xenops.ml:671 (polling-idle-threshold read)disclosure/advisories/boc-1-security-advisory.md (V5)research/investigations/vbd-other-config.mdDiscovered and reported by Jakob Wolffhechel, Moksha.