
Доказательство концепции для CVE-2026-84361, демонстрирующее внедрение команд в драйвер Perforce в Composer через вредоносный P4PORT, с проверкой на основе Docker и рекомендациями по смягчению последствий.
С помощью Docker Compose можно провести проверку в изолированной среде, включающей уязвимый Composer 2.10.2 и клиент Perforce p4. Контейнер запускается с отключённой сетью, в режиме только для чтения и без capabilities; запись разрешена только в tmpfs-каталоги /tmp и /work.
# Сборка образа (p4 загружается с официального дистрибутива и проверяется по SHA-256)
docker compose build
# Прямая проверка поведения p4 с rsh: (по умолчанию)
docker compose run --rm poc
# Проверка через уязвимый Composer
docker compose run --rm poc /usr/local/bin/run-composer-poc.sh
Последняя команда выполняет composer update --prefer-source во временном рабочем пространстве внутри контейнера. Поскольку используется маркерная команда, а не Perforce-сервер, сам Composer может завершиться с ошибкой, но если маркер создан, выводится и выполнение завершается успешно.
[+] VULNERABLEЭто PoC для локальной проверки CVE-2026-84361 в драйвере Perforce VCS в Composer. Уязвимый Composer при source.type пакета равном perforce передаёт контролируемый атакующим source.url в качестве P4PORT клиенту p4.
p4 обрабатывает P4PORT вида rsh: / jsh: не как сетевое подключение, а как локальную команду. Поэтому установка source из недоверенных метаданных пакета или composer.lock приводит к выполнению команды с правами пользователя, запустившего Composer, или учётной записи CI.
Полезная нагрузка этого PoC лишь создаёт пустой маркерный файл во временной области.
Автор: saku0512 (GitHub)
Используйте только в образовательных целях и для проверки безопасности в средах, где на это получено явное разрешение. Не запускайте в чужих системах или CI-средах без разрешения.
>= 1.0, < 2.2.30 и >= 2.3.0, < 2.10.3Для эксплуатации необходимо, чтобы p4 присутствовал в PATH, атакующий мог контролировать метаданные Perforce source, а целевой пакет устанавливался из source. Packagist.org не допускает метаданные Perforce source, поэтому использование только Packagist не подвержено уязвимости.
p4php -v
p4 -V
По умолчанию p4 не запускается; выводятся только опасный P4PORT и команда, которая будет выполнена.
php poc.php
--execute передаёт p4 P4PORT вида rsh:. Полезная нагрузка лишь создаёт уникальный маркер в sys_get_temp_dir() и по умолчанию выполняет очистку.
php poc.php --execute
Если выводится [+] VULNERABLE, это подтверждает выполнение локальной команды через P4PORT. Чтобы сохранить маркер, добавьте --keep-marker.
Прилагаемый composer.json — минимальный пример inline package repository, распространяемого атакующим. Выполните следующее в изолированной среде с неисправленным Composer и p4:
composer update --prefer-source
Исправленная версия отклоняет source.url как недопустимый Perforce-порт до запуска p4.
Обновите Composer до версии 2.2.30 или 2.10.3 и выше. Используйте только доверенные репозитории и lock-файлы, а в средах без Perforce исключите p4 из PATH.