{"id":"CVE-2026-40261","aliases":["ALPINE-CVE-2026-40261","BIT-composer-2026-40261","CLSA-2026-1787064466","DEBIAN-CVE-2026-40261","EUVD-2026-23119","GHSA-gqw4-4w2p-838q","RHSA-2026:8165","SUSE-SU-2026:1784-1","SUSE-SU-2026:1970-1","SUSE-SU-2026:21542-1","SUSE-SU-2026:23116-1","SUSE-SU-2026:23138-1","SUSE-SU-2026:3105-1","UBUNTU-CVE-2026-40261","openSUSE-SU-2026:10643-1","openSUSE-SU-2026:20670-1","openSUSE-SU-2026:21520-1"],"status":"published","title":"Composer has Command Injection via Malicious Perforce Reference","description":"Composer is a dependency manager for PHP. Versions 1.0 through 2.2.26 and 2.3 through 2.9.5 contain a command injection vulnerability in the Perforce::syncCodeBase() method, which appends the $sourceReference parameter to a shell command without proper escaping, and additionally in the Perforce::generateP4Command() method as in GHSA-wg36-wvj6-r67p / CVE-2026-40176, which interpolates user-supplied Perforce connection parameters (port, user, client) from the source url field without proper escaping. An attacker can inject arbitrary commands through crafted source reference or source url values containing shell metacharacters, even if Perforce is not installed. Unlike CVE-2026-40176, the source reference and url are provided as part of package metadata, meaning any compromised or malicious Composer repository can serve package metadata declaring perforce as a source type with malicious values. This vulnerability is exploitable when installing or updating dependencies from source, including the default behavior when installing dev-prefixed versions. This issue has been fixed in Composer 2.2.27 (2.2 LTS) and 2.9.6 (mainline). If developers are unable to immediately update, they can avoid installing dependencies from source by using --prefer-dist or the preferred-install: dist config setting, and only use trusted Composer repositories as a workaround.","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.01688,"percentile":0.77338,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":true,"fix_available":true},"cwes":["CWE-20","CWE-78"],"published":"2026-04-14T20:01:42Z","modified":"2026-11-03T06:32:55Z","exploits":[{"source":"pocgithub","id":"terminat0r7031/composer-CVE-2026-40261-CVE-2026-40176-PoC","title":"terminat0r7031/composer-CVE-2026-40261-CVE-2026-40176-PoC","date":"2026-04-16","url":"https://github.com/terminat0r7031/composer-CVE-2026-40261-CVE-2026-40176-PoC"}],"fixes":[{"ecosystem":"Packagist","package":"composer/composer","fixed_in":["2.9.6","2.2.27"],"sources":["ghsa","osv"]},{"ecosystem":"Alpine:v3.23","package":"composer","fixed_in":["2.9.6-r0"],"sources":["osv"]},{"ecosystem":"Alpine:v3.24","package":"composer","fixed_in":["2.9.6-r0"],"sources":["osv"]},{"ecosystem":"Bitnami","package":"composer","fixed_in":["2.2.27","2.9.6"],"sources":["osv"]},{"ecosystem":"Debian:12","package":"composer","fixed_in":["2.5.5-1+deb12u4"],"sources":["osv"]},{"ecosystem":"Debian:13","package":"composer","fixed_in":["2.8.8-1+deb13u2"],"sources":["osv"]},{"ecosystem":"Debian:14","package":"composer","fixed_in":["2.9.7-1"],"sources":["osv"]}],"affected":[{"source":"ghsa","ecosystem":"Packagist","package":"composer/composer","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.3.0"},{"fixed":"2.9.6"}]}]},{"source":"ghsa","ecosystem":"Packagist","package":"composer/composer","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.0.0"},{"fixed":"2.2.27"}]}]},{"source":"osv","ecosystem":"Alpine:v3.23","package":"composer","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.0.0"},{"fixed":"2.9.6-r0"}]}]},{"source":"osv","ecosystem":"Alpine:v3.24","package":"composer","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.0.0"},{"fixed":"2.9.6-r0"}]}]},{"source":"osv","ecosystem":"Bitnami","package":"composer","ranges":[{"type":"SEMVER","events":[{"introduced":"1.0.0"},{"fixed":"2.2.27"},{"introduced":"2.3.0"},{"fixed":"2.9.6"}]}]},{"source":"osv","ecosystem":"TuxCare:Debian:10","package":"composer","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.8.4-1+deb10u4+tuxcare.els1"}]}],"bundled":2},{"source":"osv","ecosystem":"Debian:12","package":"composer","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.5.5-1+deb12u4"}]}],"versions":["2.5.5-1","2.5.5-1+deb12u1","2.5.5-1+deb12u2","2.5.5-1+deb12u3"]},{"source":"osv","ecosystem":"Debian:13","package":"composer","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.8.8-1+deb13u2"}]}],"versions":["2.8.8-1","2.8.8-1+deb13u1"]},{"source":"osv","ecosystem":"Debian:14","package":"composer","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.9.7-1"}]}],"versions":["2.8.10-1","2.8.11-1","2.8.11-2","2.8.12-1","2.8.8-1","2.8.9-1","2.9.0~rc1-1","2.9.1-1","2.9.2-1","2.9.3-1","2.9.4-1","2.9.5-1"]},{"source":"osv","ecosystem":"Packagist","package":"composer/composer","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.3.0"},{"fixed":"2.9.6"}]}],"versions":["2.3.0","2.3.1","2.3.10","2.3.2","2.3.3","2.3.4","2.3.5","2.3.6","2.3.7","2.3.8","2.3.9","2.4.0","2.4.0-RC1","2.4.1","2.4.2","2.4.3","2.4.4","2.5.0","2.5.1","2.5.2","2.5.3","2.5.4","2.5.5","2.5.6","2.5.7","2.5.8","2.6.0","2.6.1","2.6.2","2.6.3","2.6.4","2.6.5","2.6.6","2.7.0","2.7.1","2.7.2","2.7.3","2.7.4","2.7.5","2.7.6","2.7.7","2.7.8","2.7.9","2.8.0","2.8.1","2.8.10","2.8.11","2.8.12","2.8.2","2.8.3","2.8.4","2.8.5","2.8.6","2.8.7","2.8.8","2.8.9","2.9.0","2.9.0-RC1","2.9.1","2.9.2","2.9.3","2.9.4","2.9.5"]},{"source":"osv","ecosystem":"Packagist","package":"composer/composer","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.0.0"},{"fixed":"2.2.27"}]}],"versions":["1.0.0","1.0.1","1.0.2","1.0.3","1.1.0","1.1.0-RC","1.1.1","1.1.2","1.1.3","1.10.0","1.10.0-RC","1.10.1","1.10.10","1.10.11","1.10.12","1.10.13","1.10.14","1.10.15","1.10.16","1.10.17","1.10.18","1.10.19","1.10.2","1.10.20","1.10.21","1.10.22","1.10.23","1.10.24","1.10.25","1.10.26","1.10.27","1.10.28","1.10.3","1.10.4","1.10.5","1.10.6","1.10.7","1.10.8","1.10.9","1.2.0","1.2.0-RC","1.2.1","1.2.2","1.2.3","1.2.4","1.3.0","1.3.0-RC","1.3.1","1.3.2","1.3.3","1.4.0","1.4.1","1.4.2","1.4.3","1.5.0","1.5.1","1.5.2","1.5.3","1.5.4","1.5.5","1.5.6","1.6.0","1.6.0-RC","1.6.1","1.6.2","1.6.3","1.6.4","1.6.5","1.7.0","1.7.0-RC","1.7.1","1.7.2","1.7.3","1.8.0","1.8.1","1.8.2","1.8.3","1.8.4","1.8.5","1.8.6","1.9.0","1.9.1","1.9.2","1.9.3","2.0.0","2.0.0-RC1","2.0.0-RC2","2.0.0-alpha1","2.0.0-alpha2","2.0.0-alpha3","2.0.1","2.0.10","2.0.11","2.0.12","2.0.13","2.0.14","2.0.2","2.0.3","2.0.4","2.0.5","2.0.6","2.0.7","2.0.8","2.0.9","2.1.0","2.1.0-RC1","2.1.1","2.1.10","2.1.11","2.1.12","2.1.14","2.1.2","2.1.3","2.1.4","2.1.5","2.1.6","2.1.7","2.1.8","2.1.9","2.2.0","2.2.0-RC1","2.2.1","2.2.10","2.2.11","2.2.12","2.2.13","2.2.14","2.2.15","2.2.16","2.2.17","2.2.18","2.2.19","2.2.2","2.2.20","2.2.21","2.2.22","2.2.23","2.2.24","2.2.25","2.2.26","2.2.3","2.2.4","2.2.5","2.2.6","2.2.7","2.2.8","2.2.9"]},{"source":"osv","ecosystem":"Red Hat:hummingbird:1","package":"composer","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0:2.9.7-1.hum1"}]}],"bundled":3},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Server 16.0","package":"php-composer2","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.8.9-160000.4.1"}]}],"bundled":7},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Server for SAP applications 16.0","package":"php-composer2","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.8.9-160000.4.1"}]}],"bundled":7},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Server 16.0","package":"php-composer2","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.8.9-160000.4.1"}]}],"bundled":7},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Server for SAP applications 16.0","package":"php-composer2","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.8.9-160000.4.1"}]}],"bundled":7},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Module for Web and Scripting 15 SP7","package":"php-composer2","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.6.4-150600.3.12.1"}]}],"bundled":9},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Server 15 SP6-LTSS","package":"php-composer2","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.6.4-150600.3.12.1"}]}],"bundled":9},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Server for SAP Applications 15 SP6","package":"php-composer2","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.6.4-150600.3.12.1"}]}],"bundled":9},{"source":"osv","ecosystem":"Ubuntu:Pro:16.04:LTS","package":"composer","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.0.0~alpha10+20150602-1","1.0.0~alpha10+20150602-2","1.0.0~alpha11-1","1.0.0~alpha11-1ubuntu1","1.0.0~alpha11-2","1.0.0~alpha11-3","1.0.0~beta1-1ubuntu1","1.0.0~beta2-1","1.0.0~beta2-1ubuntu0.1~esm1","1.0.0~beta2-1ubuntu0.1~esm2"]},{"source":"osv","ecosystem":"Ubuntu:Pro:18.04:LTS","package":"composer","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.5.1-1","1.5.2-1","1.6.2-1","1.6.3-1","1.6.3-1ubuntu0.1~esm1","1.6.3-1ubuntu0.1~esm2"]},{"source":"osv","ecosystem":"Ubuntu:Pro:20.04:LTS","package":"composer","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.9.0-2","1.9.1-1","1.9.2-1","1.9.3-1","1.10.0-1","1.10.1-1","1.10.1-1ubuntu0.1~esm1","1.10.1-1ubuntu0.1~esm2"]},{"source":"osv","ecosystem":"Ubuntu:Pro:22.04:LTS","package":"composer","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.0.9-2ubuntu2","2.0.9-2ubuntu3","2.0.13-1ubuntu1","2.1.12-1ubuntu1","2.2.6-2ubuntu4","2.2.6-2ubuntu4+esm1"]},{"source":"osv","ecosystem":"Ubuntu:Pro:24.04:LTS","package":"composer","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.5.8-1","2.6.5-1","2.6.6-1","2.7.1-2","2.7.1-2ubuntu0.1~esm1"]},{"source":"osv","ecosystem":"Ubuntu:25.10","package":"composer","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.8.6-1","2.8.8-1"]},{"source":"osv","ecosystem":"Ubuntu:26.10","package":"composer","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.9.5-1","2.10.1-2","2.10.2-1"]},{"source":"osv","ecosystem":"Ubuntu:26.04:LTS","package":"composer","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.8.8-1","2.9.5-1"]},{"source":"osv","ecosystem":"openSUSE:Tumbleweed","package":"php-composer2","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.9.7-1.1"}]}],"bundled":2},{"source":"osv","ecosystem":"openSUSE:Leap 16.0","package":"php-composer2","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.8.9-160000.4.1"}]}],"bundled":7}],"products":[{"vendor":"composer","product":"composer"},{"vendor":"getcomposer","product":"composer"},{"vendor":"red hat","product":"red hat hardened images"}],"references":[{"url":"https://github.com/composer/composer/security/advisories/GHSA-gqw4-4w2p-838q","tags":["x_refsource_CONFIRM","Vendor Advisory","advisory","web","article","report"]},{"url":"https://github.com/composer/composer/releases/tag/2.9.6","tags":["x_refsource_MISC","Release Notes","article","web"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-40261","tags":["vdb-entry","x_refsource_REDHAT","web","advisory","report"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2458841","tags":["issue-tracking","x_refsource_REDHAT","web","report"]},{"url":"https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-40261.json","tags":["x_sadp-csaf-vex","web"]},{"url":"https://access.redhat.com/errata/RHSA-2026:8165","tags":["vendor-advisory","x_refsource_REDHAT","web","advisory"]},{"url":"https://github.com/FriendsOfPHP/security-advisories/blob/master/composer/composer/CVE-2026-40261.yaml","tags":["web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-40261","tags":["web","advisory"]},{"url":"https://github.com/advisories/GHSA-gqw4-4w2p-838q"},{"url":"https://security.alpinelinux.org/vuln/CVE-2026-40261","tags":["advisory"]},{"url":"https://errata.tuxcare.com/els_os/debian10els/CLSA-2026-1787064466.html","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-40176","tags":["advisory"]},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/40xxx/CVE-2026-40261.json","tags":["advisory"]},{"url":"https://security-tracker.debian.org/tracker/CVE-2026-40261","tags":["advisory"]},{"url":"https://github.com/composer/composer","tags":["package"]},{"url":"https://images.redhat.com/","tags":["article"]},{"url":"https://access.redhat.com/security/updates/classification/","tags":["article"]},{"url":"https://access.redhat.com/security/cve/CVE-2026-40176","tags":["report"]},{"url":"https://access.redhat.com/security/cve/CVE-2025-67746","tags":["report"]},{"url":"https://security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_8165.json","tags":["advisory"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2426283","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2025-67746","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2025-67746","tags":["advisory"]},{"url":"https://github.com/composer/composer/commit/1d40a95c9d39a6b7f80d404ab30336c586da9917","tags":["article"]},{"url":"https://github.com/composer/composer/commit/5db1876a76fdef76d3c4f8a27995c434c7a43e71","tags":["article"]},{"url":"https://github.com/composer/composer/releases/tag/2.2.26","tags":["article"]},{"url":"https://github.com/composer/composer/releases/tag/2.9.3","tags":["article"]},{"url":"https://github.com/composer/composer/security/advisories/GHSA-59pp-r3rg-353g","tags":["article"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2458828","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-40176","tags":["advisory"]},{"url":"https://github.com/composer/composer/security/advisories/GHSA-wg36-wvj6-r67p","tags":["article"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-40261","tags":["advisory","report"]},{"url":"https://www.suse.com/support/update/announcement/2026/suse-su-20261784-1/","tags":["advisory"]},{"url":"https://bugzilla.suse.com/1262254","tags":["report"]},{"url":"https://bugzilla.suse.com/1262255","tags":["report"]},{"url":"https://www.suse.com/security/cve/CVE-2026-40176","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2026-40261","tags":["web"]},{"url":"https://www.suse.com/support/update/announcement/2026/suse-su-20261970-1/","tags":["advisory"]},{"url":"https://www.suse.com/security/cve/CVE-2022-24828","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2023-43655","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2024-24821","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2024-35241","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2024-35242","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2025-67746","tags":["web"]},{"url":"https://www.suse.com/support/update/announcement/2026/suse-su-202621542-1/","tags":["advisory"]},{"url":"https://bugzilla.suse.com/1255768","tags":["report"]},{"url":"https://www.suse.com/support/update/announcement/2026/suse-su-202623116-1/","tags":["advisory"]},{"url":"https://bugzilla.suse.com/1271122","tags":["report"]},{"url":"https://bugzilla.suse.com/1271129","tags":["report"]},{"url":"https://bugzilla.suse.com/1271151","tags":["report"]},{"url":"https://bugzilla.suse.com/1271504","tags":["report"]},{"url":"https://bugzilla.suse.com/1271729","tags":["report"]},{"url":"https://www.suse.com/security/cve/CVE-2026-45793","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2026-59946","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2026-59947","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2026-59948","tags":["web"]},{"url":"https://www.suse.com/support/update/announcement/2026/suse-su-202623138-1/","tags":["advisory"]},{"url":"https://www.suse.com/support/update/announcement/2026/suse-su-20263105-1/","tags":["advisory"]},{"url":"https://ubuntu.com/security/CVE-2026-40261","tags":["report"]},{"url":"","tags":["advisory"]}],"sources":{"cve":[{"id":"CVE-2026-40261","title":"Composer has Command Injection via Malicious Perforce Reference","description":"Composer is a dependency manager for PHP. Versions 1.0 through 2.2.26 and 2.3 through 2.9.5 contain a command injection vulnerability in the Perforce::syncCodeBase() method, which appends the $sourceReference parameter to a shell command without proper escaping, and additionally in the Perforce::generateP4Command() method as in GHSA-wg36-wvj6-r67p / CVE-2026-40176, which interpolates user-supplied Perforce connection parameters (port, user, client) from the source url field without proper escaping. An attacker can inject arbitrary commands through crafted source reference or source url values containing shell metacharacters, even if Perforce is not installed. Unlike CVE-2026-40176, the source reference and url are provided as part of package metadata, meaning any compromised or malicious Composer repository can serve package metadata declaring perforce as a source type with malicious values. This vulnerability is exploitable when installing or updating dependencies from source, including the default behavior when installing dev-prefixed versions. This issue has been fixed in Composer 2.2.27 (2.2 LTS) and 2.9.6 (mainline). If developers are unable to immediately update, they can avoid installing dependencies from source by using --prefer-dist or the preferred-install: dist config setting, and only use trusted Composer repositories as a workaround.","status":"published","published":"2026-04-15T20:56:32.182Z","modified":"2026-07-15T01:01:10.106Z","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"},{"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":"adp"}],"cwes":["CWE-78","CWE-20","CWE-78"],"updated_at":"2026-11-02T13:43:11.445168Z"}],"euvd":[{"id":"EUVD-2026-23119","description":"Composer is a dependency manager for PHP. Versions 1.0 through 2.2.26 and 2.3 through 2.9.5 contain a command injection vulnerability in the Perforce::syncCodeBase() method, which appends the $sourceReference parameter to a shell command without proper escaping, and additionally in the Perforce::generateP4Command() method as in GHSA-wg36-wvj6-r67p / CVE-2026-40176, which interpolates user-supplied Perforce connection parameters (port, user, client) from the source url field without proper escaping. An attacker can inject arbitrary commands through crafted source reference or source url values containing shell metacharacters, even if Perforce is not installed. Unlike CVE-2026-40176, the source reference and url are provided as part of package metadata, meaning any compromised or malicious Composer repository can serve package metadata declaring perforce as a source type with malicious values. This vulnerability is exploitable when installing or updating dependencies from source, including the default behavior when installing dev-prefixed versions. This issue has been fixed in Composer 2.2.27 (2.2 LTS) and 2.9.6 (mainline). If developers are unable to immediately update, they can avoid installing dependencies from source by using --prefer-dist or the preferred-install: dist config setting, and only use trusted Composer repositories as a workaround.","status":"published","published":"2026-04-15T20:56:32Z","modified":"2026-07-15T01:01:10Z","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-02T18:19:56.47701Z"}],"ghsa":[{"id":"GHSA-gqw4-4w2p-838q","title":"Composer has a command injection via malicious perforce reference","description":"### Impact\nThe `Perforce::syncCodeBase()` method appended the `$sourceReference` parameter to a shell command without proper escaping, allowing an attacker to inject arbitrary commands through a crafted source reference containing shell metacharacters. Further as in GHSA-wg36-wvj6-r67p / CVE-2026-40176 the `Perforce::generateP4Command()` method constructed shell commands by interpolating user-supplied Perforce connection parameters (port, user, client) without proper escaping from the source url field. Composer would execute these injected commands even if Perforce is not installed.\n\nThe source reference and url are provided as part of package metadata. Any Composer package repository can serve package metadata declaring perforce as a source type with a malicious source reference or source url. This means the vulnerability can be exploited through any package served by a compromised or malicious Composer repository. An attack does not require Perforce to be installed on the client, as Composer will attempt to execute the constructed command regardless.\n\nThis vulnerability is exploitable when installing or updating dependencies from source (`--prefer-source`, default when installing dev prefixed versions), even if you do not use Perforce.\n\n### Patches\nFixed in Composer 2.2.27 (2.2 LTS) and 2.9.6 (mainline)\n\nNote, the fix for the source url in the `Perforce::generateP4Command()` was addressed as part of the patches for GHSA-wg36-wvj6-r67p / CVE-2026-40176 in the same versions.\n\n### Workarounds\n\n- Avoid installing dependencies from source by using `--prefer-dist` or the `preferred-install: dist` config setting.\n- Only use trusted Composer repositories.","status":"published","published":"2026-04-14T20:01:42Z","modified":"2026-07-20T19:12:37Z","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-20","CWE-78"],"updated_at":"2026-11-02T14:40:46.257074Z"}],"nvd":[{"id":"CVE-2026-40261","description":"Composer is a dependency manager for PHP. Versions 1.0 through 2.2.26 and 2.3 through 2.9.5 contain a command injection vulnerability in the Perforce::syncCodeBase() method, which appends the $sourceReference parameter to a shell command without proper escaping, and additionally in the Perforce::generateP4Command() method as in GHSA-wg36-wvj6-r67p / CVE-2026-40176, which interpolates user-supplied Perforce connection parameters (port, user, client) from the source url field without proper escaping. An attacker can inject arbitrary commands through crafted source reference or source url values containing shell metacharacters, even if Perforce is not installed. Unlike CVE-2026-40176, the source reference and url are provided as part of package metadata, meaning any compromised or malicious Composer repository can serve package metadata declaring perforce as a source type with malicious values. This vulnerability is exploitable when installing or updating dependencies from source, including the default behavior when installing dev-prefixed versions. This issue has been fixed in Composer 2.2.27 (2.2 LTS) and 2.9.6 (mainline). If developers are unable to immediately update, they can avoid installing dependencies from source by using --prefer-dist or the preferred-install: dist config setting, and only use trusted Composer repositories as a workaround.","status":"published","published":"2026-04-15T21:17:27.693Z","modified":"2026-07-15T02:21:05.167Z","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"},{"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-20","CWE-78"],"updated_at":"2026-11-02T14:12:14.748836Z"}],"osv":[{"id":"ALPINE-CVE-2026-40261","description":"Composer is a dependency manager for PHP. Versions 1.0 through 2.2.26 and 2.3 through 2.9.5 contain a command injection vulnerability in the Perforce::syncCodeBase() method, which appends the $sourceReference parameter to a shell command without proper escaping, and additionally in the Perforce::generateP4Command() method as in GHSA-wg36-wvj6-r67p / CVE-2026-40176, which interpolates user-supplied Perforce connection parameters (port, user, client) from the source url field without proper escaping. An attacker can inject arbitrary commands through crafted source reference or source url values containing shell metacharacters, even if Perforce is not installed. Unlike CVE-2026-40176, the source reference and url are provided as part of package metadata, meaning any compromised or malicious Composer repository can serve package metadata declaring perforce as a source type with malicious values. This vulnerability is exploitable when installing or updating dependencies from source, including the default behavior when installing dev-prefixed versions. This issue has been fixed in Composer 2.2.27 (2.2 LTS) and 2.9.6 (mainline). If developers are unable to immediately update, they can avoid installing dependencies from source by using --prefer-dist or the preferred-install: dist config setting, and only use trusted Composer repositories as a workaround.","status":"published","published":"2026-04-15T21:17:27.693Z","modified":"2026-11-03T06:32:55.447262221Z","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-03T07:16:26.770911Z"},{"id":"CVE-2026-40261","title":"Composer has Command Injection via Malicious Perforce Reference","description":"Composer is a dependency manager for PHP. Versions 1.0 through 2.2.26 and 2.3 through 2.9.5 contain a command injection vulnerability in the Perforce::syncCodeBase() method, which appends the $sourceReference parameter to a shell command without proper escaping, and additionally in the Perforce::generateP4Command() method as in GHSA-wg36-wvj6-r67p / CVE-2026-40176, which interpolates user-supplied Perforce connection parameters (port, user, client) from the source url field without proper escaping. An attacker can inject arbitrary commands through crafted source reference or source url values containing shell metacharacters, even if Perforce is not installed. Unlike CVE-2026-40176, the source reference and url are provided as part of package metadata, meaning any compromised or malicious Composer repository can serve package metadata declaring perforce as a source type with malicious values. This vulnerability is exploitable when installing or updating dependencies from source, including the default behavior when installing dev-prefixed versions. This issue has been fixed in Composer 2.2.27 (2.2 LTS) and 2.9.6 (mainline). If developers are unable to immediately update, they can avoid installing dependencies from source by using --prefer-dist or the preferred-install: dist config setting, and only use trusted Composer repositories as a workaround.","status":"published","published":"2026-04-15T20:56:32.182Z","modified":"2026-10-28T02:31:12.704705666Z","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-20","CWE-78"],"updated_at":"2026-11-02T15:45:03.424067Z"},{"id":"DEBIAN-CVE-2026-40261","description":"Composer is a dependency manager for PHP. Versions 1.0 through 2.2.26 and 2.3 through 2.9.5 contain a command injection vulnerability in the Perforce::syncCodeBase() method, which appends the $sourceReference parameter to a shell command without proper escaping, and additionally in the Perforce::generateP4Command() method as in GHSA-wg36-wvj6-r67p / CVE-2026-40176, which interpolates user-supplied Perforce connection parameters (port, user, client) from the source url field without proper escaping. An attacker can inject arbitrary commands through crafted source reference or source url values containing shell metacharacters, even if Perforce is not installed. Unlike CVE-2026-40176, the source reference and url are provided as part of package metadata, meaning any compromised or malicious Composer repository can serve package metadata declaring perforce as a source type with malicious values. This vulnerability is exploitable when installing or updating dependencies from source, including the default behavior when installing dev-prefixed versions. This issue has been fixed in Composer 2.2.27 (2.2 LTS) and 2.9.6 (mainline). If developers are unable to immediately update, they can avoid installing dependencies from source by using --prefer-dist or the preferred-install: dist config setting, and only use trusted Composer repositories as a workaround.","status":"published","published":"2026-04-15T21:17:27.693Z","modified":"2026-10-01T03:03:11.457908272Z","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-02T15:45:54.892385Z"},{"id":"GHSA-gqw4-4w2p-838q","title":"Composer has a command injection via malicious perforce reference","description":"### Impact\nThe `Perforce::syncCodeBase()` method appended the `$sourceReference` parameter to a shell command without proper escaping, allowing an attacker to inject arbitrary commands through a crafted source reference containing shell metacharacters. Further as in GHSA-wg36-wvj6-r67p / CVE-2026-40176 the `Perforce::generateP4Command()` method constructed shell commands by interpolating user-supplied Perforce connection parameters (port, user, client) without proper escaping from the source url field. Composer would execute these injected commands even if Perforce is not installed.\n\nThe source reference and url are provided as part of package metadata. Any Composer package repository can serve package metadata declaring perforce as a source type with a malicious source reference or source url. This means the vulnerability can be exploited through any package served by a compromised or malicious Composer repository. An attack does not require Perforce to be installed on the client, as Composer will attempt to execute the constructed command regardless.\n\nThis vulnerability is exploitable when installing or updating dependencies from source (`--prefer-source`, default when installing dev prefixed versions), even if you do not use Perforce.\n\n### Patches\nFixed in Composer 2.2.27 (2.2 LTS) and 2.9.6 (mainline)\n\nNote, the fix for the source url in the `Perforce::generateP4Command()` was addressed as part of the patches for GHSA-wg36-wvj6-r67p / CVE-2026-40176 in the same versions.\n\n### Workarounds\n\n- Avoid installing dependencies from source by using `--prefer-dist` or the `preferred-install: dist` config setting.\n- Only use trusted Composer repositories.","status":"published","published":"2026-04-14T20:01:42Z","modified":"2026-09-10T03:51:01.816745047Z","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-20","CWE-78"],"updated_at":"2026-11-02T15:46:48.191583Z"},{"id":"RHSA-2026:8165","title":"Red Hat Security Advisory: Red Hat Hardened Images RPMs bug fix and enhancement update","status":"published","published":"2026-04-20T10:11:43Z","modified":"2026-10-06T10:19:28Z","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-02T15:53:23.547034Z"},{"id":"UBUNTU-CVE-2026-40261","description":"Composer is a dependency manager for PHP. Versions 1.0 through 2.2.26 and 2.3 through 2.9.5 contain a command injection vulnerability in the Perforce::syncCodeBase() method, which appends the $sourceReference parameter to a shell command without proper escaping, and additionally in the Perforce::generateP4Command() method as in GHSA-wg36-wvj6-r67p / CVE-2026-40176, which interpolates user-supplied Perforce connection parameters (port, user, client) from the source url field without proper escaping. An attacker can inject arbitrary commands through crafted source reference or source url values containing shell metacharacters, even if Perforce is not installed. Unlike CVE-2026-40176, the source reference and url are provided as part of package metadata, meaning any compromised or malicious Composer repository can serve package metadata declaring perforce as a source type with malicious values. This vulnerability is exploitable when installing or updating dependencies from source, including the default behavior when installing dev-prefixed versions. This issue has been fixed in Composer 2.2.27 (2.2 LTS) and 2.9.6 (mainline). If developers are unable to immediately update, they can avoid installing dependencies from source by using --prefer-dist or the preferred-install: dist config setting, and only use trusted Composer repositories as a workaround.","status":"published","published":"2026-04-15T21:17:00Z","modified":"2026-10-17T12:58:54.135384317Z","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"},{"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:56:16.686388Z"},{"id":"BIT-composer-2026-40261","title":"Composer has Command Injection via Malicious Perforce Reference","description":"Composer is a dependency manager for PHP. Versions 1.0 through 2.2.26 and 2.3 through 2.9.5 contain a command injection vulnerability in the Perforce::syncCodeBase() method, which appends the $sourceReference parameter to a shell command without proper escaping, and additionally in the Perforce::generateP4Command() method as in GHSA-wg36-wvj6-r67p / CVE-2026-40176, which interpolates user-supplied Perforce connection parameters (port, user, client) from the source url field without proper escaping. An attacker can inject arbitrary commands through crafted source reference or source url values containing shell metacharacters, even if Perforce is not installed. Unlike CVE-2026-40176, the source reference and url are provided as part of package metadata, meaning any compromised or malicious Composer repository can serve package metadata declaring perforce as a source type with malicious values. This vulnerability is exploitable when installing or updating dependencies from source, including the default behavior when installing dev-prefixed versions. This issue has been fixed in Composer 2.2.27 (2.2 LTS) and 2.9.6 (mainline). If developers are unable to immediately update, they can avoid installing dependencies from source by using --prefer-dist or the preferred-install: dist config setting, and only use trusted Composer repositories as a workaround.","status":"published","published":"2026-04-18T08:36:18.29Z","modified":"2026-09-08T08:45:58.208237662Z","updated_at":"2026-11-02T15:28:28.70813Z"},{"id":"CLSA-2026-1787064466","title":"Fix CVE(s): CVE-2026-40176, CVE-2026-40261","description":"   * Non-maintainer upload by the TuxCare ELS team.\n   * CVE-2026-40261: Prevent a command injection vulnerability in\n     Perforce::syncCodeBase(), which appended the source reference to the\n     'p4 sync -f' command without escaping. Package metadata served by a\n     malicious or compromised Composer repository could inject shell\n     metacharacters, leading to command execution even when Perforce is not\n     installed.\n     - debian/patches/0018-CVE-2026-40261.patch\n   * CVE-2026-40176: Prevent a command injection vulnerability in\n     Perforce::generateP4Command(), which interpolated the Perforce\n     connection parameters (user, client, port) into the 'p4' command line\n     without escaping. A malicious composer.json declaring a Perforce VCS\n     repository could inject shell metacharacters, leading to command\n     execution even when Perforce is not installed. Also backport the\n     prerequisite upstream fix for Perforce::connectClient(), which passed\n     the client spec path through the shell redirection of the same command\n     line with only spaces escaped.\n     - debian/patches/0019-CVE-2026-40176.patch","status":"published","published":"2026-08-18T14:47:57Z","modified":"2026-10-26T09:31:52.613459333Z","updated_at":"2026-11-02T15:43:47.20725Z"},{"id":"openSUSE-SU-2026:10643-1","title":"php-composer2-2.9.7-1.1 on GA media","description":"These are all security issues fixed in the php-composer2-2.9.7-1.1 package on the GA media of openSUSE Tumbleweed.","status":"published","published":"2026-04-28T00:00:00Z","modified":"2026-04-29T08:02:26.027486Z","updated_at":"2026-11-02T16:58:38.415593Z"},{"id":"openSUSE-SU-2026:20670-1","title":"Security update for php-composer2","description":"This update for php-composer2 fixes the following issues:\n\n- CVE-2025-67746: ANSI control characters injection in terminal output of various Composer commands via attacker\n  controlled remote sources (bsc#1255768).\n- CVE-2026-40176: arbitrary command injection via malicious Perforce repository definition (bsc#1262254).\n- CVE-2026-40261: arbitrary command injection via malicious Perforce source reference/url (bsc#1262255).\n","status":"published","published":"2026-05-04T10:46:30Z","modified":"2026-05-07T18:24:42.646576Z","updated_at":"2026-11-02T16:58:41.463445Z"},{"id":"openSUSE-SU-2026:21520-1","title":"Security update for php-composer2","description":"This update for php-composer2 fixes the following issues:\n\n- CVE-2026-45793: Github Actions issued `GITHUB_TOKEN` disclosure in GitHub Actions logs (bsc#1271504).\n- CVE-2026-59946: path traversal in package `bin` field lets dependencies `chmod` arbitrary host files (bsc#1271151).\n- CVE-2026-59947: URL-embedded HTTP-Basic username leaks to verbose logs  (bsc#1271129).\n- CVE-2026-59948: arbitrary file write outside `vendor`directory via malicious transitive package name (bsc#1271122).\n\nChanges for php-composer2:\n\n- fix byte-swapped signature on s390x can cause broken or unsupported signature (bsc#1271729).\n","status":"published","published":"2026-08-03T21:09:33Z","modified":"2026-08-04T18:30:06.533473107Z","updated_at":"2026-11-02T16:58:41.885092Z"},{"id":"SUSE-SU-2026:1784-1","title":"Security update for php-composer2","description":"This update for php-composer2 fixes the following issues:\n\n- CVE-2026-40176: arbitrary command injection via malicious Perforce repository definition (bsc#1262254).\n- CVE-2026-40261: arbitrary command injection via malicious Perforce source reference/url (bsc#1262255).\n","status":"published","published":"2026-05-08T17:05:56Z","modified":"2026-05-12T18:24:13.78961Z","updated_at":"2026-11-02T15:54:01.610851Z"},{"id":"SUSE-SU-2026:1970-1","title":"Security update for php-composer2","description":"This update for php-composer2 fixes the following issues\n\n- CVE-2026-40176: command injection via malicious Perforce repository definition (bsc#1262254).\n- CVE-2026-40261: command injection via malicious Perforce source reference/url (bsc#1262255).\n\nChanges for php-composer2:\n\n- version update to 2.2.27 (align with upstream LTS version)\n * Security: Hardened git/hg/perforce/fossil identifier validation to ensure branch names starting with - do\n not cause issues (246f807b, 246f807b, 246f807b)\n * Security: Fixed Perforce unescaped user input in queryP4User shell command (246f807b)\n * Security: Fixed usage of insecure 3DES ciphers when ext-curl is missing (21ffece62)\n * Fixed issue handling paths with = in them on Windows (#11568)\n- version 2.2.26 2025-12-30\n * Security: Fixed ANSI sequence injection (GHSA-59pp-r3rg-353g / CVE-2025-67746)\n- version 2.2.25 2024-12-11\n * Fixed deprecation notices appearing on this LTS version in case it is used on modern PHP. Modern PHP support\n is not guaranteed nor tested for though and the main purpose of LTS releases is legacy PHP versions support. (#12217)\n * Fixed issue on plugin upgrade when it defines multiple classes (#12226)\n * Fixed duplicate errors appearing in the output depending on php settings (#12214)\n * Fixed InstalledVersions returning duplicate data in some instances (#12225)\n- version 2.2.24 2024-06-10\n * Security: Fixed command injection via malicious git branch name (GHSA-47f6-5gq3-vx9c / CVE-2024-35241)\n * Security: Fixed multiple command injections via malicious git/hg branch names (GHSA-v9qv-c7wm-wgmf / CVE-2024-35242)\n * Security: Fixed secure-http checks that could be bypassed by using malformed URL formats (fa3b9582c)\n * Security: Fixed Filesystem::isLocalPath including windows-specific checks on linux (3c37a67c)\n * Security: Fixed perforce argument escaping (3773f775)\n * Security: Fixed handling of zip bombs when extracting archives (de5f7e32)\n * Security: Fixed Windows command parameter escaping to prevent abuse of unicode characters with best fit encoding\n * conversion (3130a7455, 04a63b324)\n- version 2.2.23 2024-02-08\n * Security: Fixed code execution and possible privilege escalation via compromised vendor\n dir contents (GHSA-7c6p-848j-wh5h / CVE-2024-24821)\n- version 2.2.22 2023-09-29\n * Security: Fixed possible remote code execution vulnerability if composer.phar is publicly accessible, executable as PHP,\n and register_argc_argv is enabled in php.ini (GHSA-jm6m-4632-36hf / CVE-2023-43655)\n * Fixed authentication issue when downloading several files from private Bitbucket in parallel (#11464)\n * Fixed handling of broken junctions on windows (#11550)\n * Fixed loading of root aliases on path repo packages when doing partial updates (#11632)\n * Fixed parsing of lib-curl-openssl version with OSX SecureTransport (#11534)\n * Fixed binary proxies not being transparent when included by another PHP process and returning a value (#11454)\n * Fixed support for plugin classes being marked as readonly (#11404)\n * Fixed GitHub rate limit reporting (#11366)\n * Fixed issue displaying solver problems with branch names containing % signs (#11359)\n- version 2.2.21 2023-02-15\n * Fixed extra.plugin-optional support in PluginInstaller when doing pre-install checks (#11326)\n- version 2.2.20 2023-02-10\n * Added extra.plugin-optional support for allow auto-disabling unknown plugins which are not critical when\n running non-interactive (#11315)\n- version 2.2.19 2023-02-04\n * Fixed URL sanitizer to handle new GitHub personal access tokens format (#11137)\n * Fixed cache keys to allow _ to avoid conflicts between package names like a-b and a_b (#11229)\n * Fixed handling of --ignore-platform-req with upper-bound ignores to not apply to conflict rules (#11037)\n * Fixed handling of COMPOSER_DISCARD_CHANGES when set to 0\n- version 2.2.18 2022-08-20\n * Fixed COMPOSER_NO_DEV so it also works with require and remove's --update-no-dev (#10995)\n * Fixed duplicate missing extension warnings being displayed (#10938)\n * Fixed hg version detection (#10955)\n * Fixed git cache invalidation issue when a git tag gets created after the cache has loaded a given reference (#11004)\n- version 2.2.17 2022-07-13\n * Fixed plugins from CWD/vendor being loaded in some cases like create-project or validate even though the target\n directory is outside of CWD (#10935)\n * Fixed support for legacy (Composer 1.x, e.g. hirak/prestissimo) plugins which will not warn/error anymore if\n not in allow-plugins, as they are anyway not loaded (#10928)\n * Fixed pre-install check for allowed plugins not taking --no-plugins into account (#10925)\n * Fixed support for disable_functions containing disk_free_space (#10936)\n * Fixed RootPackageRepository usages to always clone the root package to avoid interoperability issues with plugins (#10940)\n- version 2.2.16 2022-07-05\n * Fixed non-interactive behavior of allow-plugins to throw instead of continue with a warning to avoid broken installs (#10920)\n * Fixed allow-plugins BC mode to ensure old lock files created pre-2.2 can be installed with only a warning but\n plugins fully loaded (#10920)\n * Fixed deprecation notice (#10921)\n- version 2.2.15 2022-07-01\n * Fixed support for cache-read-only where the filesystem is not writable (#10906)\n * Fixed type error when using allow-plugins: true (#10909)\n * Fixed @putenv scripts receiving arguments passed to the command (#10846)\n * Fixed support for spaces in paths with binary proxies on Windows (#10836)\n * Fixed type error in GitDownloader if branches cannot be listed (#10888)\n * Fixed RootPackageInterface issue on PHP 5.3.3 (#10895)\n- version 2.2.14 2022-06-06\n * Fixed handling of broken symlinks when checking whether a package is still installed (#6708)\n * Fixed JSON schema regex pattern for name to be JS compatible (#10811)\n * Fixed bin proxies to allow a proxy to include another one safely (#10823)\n * Fixed gitlab-token JSON schema definition (#10800)\n * Fixed openssl 3.x version parsing as it is now semver compliant\n * Fixed type error when a json file cannot be read (#10818)\n * Fixed parsing of multi-line arrays in funding.yml (#10784)\n- version 2.2.13 2022-05-25\n * Fixed invalid credentials loop when setting up GitLab token (#10748)\n * Fixed PHP 8.2 deprecations (#10766)\n * Fixed lock file changes being output even when the lock file creation is disabled\n * Fixed race condition when multiple requests asking for auth on the same hostname fired concurrently (#10763)\n * Fixed quoting of commas on Windows (#10775)\n * Fixed issue installing path repos with a disabled symlink function (#10786)\n- version 2.2.12 2022-04-13\n * Security: Fixed command injection vulnerability in HgDriver/GitDriver (GHSA-x7cr-6qr6-2hh6 / CVE-2022-24828)\n * Fixed curl downloader not retrying when a DNS resolution failure occurs (#10716)\n * Fixed composer.lock file still being used/read when the lock config option is disabled (#10726)\n * Fixed validate command checking the lock file even if the lock option is disabled (#10723)\n- version 2.2.11 2022-04-01\n * Added missing config.bitbucket-oauth in composer-schema.json\n * Added --2.2 flag to self-update to pin the Composer version to the 2.2 LTS range (#10682)\n * Updated semver, jsonlint deps for minor fixes\n * Fixed generation of autoload crashing if a package has a broken path (#10688)\n * Removed dev-master=\u003edev-main alias from #10372 as it does not work when reloading from lock file and extracting dev deps (#10651)\n- version 2.2.10 2022-03-29\n * Fixed Bitbucket authorization detection due to API changes (#10657)\n * Fixed validate command warning about dist/source keys if defined (#10655)\n * Fixed deletion/handling of corrupted 0-bytes zip archives (#10666)\n- version 2.2.9 2022-03-15\n * Fixed regression with plugins that modify install path of packages, see docs if you are authoring such a plugin (#10621)\n- version 2.2.8 2022-03-15\n * Fixed files autoloading sort order to be fully deterministic (#10617)\n * Fixed pool optimization pass edge cases (#10579)\n * Fixed require command failing when self.version is used as constraint (#10593)\n * Fixed --no-ansi / undecorated output still showing color in repo warnings (#10601)\n * Performance improvement in pool optimization step (composer/semver#131)\n- version 2.2.7 2022-02-25\n * Allow installation together with composer/xdebug-handler ^3 (#10528)\n * Fixed support for packages with no licenses in licenses command output (#10537)\n * Fixed handling of allow-plugins: false which kept warning (#10530)\n * Fixed enum parsing in classmap generation when the enum keyword is not lowercased (#10521)\n * Fixed author parsing in init command requiring an email whereas the schema allows a name only (#10538)\n * Fixed issues in require command when requiring packages which do not exist (but are provided by something else you require) (#10541)\n * Performance improvement in pool optimization step (#10546)\n- version 2.2.6 2022-02-04\n * BC Break: due to an oversight, the COMPOSER_BIN_DIR env var for binaries added in Composer 2.2.2 had to be renamed\n to COMPOSER_RUNTIME_BIN_DIR (#10512)\n * Fixed enum parsing in classmap generation with syntax like enum foo:string without space after : (#10498)\n * Fixed package search not urlencoding the input (#10500)\n * Fixed reinstall command not firing pre-install-cmd/post-install-cmd events (#10514)\n * Fixed edge case in path repositories where a symlink: true option would be ignored on old Windows and old PHP combos (#10482)\n * Fixed test suite compatibility with latest symfony/console releases (#10499)\n * Fixed some error reporting edge cases (#10484, #10451, #10493)\n- version 2.2.5 2022-01-21\n * Disabled composer/package-versions-deprecated by default as it can function using Composer\\InstalledVersions at runtime (#10458)\n * Fixed artifact repositories crashing if a phar file was present in the directory (#10406)\n * Fixed binary proxy issue on PHP \u003c8 when fseek is used on the proxied binary path (#10468)\n * Fixed handling of non-string versions in package repositories metadata (#10470)\n- version 2.2.4 2022-01-08\n * Fixed handling of process timeout when running async processes during installation\n * Fixed GitLab API handling when projects have a repository disabled (#10440)\n * Fixed reading of environment variables (e.g. APPDATA) containing unicode characters to workaround a PHP bug on Windows (#10434)\n * Fixed partial update issues with path repos missing if a path repo is required by a path repo (#10431)\n * Fixed support for sourcing binaries via the new bin proxies (#10389)\n * Fixed messaging when GitHub tokens need SSO authorization (#10432)\n","status":"published","published":"2026-05-18T08:16:15Z","modified":"2026-05-19T08:45:06.22508543Z","updated_at":"2026-11-02T15:54:01.610851Z"},{"id":"SUSE-SU-2026:21542-1","title":"Security update for php-composer2","description":"This update for php-composer2 fixes the following issues:\n\n- CVE-2025-67746: ANSI control characters injection in terminal output of various Composer commands via attacker\n  controlled remote sources (bsc#1255768).\n- CVE-2026-40176: arbitrary command injection via malicious Perforce repository definition (bsc#1262254).\n- CVE-2026-40261: arbitrary command injection via malicious Perforce source reference/url (bsc#1262255).\n","status":"published","published":"2026-05-04T10:45:49Z","modified":"2026-05-12T18:26:51.26207Z","updated_at":"2026-11-02T15:54:02.312556Z"},{"id":"SUSE-SU-2026:23116-1","title":"Security update for php-composer2","description":"This update for php-composer2 fixes the following issues:\n\n- CVE-2026-45793: Github Actions issued `GITHUB_TOKEN` disclosure in GitHub Actions logs (bsc#1271504).\n- CVE-2026-59946: path traversal in package `bin` field lets dependencies `chmod` arbitrary host files (bsc#1271151).\n- CVE-2026-59947: URL-embedded HTTP-Basic username leaks to verbose logs  (bsc#1271129).\n- CVE-2026-59948: arbitrary file write outside `vendor`directory via malicious transitive package name (bsc#1271122).\n\nChanges for php-composer2:\n\n- fix byte-swapped signature on s390x can cause broken or unsupported signature (bsc#1271729).\n","status":"published","published":"2026-08-03T21:09:28Z","modified":"2026-08-14T18:23:44.579269455Z","updated_at":"2026-11-02T15:54:03.503431Z"},{"id":"SUSE-SU-2026:23138-1","title":"Security update for php-composer2","description":"This update for php-composer2 fixes the following issues:\n\n- CVE-2026-45793: Github Actions issued `GITHUB_TOKEN` disclosure in GitHub Actions logs (bsc#1271504).\n- CVE-2026-59946: path traversal in package `bin` field lets dependencies `chmod` arbitrary host files (bsc#1271151).\n- CVE-2026-59947: URL-embedded HTTP-Basic username leaks to verbose logs  (bsc#1271129).\n- CVE-2026-59948: arbitrary file write outside `vendor`directory via malicious transitive package name (bsc#1271122).\n\nChanges for php-composer2:\n\n- fix byte-swapped signature on s390x can cause broken or unsupported signature (bsc#1271729).\n","status":"published","published":"2026-08-03T21:09:28Z","modified":"2026-08-14T18:23:45.792589446Z","updated_at":"2026-11-02T15:54:03.503431Z"},{"id":"SUSE-SU-2026:3105-1","title":"Security update for php-composer2","description":"This update for php-composer2 fixes the following issues:\n\n- CVE-2026-45793: Github Actions issued `GITHUB_TOKEN` disclosure in GitHub Actions logs (bsc#1271504).\n- CVE-2026-59946: path traversal in package `bin` field lets dependencies `chmod` arbitrary host files (bsc#1271151).\n- CVE-2026-59947: URL-embedded HTTP-Basic username leaks to verbose logs  (bsc#1271129).\n- CVE-2026-59948: arbitrary file write outside `vendor`directory via malicious transitive package name (bsc#1271122).\n","status":"published","published":"2026-07-17T13:32:56Z","modified":"2026-07-18T08:45:10.042125924Z","updated_at":"2026-11-02T15:54:04.987808Z"}]}}
