Вышла новая версия Composer 2.7
Вышла очередная минорная версия Composer 2.7.
Новая версия включает различные исправления и закрывает известную уязвимость.
Пожалуйста, обновитесь как можно скорее!!!
Новые возможности Composer 2.7
В Composer 2.7 есть две примечательные новые функции:
- Добавили новый
--minimal-changes (-m)
флаг вcomposer update
,require
иremove
. Эту опцию можно комбинировать--with-dependencies
или--with-all-dependencies
выполнять частичное обновление только перечисленных пакетов и их зависимостей, при этом выполняя изменения версий или дополнительные установки/удаления их зависимостей только тогда, когда это абсолютно необходимо для обновления перечисленных пакетов до их последних устанавливаемых версий, а не обновления. все они до последних возможных версий. - Добавили новую
--sort-by-age (-A)
опцию вcomposer outdated
иcomposer show
. Эта опция позволяет сортировать и отображать даты выпуска пакетов, причем первым возвращается самый устаревший пакет.
Причина исправленной уязвимости
В рамках установки зависимостей Composer создает файлы в каталоге vendor/composer/
. Сюда входит файл install.php
, который содержит определение массива PHP всех установленных пакетов и их версий, а также файл InstalledVersions.php
, который обеспечивает программный доступ к этой информации. Этот API известен как API среды выполнения Composer, который предназначен для того, чтобы код проекта мог проверять список установленных пакетов в проекте во время выполнения приложения. Это полезно, например, для систем плагинов для динамического перечисления установленных совместимых плагинов и получения некоторых метаданных об установленных пакетах, например пути их установки.
Поскольку плагинам и сценариям Composer также может потребоваться доступ к этой информации, Composer будет загружать и выполнять те же два файла из каталога поставщика во время выполнения, чтобы сделать их доступными для плагинов или кода пользовательского сценария. Плагины и скрипты можно отключить с помощью опций --no-plugins
--no-scripts
. Их рекомендуется отключить, если вы запускаете какие-либо команды Composer в проектах, которым не доверяете выполнение кода на вашем компьютере.
Когда вы запускаете команды композитора в проекте, не отключая плагины или сценарии, вы должны быть уверены, что можете доверять содержимому каталога поставщика. Если вы не можете этого сделать, вам нужно либо запустить его с помощью --no-plugins
--no-scripts
, либо удалить каталог поставщика, чтобы можно было восстановить его. Настоятельно не рекомендуется передавать каталоги поставщиков в системы контроля версий. Если вам необходимо более тщательно контролировать содержимое ваших зависимостей, вам следует вместо этого использовать частный репозиторий Composer.
Проблема 1: Неправильное отключение загрузки сгенерированных файлов
Одной из обнаруженных проблем было неправильное отключение загрузки файлов при отключении плагинов и скриптов. Таким образом, два файла по-прежнему загружались даже при запуске такой команды, как composer self-update
. Это проблематично, в частности, в системах, где пользователям был предоставлен доступ sudo
специально только для запуска composer self-update
. Это означает, что эти пользователи могут заставить Composer выполнить произвольный код от имени пользователя root
, написав в эти два файла, тем самым повысив свои привилегии. Теперь эта проблема решена.
Обычно вам следует избегать запуска Composer от имени пользователя root
. Если вам необходимо предоставить sudo
доступ к самостоятельному обновлению, обратите внимание на то, чтобы разрешить это только явно, composer self-update
без дополнительных аргументов, чтобы предотвратить переход на более ранние уязвимые версии непривилегированными пользователями.
Проблема 2: Загрузка произвольного кода из сгенерированных мест файлов.
Для дополнительной защиты от потенциальных атак теперь проверяется, что загруженные файлы содержат содержимое, созданное Composer, и не содержат другого произвольного кода.
Ссылка на источник: https://blog.packagist.com/composer-2-7-and-cve-2024-24821/