Přeskočit na obsah
Tech-Blog Chatujme.cz Chatujme.cz
Programování

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.

· 0 zhlédnutí

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í.

Rozostřený zdrojový kód na monitoru
Zdrojový kód webové aplikace na monitoru. Foto: Markus Spiske, Wikimedia Commons (CC0)

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žňujezasažené verzeCVSSopraveno
GHSA-jhfp-4ppm-crmmspuštění příkazu při instalaci z upraveného composer.lock2.10.0 až 2.11.18,82.11.2
GHSA-w6hj-6587-3jh5zápis souboru mimo adresář balíčku ze závadného archivu zip1.0 až 2.2.31, 2.3.0 až 2.11.18,82.11.2, 2.2.32
GHSA-x82q-x274-r6pqodeslání přihlašovací hlavičky k repozitáři na cizí server2.11.0, 2.11.1, 2.2.316,52.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

Programování

PHP zranitelnosti Dodavatelský řetězec Composer CI/CD

← zpět na výpis