CVE-2026-40261
WysokieCVSS 8.8Prawdopodobieństwo exploitacji (EPSS)
Podwyższone ryzykoPercentyl 74 - wyżej niż 74% wszystkich znanych CVE
Streszczenie
Composer w wersjach 1.0 do 2.2.26 i 2.3 do 2.9.5 zawiera podatność na wstrzykiwanie poleceń w metodach Perforce::syncCodeBase() i Perforce::generateP4Command(). Atakujący może wstrzyknąć dowolne polecenia poprzez spreparowane wartości źródłowe (source reference lub source url) zawierające metaznaki powłoki, nawet jeśli Perforce nie jest zainstalowane.
Ocena ryzyka
Ryzyko polega na możliwości zdalnego wykonania kodu przez atakującego podczas instalacji lub aktualizacji zależności ze źródła, co może prowadzić do przejęcia kontroli nad systemem. Podatność jest szczególnie niebezpieczna, ponieważ może być wykorzystana przez złośliwe repozytorium Composer.
Rekomendacja
Zaleca się natychmiastową aktualizację Composera do wersji 2.2.27 (LTS) lub 2.9.6 (mainline). Jeśli aktualizacja nie jest możliwa, należy unikać instalowania zależności ze źródła, używając opcji --prefer-dist lub ustawienia preferred-install: dist, oraz korzystać wyłącznie z zaufanych repozytoriów.
Inne podatności w Composer
Zobacz wszystkie- CVE-2026-45793Wysokie
Podatność w Composerze, menedżerze zależności dla PHP, pozwala na ujawnienie tokenów OAuth GitHub w logach błędów. Walidacja tokenów za pomocą wyrażenia regularnego odrzuca tokeny GITHUB_TOKEN zawierające znak '-', a ich wartość jest interpolowana do komunikatu wyjątku, co prowadzi do wycieku do stderr lub logów CI.
- CVE-2026-59948Wysokie
Podatność w menedżerze zależności Composer dla języka PHP pozwala atakującemu na zapis plików poza katalogiem vendor i projektem podczas instalacji lub aktualizacji pakietów. Problem występuje, gdy pakiet z niezaufanego repozytorium (innego niż Packagist.org lub Private Packagist) zawiera nieprawidłową nazwę, która nie jest poprawnie walidowana przed zapisem wyników rozwiązywania zależności.
- CVE-2026-59947Średnie
Composer, menedżer zależności dla PHP, w wersjach przed 2.2.29 i 2.10.2 wyciekał dane uwierzytelniające (np. tokeny GitHub) do wyjścia debugowania przy użyciu flagi -vvv. Problem wynikał z braku sanitizacji poświadczeń w nazwie użytkownika w URL-u repozytorium lub pakietu.
- CVE-2026-59946Średnie
Podatność w menedżerze zależności Composer dla języka PHP pozwala na zmianę uprawnień istniejącego pliku na odczytywalny i wykonywalny dla wszystkich użytkowników. Problem występuje podczas instalacji, aktualizacji lub dodawania pakietów, gdy wpis bin w pakiecie zawiera segmenty ścieżki '..'.
- CVE-2026-40176Wysokie
Podatność na wstrzykiwanie poleceń w metodzie Perforce::generateP4Command() w Composerze, menedżerze zależności dla PHP. Atakujący może wstrzyknąć dowolne polecenia poprzez parametry połączenia Perforce (port, użytkownik, klient) w złośliwym pliku composer.json, co prowadzi do wykonania poleceń w kontekście użytkownika uruchamiającego Composera.
Oryginalny opis (angielski, źródło NVD)
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.

