MOKSHA-2026-0043: PBD Synchronization Bypass via Pool.other_config sync_create_pbds

Advisory IDMOKSHA-2026-0043
Semantic IDPLOC-5
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.07.0 High
CVSS 4.0 VectorAV:N/AC:L/AT:N/PR:H/UI:N/VC:N/VI:H/VA:L/SC:N/SI:L/SA:N
XAPI ObjectPool
XAPI Fieldother_config:sync_create_pbds
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 disable automatic PBD creation for shared storage repositories by setting the sync_create_pbds key to "nosync" in Pool.other_config. The create_storage.ml:166-171 module checks this value during host boot and skips PBD creation when it equals "nosync". This causes shared storage to remain disconnected after host reboot - VMs depending on shared storage cannot start. The disruption persists across reboots until the key is removed.

Vulnerability Description

Pool.other_config is a Map(String, String) field writable by pool-operator. The sync_create_pbds key controls whether XAPI automatically creates PBDs (Physical Block Devices - the host-local connections to shared storage repositories) during host startup.

The code path:

  1. pool-operator calls Pool.add_to_other_config(pool, "sync_create_pbds", "nosync")
  2. XAPI stores the value without validation
  3. On next host boot, create_storage.ml:166-171 reads Pool.other_config
  4. The code checks if sync_create_pbds equals "nosync"
  5. If "nosync", PBD auto-creation for shared SRs is skipped entirely
  6. Host boots without connections to shared storage
  7. VMs with disks on shared SRs fail to start with storage connectivity errors

The key persists across reboots. Every subsequent host restart in the pool continues to skip PBD creation until the key is manually removed. In a pool with HA, this can cause cascading failures: hosts reboot without storage, HA-protected VMs cannot restart, and the pool enters a degraded state.

Root Causes

  1. Missing RBAC protection. Pool.other_config has no map_keys_roles entry for sync_create_pbds. It inherits the class default _R_POOL_OP.

  2. Missing write-time validation. No validation occurs when the key is set. The value "nosync" is a string comparison at consumption time only.

  3. Persistent denial of service. The key persists in the database across reboots, causing repeated storage disconnection on every host startup until manually removed.

  4. No operational guard. No check verifies whether disabling PBD sync is appropriate for the current pool state (e.g., whether shared SRs exist, whether HA is enabled).

Affected Systems

Directly Affected

Indirectly Affected

Exploitation Scenarios

Scenario Impact Pre-conditions Status
Storage disconnection on reboot All shared SRs disconnected after host restart, VMs fail to start pool-operator Source-traced
HA cascade HA-protected VMs cannot restart after failover because shared storage is disconnected pool-operator, HA enabled, shared storage Source-traced
Persistent disruption Key persists across reboots, causing repeated failures until manual removal pool-operator Source-traced
BOC-1 chain vm-admin uses BOC-1 S3 to self-grant pool-operator, then disables PBD sync vm-admin, BOC-1 Source-traced

Chaining Analysis

Detection

Remediation

Short-Term Mitigations

Long-Term Fix

Protect the key via map_keys_roles. Add sync_create_pbds to Pool.other_config map_keys_roles at _R_POOL_ADMIN in datamodel_pool.ml.

Add operational warnings. When sync_create_pbds is set to "nosync", XAPI should log a prominent warning during host boot indicating that shared storage will not be connected.

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