Удар пришёл с той стороны, которую всегда считали абсолютно защищённой.

Разработчики Composer выпустили обновление, которое устраняет сразу две уязвимости, способные привести к выполнению произвольных команд на машине пользователя. Проблема примечательна тем, что риск затрагивал не только тех, кто работает с Perforce, но и обычные установки Composer, где Perforce вообще не использовался.
Composer — менеджер зависимостей для PHP, который помогает подключать сторонние библиотеки, обновлять пакеты и собирать проект с нужными версиями компонентов. Инструмент широко используют и в небольших веб-приложениях, и в крупных сервисах, поэтому любые проблемы в Composer быстро выходят за рамки одной экосистемы и затрагивают большое число разработчиков и компаний.
В версиях Composer 2.9.6 и 2.2.27 LTS исправлены ошибки с идентификаторами CVE-2026-40261 и CVE-2026-40176. О выпуске сообщил Нильс Адерманн. По данным разработчиков, признаков эксплуатации обеих уязвимостей до публикации уведомления не обнаружили.
Обе ошибки находились в драйвере Perforce VCS и были связаны с некорректной обработкой значений при сборке shell-команд. CVE-2026-40176 затрагивала метод generateP4Command(). Через подставные параметры подключения, такие как порт, пользователь или клиент, злоумышленник мог встроить собственные команды в вредоносный composer.json. Уязвимость срабатывала даже на системах без установленного Perforce. Об ошибке сообщил saku0512.
Вторая проблема, CVE-2026-40261, касалась метода syncCodeBase(). Вредоносный код можно было внедрить через специально подготовленную ссылку на исходники или source reference, содержащие служебные символы оболочки. В этом случае атака становилась возможной уже через метаданные пакета, которые раздаёт репозиторий Composer. Для эксплуатации достаточно было установить или обновить зависимость из недоверенного источника в режиме prefer-source, который по умолчанию применяется для dev-версий. Об уязвимости сообщил Koda Reef.
Разработчики уточнили, что первая ошибка не позволяла атаковать через composer.json зависимостей и требовала запуска команд в каталоге с недоверенным корневым composer.json или через конфигурационный файл Composer. Вторая уязвимость выглядела опаснее, поскольку могла сработать через вредоносный или взломанный репозиторий пакетов.
Проверка Packagist.org и Private Packagist не выявила пакетов с признаками попыток эксплуатации. При этом публикацию метаданных Perforce в Packagist.org отключили 10 апреля 2026 года. В Private Packagist драйвер Perforce также отключён с той же даты. Клиентам Private Packagist Self-Hosted пообещали отдельный релиз с инструкцией для проверки локальных метаданных.
Разработчики советуют как можно скорее обновить Composer. В качестве временной меры для защиты от CVE-2026-40261 можно отказаться от установки зависимостей из исходников и использовать только доверенные репозитории. Для снижения риска CVE-2026-40176 команда рекомендует внимательно проверять composer.json перед запуском команд Composer в чужих проектах.