Composer 2.11.2 zavírá díru, kterou šlo spustit příkaz z upraveného composer.lock
Správce balíčků Composer vydal 10. listopadu 2026 verze 2.11.2 a 2.2.32 se třemi novými bezpečnostními hlášeními. Nejvážnější z nich se týká automatických sestavení, která instalují závislosti z cizí úpravy souboru composer.lock, a přepínače --no-scripts ani --no-plugins proti ní nepomůžou.
Tým Composeru, správce závislostí pro PHP, vydal v úterý 10. listopadu 2026 dvě opravné verze: 2.11.2 pro hlavní řadu a 2.2.32 pro řadu s dlouhodobou podporou. Packagist zaznamenal 2.11.2 v 9:09 UTC. Spolu s vydáním zveřejnil projekt tři bezpečnostní hlášení a v poznámkách k vydání vypsal ještě čtyři další bezpečnostní opravy, které v jeho vlastní evidenci hlášení nemají.

Tři hlášení, dvě s hodnocením 8,8
Všechna tři hlášení nahlásil tentýž výzkumník a čísla CVE k nim nejsou přidělená ani dva dny po vydání. Známky CVSS a rozsahy verzí jsou převzaté z hlášení v repozitáři projektu:
| hlášení | co umožňuje | zasažené verze | CVSS | opraveno |
|---|---|---|---|---|
| GHSA-jhfp-4ppm-crmm | spuštění příkazu při instalaci z upraveného composer.lock | 2.10.0 až 2.11.1 | 8,8 | 2.11.2 |
| GHSA-w6hj-6587-3jh5 | zápis souboru mimo adresář balíčku ze závadného archivu zip | 1.0 až 2.2.31, 2.3.0 až 2.11.1 | 8,8 | 2.11.2, 2.2.32 |
| GHSA-x82q-x274-r6pq | odeslání přihlašovací hlavičky k repozitáři na cizí server | 2.11.0, 2.11.1, 2.2.31 | 6,5 | 2.11.2, 2.2.32 |
Žádné z hlášení nepíše o tom, že by chybu někdo zneužíval, a do katalogu zneužívaných zranitelností CISA se bez čísla CVE dostat nemohly.
Nejvíc ohrožená jsou automatická sestavení
Nejvážnější chyba se týká jen verzí od 2.10.0. Podle hlášení stačí, aby útočník mohl ovlivnit obsah souboru composer.lock nebo vendor/composer/installed.json; škodlivý balíček instalovat nemusí a Composer příkaz spustí dřív, než ověří kontrolní součty. Přepínače --no-scripts a --no-plugins, kterými se obvykle omezuje cizí kód při instalaci, proti tomu nepomáhají.
Jako nejpravděpodobnější cestu uvádí projekt průběžnou integraci, která si stáhne větev z pull requestu a pustí composer install, aniž by změnu v lock souboru kdokoli četl. Dalšími cestami jsou šablona projektu s přibaleným lock souborem, napadený robot na aktualizaci závislostí a sdílená mezipaměť sestavení. Řada 2.2 touhle chybou netrpí, protože dotčené nastavení nikdy neměla.
Druhá chyba s hodnocením 8,8 sahá až k verzi 1.0. Projde jen se závadným archivem, tedy u balíčku ze soukromého nebo cizího repozitáře či zrcadla, a jen na systému, kde je zároveň program unzip i rozšíření zip pro PHP. Archivy z Packagist.org podle hlášení potřebné položky běžně neobsahují, takže projekt, který bere balíčky jen odtud, za realistický cíl nepovažuje. Composer 1 ale opravu nedostane: podle seznamu verzí na getcomposer.org jeho podpora skončila 30. května 2026 a poslední verze zůstává 1.10.28.
Únik hlavičky přinesla říjnová oprava
Třetí chyba se týká projektů, které se k soukromému repozitáři přihlašují vlastní hlavičkou HTTP, třeba tokenem v hlavičce Authorization. Upravený lock soubor mohl přidat zrcadlo na cizím serveru a Composer pak token poslal i tam. Hlášení výslovně píše, že jde jen o únik tohoto údaje, bez spuštění kódu a bez změny souborů.
Zasažené jsou jen tři verze, které vyšly 29. a 30. října. Verze 2.11.0 a 2.2.31 přitom samy opravovaly jiné hlášení: Composer do té doby ukládal tytéž hlavičky do composer.lock, který se obvykle ukládá do gitu. Hlášení x82q uvádí, že ostatní verze hlavičky k repozitáři při načtení znovu nepřipojují, a proto nejsou zasažené.
Bez vlastních hlášení zůstaly opravy, které vypisují jen poznámky k vydání. Composer už neposílá hlavičky Authorization a Cookie dál, když ho server přesměruje na jiný původ. Z auth.json projektu a z proměnné COMPOSER_AUTH čte jen přihlašovací údaje a ostatní nastavení ignoruje s varováním; totéž platí pro klíč home v composer.json projektu. Čtvrtá oprava se týká seznamu zakázaných adres: Composer je podle poznámek odmítal teprve po odeslání požadavku a rozběhnuté stahování nezastavil. Verze 2.11.2 navíc přibalila novější knihovnu symfony/filesystem s vlastní bezpečnostní opravou.
Třináct hlášení za jediný rok
Repozitář Composeru vede od dubna 2021 celkem 21 bezpečnostních hlášení a 13 z nich vyšlo v roce 2026, z toho pět za posledních čtrnáct dní. Za léta 2021 až 2025 jich bylo dohromady osm. Proč jich letos přibylo, projekt nevysvětluje.
Co udělat
Podle všech tří hlášení je jedinou úplnou opravou aktualizace, u samostatně nainstalovaného Composeru příkazem composer self-update. Verzi ukáže composer --version. Kdo má Composer z balíčku distribuce nebo z obrazu kontejneru, musí počkat na jejich aktualizaci. Příkaz composer audit kontroluje závislosti projektu, ne samotný Composer, takže tuhle díru neodhalí.
Řada 2.2 je určená pro staré prostředí: běží už na PHP 5.3, kdežto 2.11 chce aspoň PHP 7.2.5. Podle getcomposer.org dostává 2.2 jen kritické bezpečnostní opravy a její podpora končí 31. prosince 2026. Do té doby hlášení radí nepouštět instalaci nad lock souborem z neprověřeného zdroje a změny v composer.lock z cizích pull requestů číst dřív, než je sestavení zpracuje. Jak se podobné chyby opravovaly u vývojového serveru JavaScriptu, popisuje článek o třech chybách Vite.
Zdroje
- Composer: Release 2.11.2 (GitHub)
- Composer: Release 2.2.32 (GitHub)
- Composer: GHSA-jhfp-4ppm-crmm
- Composer: GHSA-w6hj-6587-3jh5
- Composer: GHSA-x82q-x274-r6pq
- Composer: GHSA-fm2w-xgf2-f9fh
- getcomposer.org: seznam verzí a jejich podpory
- Packagist: metadata balíčku composer/composer
- Daily CyberSecurity: Composer 2.11.2 and 2.2.32 Fix Command Execution, File Write and Credential Leak Flaws
- The DropTimes: Composer 2.11.2 Fixes Command Execution and Credential Exposure Flaws