
Prova de conceito para CVE-2026-84361, demonstrando injeção de comandos no driver Perforce do Composer por meio de um P4PORT malicioso, com verificação baseada em Docker e orientações de mitigação.
Com o Docker Compose, você pode validar em um ambiente isolado que inclui o Composer 2.10.2 afetado e o cliente Perforce p4. O contêiner de execução tem rede desabilitada, sistema de arquivos somente leitura, todas as capabilities removidas, e apenas os tmpfs /tmp e /work são graváveis.
# Construir a imagem (o p4 é obtido da distribuição oficial e verificado por SHA-256)
docker compose build
# Validar diretamente o comportamento rsh: do p4 (padrão)
docker compose run --rm poc
# Validar por meio do Composer vulnerável
docker compose run --rm poc /usr/local/bin/run-composer-poc.sh
O último comando executa composer update --prefer-source em um workspace temporário dentro do contêiner. Como é usado um comando marcador que não é um servidor Perforce, o próprio Composer pode falhar, mas se o marcador for criado, ele exibirá e encerrará com sucesso.
[+] VULNERABLEEste é um PoC de validação local da CVE-2026-84361, presente no driver VCS Perforce do Composer. No Composer afetado, quando o source.type do pacote é perforce, o source.url controlado pelo atacante é passado como P4PORT para o cliente p4.
O p4 trata P4PORT rsh: / jsh: como um comando local, e não como um destino de conexão de rede. Portanto, instalar uma fonte a partir de metadados de pacote não confiáveis ou de um composer.lock executa comandos com os privilégios do usuário que executou o Composer ou da conta de CI.
O payload deste PoC apenas cria um arquivo marcador vazio em uma área temporária.
Descoberto por: saku0512 (GitHub)
Use apenas para fins educacionais e para validação de segurança em ambientes com autorização explícita. Não execute em sistemas de terceiros ou ambientes de CI sem permissão.
>= 1.0, < 2.2.30 e >= 2.3.0, < 2.10.3Para a exploração, é necessário que o p4 esteja no PATH, que o atacante possa controlar os metadados da fonte Perforce e que o pacote alvo seja instalado a partir da fonte. Como o Packagist.org não permite metadados de fonte Perforce, o uso exclusivo do Packagist não é afetado.
p4php -v
p4 -V
Por padrão, o p4 não é iniciado; apenas o P4PORT perigoso e o comando que seria executado são exibidos.
php poc.php
--execute passa o P4PORT rsh: para o p4. O payload apenas cria um marcador único em sys_get_temp_dir() e, por padrão, faz a limpeza ao final.
php poc.php --execute
Se [+] VULNERABLE for exibido, confirma-se que o comando local foi executado por meio do P4PORT. Para manter o marcador, adicione --keep-marker.
O composer.json incluído é um exemplo mínimo de um repositório de pacotes inline distribuído por um atacante. Execute o seguinte com um Composer não corrigido e o p4 em um ambiente isolado.
composer update --prefer-source
A versão corrigida rejeita o source.url como uma porta Perforce inválida antes de iniciar o p4.
Atualize o Composer para 2.2.30 ou 2.10.3 ou posterior. Use apenas repositórios e arquivos de bloqueio confiáveis e remova o p4 do PATH em ambientes que não usam Perforce.