{"id":"CVE-2026-89091","aliases":["AZL-107132","DEBIAN-CVE-2026-89091","EUVD-2026-95346","GHSA-4jhw-j7jr-j479","SUSE-SU-2026:24464-1","SUSE-SU-2026:5185-1","UBUNTU-CVE-2026-89091","openSUSE-SU-2026:12172-1","openSUSE-SU-2026:12173-1","openSUSE-SU-2026:12174-1","openSUSE-SU-2026:12175-1","openSUSE-SU-2026:12451-1","openSUSE-SU-2026:22172-1"],"status":"published","title":"Ansible-core: ansible-core: ansible-galaxy collection install symlink path escape allows arbitrary file write / code execution","description":"A flaw was found in ansible-core. When installing a collection with\n`ansible-galaxy collection install`, the archive extractor validates member\npaths using lexical path normalisation (os.path.abspath) instead of resolving\nsymbolic links (os.path.realpath), and it performs no containment check on\nsymlink-typed directory members before creating them. A crafted collection\ntarball can chain symlink directory entries so that a subsequent file member is\nwritten outside the intended destination directory. This allows an attacker who\ncan get a victim to install a malicious collection to overwrite arbitrary files\nwith the privileges of the user running ansible-galaxy, leading to code\nexecution on the control node. This is a bypass of the fix for CVE-2020-10691.","severity":{"version":"3.1","score":8.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H","level":"high","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-11","score":0.0048,"percentile":0.41873,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-59"],"published":"2026-10-08T21:49:30Z","modified":"2026-11-11T13:00:04Z","fixes":[{"ecosystem":"SUSE:Linux Enterprise Server 16.0","package":"ansible-core","fixed_in":["2.18.3-160000.5.1"],"sources":["osv"]},{"ecosystem":"SUSE:Linux Enterprise Server for SAP applications 16.0","package":"ansible-core","fixed_in":["2.18.3-160000.5.1"],"sources":["osv"]},{"ecosystem":"SUSE:Linux Enterprise Module for Package Hub 15 SP7","package":"ansible-core","fixed_in":["2.18.3-150400.9.20.1"],"sources":["osv"]},{"ecosystem":"SUSE:Linux Enterprise Module for Systems Management 15 SP7","package":"ansible-core","fixed_in":["2.18.3-150400.9.20.1"],"sources":["osv"]},{"ecosystem":"SUSE:Linux Enterprise Server 15 SP4-LTSS","package":"ansible-core","fixed_in":["2.18.3-150400.9.20.1"],"sources":["osv"]},{"ecosystem":"SUSE:Linux Enterprise Server 15 SP5-LTSS","package":"ansible-core","fixed_in":["2.18.3-150400.9.20.1"],"sources":["osv"]},{"ecosystem":"SUSE:Linux Enterprise Server 15 SP6-LTSS","package":"ansible-core","fixed_in":["2.18.3-150400.9.20.1"],"sources":["osv"]},{"ecosystem":"SUSE:Linux Enterprise Server for SAP Applications 15 SP4","package":"ansible-core","fixed_in":["2.18.3-150400.9.20.1"],"sources":["osv"]},{"ecosystem":"SUSE:Linux Enterprise Server for SAP Applications 15 SP5","package":"ansible-core","fixed_in":["2.18.3-150400.9.20.1"],"sources":["osv"]},{"ecosystem":"SUSE:Linux Enterprise Server for SAP Applications 15 SP6","package":"ansible-core","fixed_in":["2.18.3-150400.9.20.1"],"sources":["osv"]},{"ecosystem":"openSUSE:Tumbleweed","package":"ansible-core","fixed_in":["2.21.5-2.1"],"sources":["osv"]},{"ecosystem":"openSUSE:Tumbleweed","package":"ansible-core-2.18","fixed_in":["2.18.19-3.1"],"sources":["osv"]},{"ecosystem":"openSUSE:Tumbleweed","package":"ansible-core-2.19","fixed_in":["2.19.14-2.1"],"sources":["osv"]},{"ecosystem":"openSUSE:Tumbleweed","package":"ansible-core-2.20","fixed_in":["2.20.10-2.1"],"sources":["osv"]},{"ecosystem":"openSUSE:Leap 16.0","package":"ansible-core","fixed_in":["2.18.3-160000.5.1"],"sources":["osv"]}],"affected":[{"source":"osv","ecosystem":"Azure Linux:3","package":"ansible","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"last_affected":"2.17.11-1"}]}]},{"source":"osv","ecosystem":"Debian:12","package":"ansible-core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.14.10-1","2.14.11-1","2.14.11-2","2.14.13-1","2.14.16-0+deb12u1","2.14.18-0+deb12u1","2.14.18-0+deb12u2","2.14.3-1","2.14.6-1","2.14.7-1","2.14.8-1","2.14.9-1","2.14.9-2","2.16.5-1","2.16.6-1","2.17.0-1","2.17.1-1","2.17.2-1","2.17.3-1","2.17.5-1","2.17.5-2","2.17.5-3","2.17.5-4","2.17.5-5","2.18.0-1","2.18.0-2","2.18.1-1","2.18.1-2","2.18.1-3","2.18.1-4","2.18.3-1","2.19.0-1","2.19.0~beta1-1","2.19.0~beta1-2","2.19.0~beta2-1","2.19.0~beta4-1","2.19.0~beta5-1","2.19.0~beta6-1","2.19.0~rc2-1","2.19.1-1","2.19.2-1","2.19.3-1","2.19.3-2","2.19.4-1","2.19~pre20250506~462affa7c4-1","2.19~pre20250510~5347d4d4fc-1","2.20.1-1","2.20.3-1","2.21.0-1","2.21.1~rc1-1","2.21.1~rc1-2","2.21.2-1","2.22.0~beta1-1","2.22.0~beta2-1"]},{"source":"osv","ecosystem":"Debian:13","package":"ansible-core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.19.0-1","2.19.0~beta6-1","2.19.0~rc2-1","2.19.1-0+deb13u1","2.19.1-1","2.19.11-0+deb13u1","2.19.2-1","2.19.3-1","2.19.3-2","2.19.4-0+deb13u1","2.19.4-1","2.20.1-1","2.20.3-1","2.21.0-1","2.21.1~rc1-1","2.21.1~rc1-2","2.21.2-1","2.22.0~beta1-1","2.22.0~beta2-1"]},{"source":"osv","ecosystem":"Debian:14","package":"ansible-core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.19.0-1","2.19.0~beta6-1","2.19.0~rc2-1","2.19.1-1","2.19.2-1","2.19.3-1","2.19.3-2","2.19.4-1","2.20.1-1","2.20.3-1","2.21.0-1","2.21.1~rc1-1","2.21.1~rc1-2","2.21.2-1","2.22.0~beta1-1","2.22.0~beta2-1"]},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Server 16.0","package":"ansible-core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.18.3-160000.5.1"}]}]},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Server for SAP applications 16.0","package":"ansible-core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.18.3-160000.5.1"}]}]},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Module for Package Hub 15 SP7","package":"ansible-core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.18.3-150400.9.20.1"}]}]},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Module for Systems Management 15 SP7","package":"ansible-core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.18.3-150400.9.20.1"}]}]},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Server 15 SP4-LTSS","package":"ansible-core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.18.3-150400.9.20.1"}]}]},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Server 15 SP5-LTSS","package":"ansible-core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.18.3-150400.9.20.1"}]}]},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Server 15 SP6-LTSS","package":"ansible-core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.18.3-150400.9.20.1"}]}]},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Server for SAP Applications 15 SP4","package":"ansible-core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.18.3-150400.9.20.1"}]}]},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Server for SAP Applications 15 SP5","package":"ansible-core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.18.3-150400.9.20.1"}]}]},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Server for SAP Applications 15 SP6","package":"ansible-core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.18.3-150400.9.20.1"}]}]},{"source":"osv","ecosystem":"Ubuntu:Pro:14.04:LTS","package":"ansible","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.1+dfsg-1","1.3.4+dfsg-1","1.4.0+dfsg-1","1.4.1+dfsg-1","1.4.3+dfsg-1","1.4.4+dfsg-1","1.5.4+dfsg-1","1.5.4+dfsg-1ubuntu0.1~esm1","1.5.4+dfsg-1ubuntu0.1~esm2","1.5.4+dfsg-1ubuntu0.1~esm3"]},{"source":"osv","ecosystem":"Ubuntu:Pro:16.04:LTS","package":"ansible","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.9.2+dfsg-2","1.9.4-1","2.0.0.2-2","2.0.0.2-2ubuntu1","2.0.0.2-2ubuntu1.1","2.0.0.2-2ubuntu1.2","2.0.0.2-2ubuntu1.3","2.0.0.2-2ubuntu1.3+esm1","2.0.0.2-2ubuntu1.3+esm2","2.0.0.2-2ubuntu1.3+esm3","2.0.0.2-2ubuntu1.3+esm4","2.0.0.2-2ubuntu1.3+esm5","2.0.0.2-2ubuntu1.3+esm6"]},{"source":"osv","ecosystem":"Ubuntu:Pro:18.04:LTS","package":"ansible","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.3.1.0+dfsg-2","2.5.0+dfsg-1","2.5.1+dfsg-1","2.5.1+dfsg-1ubuntu0.1","2.5.1+dfsg-1ubuntu0.1+esm1","2.5.1+dfsg-1ubuntu0.1+esm2","2.5.1+dfsg-1ubuntu0.1+esm3","2.5.1+dfsg-1ubuntu0.1+esm4","2.5.1+dfsg-1ubuntu0.1+esm5"]},{"source":"osv","ecosystem":"Ubuntu:Pro:20.04:LTS","package":"ansible","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.8.3+dfsg-1","2.8.6+dfsg-1","2.9.2+dfsg-1","2.9.4+dfsg-1","2.9.6+dfsg-1","2.9.6+dfsg-1ubuntu0.1~esm1","2.9.6+dfsg-1ubuntu0.1~esm2","2.9.6+dfsg-1ubuntu0.1~esm3"]},{"source":"osv","ecosystem":"Ubuntu:22.04:LTS","package":"ansible-core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.12.0-1","2.12.0-1ubuntu0.1"]},{"source":"osv","ecosystem":"Ubuntu:Pro:22.04:LTS","package":"ansible","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.10.7+merged+base+2.10.8+dfsg-1","2.10.7+merged+base+2.10.8+dfsg-1ubuntu0.1~esm1","2.10.7+merged+base+2.10.8+dfsg-1ubuntu0.1~esm4"]},{"source":"osv","ecosystem":"Ubuntu:24.04:LTS","package":"ansible","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["7.7.0+dfsg-1","7.7.0+dfsg-3","9.2.0+dfsg-0ubuntu4","9.2.0+dfsg-0ubuntu5"]},{"source":"osv","ecosystem":"Ubuntu:24.04:LTS","package":"ansible-core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.14.9-2","2.14.11-1","2.14.11-2","2.14.13-1","2.16.3-0ubuntu1","2.16.3-0ubuntu2"]},{"source":"osv","ecosystem":"Ubuntu:26.10","package":"ansible","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["13.1.0+dfsg-1ubuntu1","13.4.0+dfsg-1"]},{"source":"osv","ecosystem":"Ubuntu:26.10","package":"ansible-core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.20.1-1","2.21.1~rc1-1","2.21.1~rc1-2","2.21.1~rc1-2ubuntu1","2.22.0~beta2-1"]},{"source":"osv","ecosystem":"Ubuntu:26.04:LTS","package":"ansible","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["12.0.0~b1+dfsg-1","12.0.0+dfsg-1","12.2.0+dfsg-1","13.1.0+dfsg-1","13.1.0+dfsg-1ubuntu1"]},{"source":"osv","ecosystem":"Ubuntu:26.04:LTS","package":"ansible-core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.19.0-1ubuntu1","2.19.4-1","2.20.1-1"]},{"source":"osv","ecosystem":"openSUSE:Tumbleweed","package":"ansible-core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.21.5-2.1"}]}]},{"source":"osv","ecosystem":"openSUSE:Tumbleweed","package":"ansible-core-2.18","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.18.19-3.1"}]}]},{"source":"osv","ecosystem":"openSUSE:Tumbleweed","package":"ansible-core-2.19","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.19.14-2.1"}]}]},{"source":"osv","ecosystem":"openSUSE:Tumbleweed","package":"ansible-core-2.20","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.20.10-2.1"}]}]},{"source":"osv","ecosystem":"openSUSE:Tumbleweed","package":"ansible-core-2.21","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.21.6-1.1"}]}],"bundled":11},{"source":"osv","ecosystem":"openSUSE:Leap 16.0","package":"ansible-core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.18.3-160000.5.1"}]}]}],"products":[{"vendor":"red hat","product":"migration toolkit for applications 8"},{"vendor":"red hat","product":"migration toolkit for virtualization"},{"vendor":"red hat","product":"openshift service mesh 3"},{"vendor":"red hat","product":"red hat advanced cluster management for kubernetes 2"},{"vendor":"red hat","product":"red hat ansible automation platform 2"},{"vendor":"red hat","product":"red hat ansible automation platform ansible core 2"},{"vendor":"red hat","product":"red hat certification program for red hat enterprise linux 9"},{"vendor":"red hat","product":"red hat discovery 2"},{"vendor":"red hat","product":"red hat enterprise linux 10"},{"vendor":"red hat","product":"red hat enterprise linux 8"},{"vendor":"red hat","product":"red hat enterprise linux 9"},{"vendor":"red hat","product":"red hat openshift container platform 4"},{"vendor":"red hat","product":"red hat openshift container platform 5"},{"vendor":"red hat","product":"red hat openstack platform 17.1"},{"vendor":"red hat","product":"red hat openstack platform 18.0"},{"vendor":"red hat","product":"red hat satellite 6"},{"vendor":"red hat","product":"red hat update infrastructure 5"},{"vendor":"red hat","product":"self-service automation portal 2"}],"references":[{"url":"https://access.redhat.com/security/cve/CVE-2026-89091","tags":["vdb-entry","x_refsource_REDHAT","report"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2531646","tags":["issue-tracking","x_refsource_REDHAT","report"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-89091","tags":["web"]},{"url":"https://github.com/advisories/GHSA-4jhw-j7jr-j479"},{"url":"https://security-tracker.debian.org/tracker/CVE-2026-89091","tags":["advisory"]},{"url":"https://www.suse.com/support/update/announcement/2026/suse-su-202624464-1/","tags":["advisory"]},{"url":"https://bugzilla.suse.com/1284847","tags":["report"]},{"url":"https://www.suse.com/security/cve/CVE-2026-89091","tags":["web"]},{"url":"https://www.suse.com/support/update/announcement/2026/suse-su-20265185-1/","tags":["advisory"]},{"url":"https://ubuntu.com/security/CVE-2026-89091","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-89091","tags":["report"]},{"url":"","tags":["advisory"]},{"url":"https://www.suse.com/security/cve/CVE-2023-5115","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2023-5764","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2024-0690","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2024-11079","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2024-8775","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2024-9902","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2026-105929","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2026-11332","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2026-16493","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2026-84503","tags":["web"]}],"sources":{"cve":[{"id":"CVE-2026-89091","title":"Ansible-core: ansible-core: ansible-galaxy collection install symlink path escape allows arbitrary file write / code execution","description":"A flaw was found in ansible-core. When installing a collection with\n`ansible-galaxy collection install`, the archive extractor validates member\npaths using lexical path normalisation (os.path.abspath) instead of resolving\nsymbolic links (os.path.realpath), and it performs no containment check on\nsymlink-typed directory members before creating them. A crafted collection\ntarball can chain symlink directory entries so that a subsequent file member is\nwritten outside the intended destination directory. This allows an attacker who\ncan get a victim to install a malicious collection to overwrite arbitrary files\nwith the privileges of the user running ansible-galaxy, leading to code\nexecution on the control node. This is a bypass of the fix for CVE-2020-10691.","status":"published","published":"2026-10-08T21:49:30.953Z","modified":"2026-11-02T22:12:53.879Z","cvss":[{"version":"3.1","score":8.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H","level":"high","assessor":"cna"}],"cwes":["CWE-59"],"updated_at":"2026-11-03T00:01:31.659497Z"}],"euvd":[{"id":"EUVD-2026-95346","description":"A flaw was found in ansible-core. When installing a collection with\n`ansible-galaxy collection install`, the archive extractor validates member\npaths using lexical path normalisation (os.path.abspath) instead of resolving\nsymbolic links (os.path.realpath), and it performs no containment check on\nsymlink-typed directory members before creating them. A crafted collection\ntarball can chain symlink directory entries so that a subsequent file member is\nwritten outside the intended destination directory. This allows an attacker who\ncan get a victim to install a malicious collection to overwrite arbitrary files\nwith the privileges of the user running ansible-galaxy, leading to code\nexecution on the control node. This is a bypass of the fix for CVE-2020-10691.","status":"published","published":"2026-10-08T21:49:30Z","modified":"2026-11-02T22:12:53Z","cvss":[{"version":"3.1","score":8.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H","level":"high"}],"updated_at":"2026-11-03T05:08:36.239358Z"}],"ghsa":[{"id":"GHSA-4jhw-j7jr-j479","title":"A flaw was found in ansible-core. When installing a collection with\n`ansible-galaxy collection...","description":"A flaw was found in ansible-core. When installing a collection with\n`ansible-galaxy collection install`, the archive extractor validates member\npaths using lexical path normalisation (os.path.abspath) instead of resolving\nsymbolic links (os.path.realpath), and it performs no containment check on\nsymlink-typed directory members before creating them. A crafted collection\ntarball can chain symlink directory entries so that a subsequent file member is\nwritten outside the intended destination directory. This allows an attacker who\ncan get a victim to install a malicious collection to overwrite arbitrary files\nwith the privileges of the user running ansible-galaxy, leading to code\nexecution on the control node. This is a bypass of the fix for CVE-2020-10691.","status":"published","published":"2026-10-09T00:31:47Z","modified":"2026-10-09T00:31:56Z","cvss":[{"version":"3.1","score":8.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H","level":"high"}],"cwes":["CWE-59"],"updated_at":"2026-11-02T15:12:59.31428Z"}],"nvd":[{"id":"CVE-2026-89091","description":"A flaw was found in ansible-core. When installing a collection with\n`ansible-galaxy collection install`, the archive extractor validates member\npaths using lexical path normalisation (os.path.abspath) instead of resolving\nsymbolic links (os.path.realpath), and it performs no containment check on\nsymlink-typed directory members before creating them. A crafted collection\ntarball can chain symlink directory entries so that a subsequent file member is\nwritten outside the intended destination directory. This allows an attacker who\ncan get a victim to install a malicious collection to overwrite arbitrary files\nwith the privileges of the user running ansible-galaxy, leading to code\nexecution on the control node. This is a bypass of the fix for CVE-2020-10691.","status":"published","published":"2026-10-08T22:17:35.777Z","modified":"2026-11-05T00:17:35.717Z","cvss":[{"version":"3.1","score":8.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H","level":"high","assessor":"secondary"}],"cwes":["CWE-59"],"updated_at":"2026-11-05T01:45:11.587441Z"}],"osv":[{"id":"DEBIAN-CVE-2026-89091","description":"A flaw was found in ansible-core. When installing a collection with `ansible-galaxy collection install`, the archive extractor validates member paths using lexical path normalisation (os.path.abspath) instead of resolving symbolic links (os.path.realpath), and it performs no containment check on symlink-typed directory members before creating them. A crafted collection tarball can chain symlink directory entries so that a subsequent file member is written outside the intended destination directory. This allows an attacker who can get a victim to install a malicious collection to overwrite arbitrary files with the privileges of the user running ansible-galaxy, leading to code execution on the control node. This is a bypass of the fix for CVE-2020-10691.","status":"published","published":"2026-10-08T22:17:35.777Z","modified":"2026-11-05T09:47:38.08656741Z","cvss":[{"version":"3.1","score":8.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H","level":"high"}],"updated_at":"2026-11-05T13:31:24.64316Z"},{"id":"UBUNTU-CVE-2026-89091","description":"A flaw was found in ansible-core. When installing a collection with `ansible-galaxy collection install`, the archive extractor validates member paths using lexical path normalisation (os.path.abspath) instead of resolving symbolic links (os.path.realpath), and it performs no containment check on symlink-typed directory members before creating them. A crafted collection tarball can chain symlink directory entries so that a subsequent file member is written outside the intended destination directory. This allows an attacker who can get a victim to install a malicious collection to overwrite arbitrary files with the privileges of the user running ansible-galaxy, leading to code execution on the control node. This is a bypass of the fix for CVE-2020-10691.","status":"published","published":"2026-10-08T22:17:00Z","modified":"2026-10-17T13:01:16.500142339Z","cvss":[{"version":"3.1","score":8.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H","level":"high"}],"updated_at":"2026-11-02T16:57:24.828975Z"},{"id":"AZL-107132","title":"CVE-2026-89091 affecting package ansible 2.17.11-1","description":"A flaw was found in ansible-core. When installing a collection with\n`ansible-galaxy collection install`, the archive extractor validates member\npaths using lexical path normalisation (os.path.abspath) instead of resolving\nsymbolic links (os.path.realpath), and it performs no containment check on\nsymlink-typed directory members before creating them. A crafted collection\ntarball can chain symlink directory entries so that a subsequent file member is\nwritten outside the intended destination directory. This allows an attacker who\ncan get a victim to install a malicious collection to overwrite arbitrary files\nwith the privileges of the user running ansible-galaxy, leading to code\nexecution on the control node. This is a bypass of the fix for CVE-2020-10691.","status":"published","published":"2026-10-08T22:17:35Z","modified":"2026-11-05T05:40:51Z","updated_at":"2026-11-05T16:41:17.969374Z"},{"id":"openSUSE-SU-2026:12172-1","title":"ansible-core-2.21.5-2.1 on GA media","description":"These are all security issues fixed in the ansible-core-2.21.5-2.1 package on the GA media of openSUSE Tumbleweed.","status":"published","published":"2026-10-18T00:00:00Z","modified":"2026-10-19T09:30:04.17799603Z","updated_at":"2026-11-02T16:58:40.245664Z"},{"id":"openSUSE-SU-2026:12173-1","title":"ansible-core-2.18-2.18.19-3.1 on GA media","description":"These are all security issues fixed in the ansible-core-2.18-2.18.19-3.1 package on the GA media of openSUSE Tumbleweed.","status":"published","published":"2026-10-18T00:00:00Z","modified":"2026-10-19T09:30:04.164644397Z","updated_at":"2026-11-02T16:58:40.245664Z"},{"id":"openSUSE-SU-2026:12174-1","title":"ansible-core-2.19-2.19.14-2.1 on GA media","description":"These are all security issues fixed in the ansible-core-2.19-2.19.14-2.1 package on the GA media of openSUSE Tumbleweed.","status":"published","published":"2026-10-18T00:00:00Z","modified":"2026-10-19T09:30:04.184796215Z","updated_at":"2026-11-02T16:58:40.245664Z"},{"id":"openSUSE-SU-2026:12175-1","title":"ansible-core-2.20-2.20.10-2.1 on GA media","description":"These are all security issues fixed in the ansible-core-2.20-2.20.10-2.1 package on the GA media of openSUSE Tumbleweed.","status":"published","published":"2026-10-18T00:00:00Z","modified":"2026-10-19T09:30:05.14940011Z","updated_at":"2026-11-02T16:58:40.245664Z"},{"id":"openSUSE-SU-2026:12451-1","title":"ansible-core-2.21-2.21.6-1.1 on GA media","description":"These are all security issues fixed in the ansible-core-2.21-2.21.6-1.1 package on the GA media of openSUSE Tumbleweed.","status":"published","published":"2026-11-06T00:00:00Z","modified":"2026-11-07T17:23:14.884276446Z","updated_at":"2026-11-07T17:50:39.727056Z"},{"id":"openSUSE-SU-2026:22172-1","title":"Security update for ansible-core","description":"This update for ansible-core fixes the following issues:\n\n- CVE-2026-89091: an attacker can get a victim to install a malicious collection to overwrite arbitrary files with the\n  privileges of the user running ansible-galaxy, leading to code execution on the control node (bsc#1284847).\n","status":"published","published":"2026-10-26T20:36:19Z","modified":"2026-11-01T17:23:28.522522446Z","updated_at":"2026-11-02T16:58:42.426393Z"},{"id":"SUSE-SU-2026:24464-1","title":"Security update for ansible-core","description":"This update for ansible-core fixes the following issues:\n\n- CVE-2026-89091: an attacker can get a victim to install a malicious collection to overwrite arbitrary files with the\n  privileges of the user running ansible-galaxy, leading to code execution on the control node (bsc#1284847).\n","status":"published","published":"2026-10-26T20:39:38Z","modified":"2026-11-04T17:23:17.645354612Z","updated_at":"2026-11-04T17:43:22.558805Z"},{"id":"SUSE-SU-2026:5185-1","title":"Security update for ansible-core","description":"This update for ansible-core fixes the following issues:\n\n- CVE-2026-89091: an attacker can get a victim to install a malicious collection to overwrite arbitrary files with the\n  privileges of the user running ansible-galaxy, leading to code execution on the control node (bsc#1284847).\n","status":"published","published":"2026-11-10T17:46:06Z","modified":"2026-11-11T13:00:04.392373153Z","updated_at":"2026-11-11T13:08:46.301371Z"}]}}
