A pool-operator can inject arbitrary NFS mount options via PBD.device_config:options when creating or reconfiguring an NFS storage repository. The NFSSR driver appends these options directly to the mount.nfs command without sanitization. An attacker can inject sec=none (disable NFS authentication), noac (disable attribute caching - performance denial of service), or ro (force read-only) to weaken storage security or degrade performance. The attack was confirmed via live testing with all checks passing.
PBD.device_config is the storage connection string for all SM drivers in XAPI-based hypervisors. The options key is consumed by the NFSSR driver during mount operations.
The data flow:
pool-operator calls SR.create() with device_config = {server: "nfs-server", serverpath: "/export", options: "noac"}options valuePBD.plug(), NFSSR reads device_config["options"]nfs.soft_mount() appends the options directly to the mount.nfs command: mount.nfs server:/export /mountpoint -o soft,noacNo validation occurs on the options value. Any string accepted by mount.nfs is applied.
| Option | Impact |
|---|---|
sec=none |
Disables NFS security mechanism - unauthenticated access |
noac |
Disables attribute caching - severe performance degradation, forces every metadata operation to round-trip to the server |
ro |
Forces read-only mount - VMs cannot write to storage |
noacl |
Disables POSIX ACL support |
nosuid / noexec |
Alters execution policy on mounted filesystem |
Missing value validation. The options key accepts arbitrary strings and forwards them directly to mount.nfs.
No mount option allowlist. The NFSSR driver does not maintain an allowlist of acceptable NFS mount options.
Architectural trust assumption. The SM driver assumes device_config contains legitimate configuration from a trusted administrator. No mechanism distinguishes malicious options from legitimate ones.
| Scenario | Impact | Pre-conditions | Status |
|---|---|---|---|
| NFS security downgrade | sec=none disables NFS authentication |
pool-operator, NFS SR | Confirmed (live-tested) |
| Performance DoS | noac disables attribute caching, causing severe I/O performance degradation |
pool-operator, NFS SR | Confirmed (live-tested) |
| Read-only lockout | ro prevents all writes to storage |
pool-operator, NFS SR | Confirmed (live-tested) |
| Via BOC-1 chain | vm-admin escalates to pool-operator via BOC-1, then injects mount options | BOC-1 available | Modeled (chained) |
PBD.device_config for NFS SRs containing the options keysoft, tcp, timeo, retrans)/proc/mountsdisclosure/vendor-detection-guidance.mddevice_config for unexpected options values/proc/mounts on each host for unexpected NFS mount optionsMount option allowlist. NFSSR should only accept known-safe NFS mount options. Reject sec=none, noac, and other dangerous options.
Write-time validation. Validate the options field against an allowlist at SR.create time, before the value is stored in the PBD.
Upstream patches exist. They are held privately pending coordinated disclosure.
Disclosure:
nfs.soft_mount() (mount option passthrough), SRCommand.parse() (device_config read)disclosure/advisories/pdc-security-advisory.md (PDC-3)research/investigations/pbd-device-config.mdresearch/pdc-3/poc/evidence/pdc-3-nfs-mount-options-20260321-222703.logDiscovered and reported by Jakob Wolffhechel, Moksha.