{"id":"CVE-2025-9566","kind":"vulnerability","aliases":["CVE-2025-9566","GHSA-wp3j-xq48-xpjw"],"related":[],"title":"podman kube play symlink traversal vulnerability","description":"### Impact\n\nThe podman kube play command can overwrite host files when the kube file contains a ConfigMap or Secret volume mount and the volume already contains a symlink to a host file.\nThis allows a malicious container to write to arbitrary files on the host BUT the attacker only controls the target path not the contents that will be written to the file. The contents are defined in the yaml file by the end user.\n\n### Requirements to exploit:\npodman kube play must be used with a ConfigMap or Secret volume mount AND must be run more than once on the same volume. All the attacker has to do is create the malicious symlink on the volume the first time it is started. After that all following starts would follow the symlink and write to the host location. \n\n\n### Patches\nFixed in podman v5.6.1\nhttps://github.com/containers/podman/commit/43fbde4e665fe6cee6921868f04b7ccd3de5ad89\n\n### Workarounds\n\nDon't use podman kube play with ConfigMap or Secret volume mounts.\n\n### PR with test for CI\n\nAdding on 9/8/2025 by @TomSweeneyRedHat , this is the PR containing the test in CI: https://github.com/containers/podman/pull/27001","summary":"When podman kube play mounts a ConfigMap or Secret volume that already holds a symlink to a host file, running the same kube file again makes podman write the YAML-defined contents to that host path. An attacker who controls a container can use this to write arbitrary files on the host, though not choose what gets written.","severity":"high","cvss":8.1,"epss":0.01159,"exploited":false,"exploited_at":null,"products":[{"name":"github.com/containers/podman/v5","fixed":["5.6.1"],"affected":"<= 5.6.0","ecosystem":"go"},{"name":"github.com/containers/podman/v4","fixed":[],"affected":"<= 4.9.5","ecosystem":"go"}],"ecosystems":["go"],"tags":["containers","cwe-22","cwe-61","kube-play","linux","podman","runtime"],"not_affected_if":["no-configmap-or-secret-mounts","no-kube-play","single-start-volumes"],"how_to_check":"- Run `podman version` and compare the version against the fixed release.\n- Search kube YAML files for ConfigMap or Secret volume mounts used with `podman kube play`.\n- Check whether those volumes are reused across repeated starts.","fix":"- podman v5: move to `5.6.1` or later.\n- podman v4: unknown (no fixed version stated in the sources).","status":"open","published_at":"2025-09-04T20:01:54+00:00","first_seen_at":"2026-11-03T06:31:20+00:00","triaged_at":"2026-11-03T06:33:21+00:00","updated_at":"2026-11-03T06:33:21+00:00","category":"runtime","confidence":0.8,"triage":{"at":"2026-11-03T06:33:21Z","model":"claude-haiku-5-5","output":{"fix":"- podman v5: move to `5.6.1` or later.\n- podman v4: unknown (no fixed version stated in the sources).","reach":"local","title":"Podman: kube play symlinks let a container overwrite host files","impact":"high","summary":"When podman kube play mounts a ConfigMap or Secret volume that already holds a symlink to a host file, running the same kube file again makes podman write the YAML-defined contents to that host path. An attacker who controls a container can use this to write arbitrary files on the host, though not choose what gets written.","audience":"businesses","category":"runtime","nicknames":[],"who_cares":["podman","kube-play","containers","linux"],"confidence":0.8,"fix_status":"available","needs_auth":"unknown","worst_case":"Attacker overwrites arbitrary host files via symlink, with attacker-chosen paths","analyst_note":"Confirm the podman v4 fixed version: the affected range is listed as <= 4.9.5 but no fix is given; check https://github.com/advisories/GHSA-wp3j-xq48-xpjw and the patch commit.","how_to_check":"- Run `podman version` and compare the version against the fixed release.\n- Search kube YAML files for ConfigMap or Secret volume mounts used with `podman kube play`.\n- Check whether those volumes are reused across repeated starts.","plain_action":"","needs_analyst":true,"not_affected_if":["no-kube-play","no-configmap-or-secret-mounts","single-start-volumes"],"who_is_affected":"Teams that run podman kube play with ConfigMap or Secret volume mounts on the host, especially where the same volume is started more than once. Exposure needs a malicious container that can create the symlink on the volume during the first start. Teams that do not use podman kube play with those mounts can skip it.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"high"},"cost_usd":0.000782,"input_tokens":4541,"output_tokens":656,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-2025':8A,16A '-22':26B '-61':28B '-9566':9A,17A '/containers/podman/commit/43fbde4e665fe6cee6921868f04b7ccd3de5ad89':238C '/containers/podman/pull/27001':273C '/containers/podman/v4':23A '/containers/podman/v5':20A '9/8/2025':259C 'add':257C 'allow':127C 'alreadi':46B,118C 'arbitrari':83B,134C 'attack':73B,141C,198C 'choos':90B 'ci':256C,270C 'command':99C 'configmap':41B,110C,180C,247C 'contain':24B,77B,108C,119C,130C,266C 'content':67B,149C,158C 'control':75B,143C 'creat':203C 'cve':7A,15A 'cwe':25B,27B 'defin':66B,160C 'end':167C 'exploit':171C 'file':53B,58B,84B,103C,107C,125C,135C,156C,164C 'first':211C 'fix':232C 'follow':219C,222C 'get':92B 'ghsa':11A 'ghsa-wp3j-xq48-xpjw':10A 'github.com':19A,22A,237C,272C 'github.com/containers/podman/commit/43fbde4e665fe6cee6921868f04b7ccd3de5ad89':236C 'github.com/containers/podman/pull/27001':271C 'github.com/containers/podman/v4':21A 'github.com/containers/podman/v5':18A 'hold':47B 'host':52B,70B,87B,102C,124C,138C,229C 'impact':94C 'kube':2A,30B,37B,57B,97C,106C,173C,244C 'kube-play':29B 'linux':32B 'locat':230C 'make':60B 'malici':129C,205C 'mount':39B,114C,184C,251C 'must':175C,186C 'overwrit':101C 'patch':231C 'path':71B,146C 'play':3A,31B,38B,98C,174C,245C 'podman':1A,33B,36B,61B,96C,172C,234C,243C 'pr':252C,265C 'requir':169C 'run':54B,188C 'runtim':34B 'secret':43B,112C,182C,249C 'start':215C,220C 'symlink':4A,49B,121C,206C,224C 'target':145C 'test':254C,268C 'though':88B 'time':212C 'tomsweeneyredhat':261C 'travers':5A 'use':79B,177C,242C 'user':168C 'v5.6.1':235C 'volum':44B,113C,117C,183C,195C,209C,250C 'vulner':6A 'workaround':239C 'would':221C 'wp3j':12A 'write':62B,82B,132C,226C 'written':93B,153C 'xpjw':14A 'xq48':13A 'yaml':65B,163C 'yaml-defin':64B","nicknames":[],"mitigations":[],"who_affected":"Teams that run podman kube play with ConfigMap or Secret volume mounts on the host, especially where the same volume is started more than once. Exposure needs a malicious container that can create the symlink on the volume during the first start. Teams that do not use podman kube play with those mounts can skip it.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"pkeys":["githubcomcontainerspodmanv4","githubcomcontainerspodmanv5"],"ptokens":["com","containers","github","podman","v4","v5"],"labels":["containers","cwe22","cwe61","go","high","kubeplay","linux","podman","runtime"],"first_public_at":"2025-09-04T17:56:20+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H","cvss_by":"GitHub","poc_count":0,"sources":[{"source":"ghsa","external_id":"GHSA-wp3j-xq48-xpjw","url":"https://github.com/advisories/GHSA-wp3j-xq48-xpjw","severity":"high","published_at":"2025-09-04T20:01:54+00:00","modified_at":"2026-11-03T06:31:09+00:00","first_seen_at":"2026-11-03T06:31:20+00:00","fetched_at":"2026-11-03T08:44:18+00:00","note":null},{"source":"nvd","external_id":"CVE-2025-9566","url":"https://nvd.nist.gov/vuln/detail/CVE-2025-9566","severity":null,"published_at":"2025-09-05T20:15:36+00:00","modified_at":"2026-11-03T05:18:26+00:00","first_seen_at":"2026-11-03T06:49:03+00:00","fetched_at":"2026-11-03T06:49:03+00:00","note":null}],"documents":[{"id":55987,"url":"https://api.github.com/repos/podman-container-tools/podman/security-advisories/GHSA-wp3j-xq48-xpjw","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":55988,"url":"https://github.com/containers/podman/security/advisories/GHSA-wp3j-xq48-xpjw","title":"Maintainer's advisory: github.com","kind":"vendor","source":"ghsa","publisher":"vendor","text":null,"published_at":"2025-09-04T17:56:20+00:00","relation":"advisory","confidence":null,"note":"Maintainer's advisory: github.com"},{"id":55989,"url":"https://github.com/containers/podman/commit/43fbde4e665fe6cee6921868f04b7ccd3de5ad89","title":"Patch: github.com","kind":"other","source":"ghsa","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"}],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}