Falhas no Composer permitem execução arbitrária de comandos em projetos PHP

Falhas no Composer permitem execução arbitrária de comandos em projetos PHP

Duas vulnerabilidades de alta severidade no driver Perforce VCS do Composer permitem injeção de comandos a partir de metadados controlados em repositórios e referências de origem manipuladas.

ComponenteComposer, gerenciador de pacotes para PHP, especificamente o driver Perforce VCS usado no tratamento de repositórios e metadados de origem.
VetorArquivo composer.json malicioso declarando repositório Perforce VCS ou referência de origem criada com metacaracteres de shell.
ImpactoExecução arbitrária de comandos no contexto do usuário que executa o Composer, mesmo quando o Perforce VCS não está instalado no sistema.
PrioridadeAtualizar instalações do Composer imediatamente e revisar arquivos composer.json antes de executar comandos em projetos não totalmente confiáveis.
IdentificadoresCVE-2026-40176 com CVSS 7.8 e CVE-2026-40261 com CVSS 8.8.
Exploração observadaA varredura em Packagist.org não encontrou evidência de publicação de pacotes com informações Perforce maliciosas explorando essas falhas.
Resumo técnico

Duas vulnerabilidades de alta severidade foram divulgadas no Composer, gerenciador de pacotes amplamente usado em projetos PHP. As falhas estão associadas ao driver Perforce VCS e foram descritas como problemas de injeção de comandos decorrentes de validação inadequada de entrada e escape insuficiente de valores processados durante a resolução de dependências e metadados de origem. O efeito técnico confirmado é a execução arbitrária de comandos no contexto do usuário que executa o Composer, o que torna o risco diretamente dependente do ambiente em que o gerenciador é executado, dos privilégios locais desse usuário e do grau de confiança atribuído ao projeto ou repositório processado.

A primeira falha, CVE-2026-40176, recebeu pontuação CVSS 7.8 e envolve configuração de repositório controlada por um invasor em um composer.json malicioso que declara um repositório Perforce VCS. A segunda, CVE-2026-40261, recebeu CVSS 8.8 e decorre de escape inadequado que permite injeção de comandos por meio de uma referência de origem preparada com metacaracteres de shell. Em ambos os casos, o comportamento relevante é que o Composer pode executar comandos injetados mesmo quando o Perforce VCS não está instalado, removendo uma suposição defensiva comum: a ausência do cliente Perforce no sistema não elimina, por si só, a superfície vulnerável dentro do fluxo do Composer.

Fluxo técnico

O fluxo de risco começa quando o Composer processa metadados de dependências ou configurações de repositório que incluem elementos relacionados ao Perforce VCS. No caso de CVE-2026-40176, o ponto de entrada é um composer.json malicioso sob controle do atacante, contendo uma configuração de repositório Perforce VCS com valores inválidos ou manipulados. A falha está na validação imprópria desses campos antes que eles sejam usados em uma operação que culmina em execução de comando. Como a execução ocorre no contexto do usuário que invoca o Composer, a consequência pode variar de comprometimento de arquivos do projeto e ambiente de desenvolvimento até execução dentro de um job de CI/CD, dependendo de onde o comando for executado.

Em CVE-2026-40261, a condição explorável está em uma referência de origem construída com metacaracteres de shell. O problema informado é escape inadequado, o que permite que caracteres com significado especial para o interpretador de comandos alterem a semântica esperada da operação. A matéria não fornece um payload e ele não é necessário para a defesa: o ponto operacional é que referências de origem e metadados VCS deixam de ser apenas dados descritivos e passam a ser uma entrada capaz de influenciar execução local. Isso é especialmente sensível em ecossistemas de dependências, nos quais ferramentas automatizadas podem executar resolução, instalação ou atualização em código vindo de terceiros.

Um detalhe importante é a independência em relação à instalação do Perforce VCS. A nota dos mantenedores indica que o Composer executaria os comandos injetados mesmo sem o Perforce instalado. Para equipes de segurança, isso significa que inventários baseados apenas em presença de binários Perforce podem subestimar o risco. A superfície real está no Composer vulnerável processando campos Perforce em metadados de projeto ou pacote, não no uso legítimo e prévio do Perforce pela organização.

Superfície afetada

A superfície exposta inclui estáções de desenvolvimento, ambientes de build, runners de integração contínua e qualquer sistema em que comandos do Composer sejam executados contra projetos ou repositórios que não sejam totalmente confiáveis. O risco é mais crítico quando o processo roda com permissões amplas, acesso a tokens de repositório, credenciais de publicação, segredos de pipeline, chaves de assinatura ou diretórios compartilhados. O material analisado não confirma roubo de dados, movimentação lateral ou exploração ativa; portanto, o impacto deve ser tratado tecnicamente como execução de comandos sob as permissões do usuário local ou do processo automatizado.

Packagist.org foi varrido e não houve evidência de abuso por atores de ameaça publicando pacotes com informações Perforce maliciosas associadas a essas vulnerabilidades. Ainda assim, como precaução, a publicação de metadados de origem Perforce foi desativada no Packagist.org desde 10 de abril de 2026. Também foi informado que uma nova versão seria enviada para clientes do Private Packagist Self-Hosted, o que indica que ambientes privados de distribuição de pacotes também precisam acompanhar a correção específica do produto usado.

  • Projetos PHP que executam Composer em código obtido de repositórios ou pacotes não totalmente confiáveis.
  • Pipelines de CI/CD que fazem instalação ou atualização de dependências com credenciais disponíveis no ambiente.
  • Arquivos composer.json contendo campos relacionados a repositórios Perforce VCS.
  • Referências de origem que contenham caracteres com significado especial para shell.
  • Instalações do Composer ainda não atualizadas após a disponibilização das correções.
Hunting e telemetria

A detecção deve começar pelo ponto em que o Composer é executado. Em endpoints e servidores de build, procure execuções do Composer seguidas de processos filhos incomuns, comandos de shell inesperados ou alterações fora do diretório normal do projeto. Como o vetor envolve metadados de repositório e referências de origem, a análise de logs deve correlacionar o horário de execução do Composer com alterações em arquivos do projeto, criação de processos, acesso a variáveis de ambiente e uso de credenciais de pipeline. O objetivo não é procurar um comando específico, mas identificar desvio de comportamento durante uma operação de dependências.

Em repositórios, revise mudanças recentes em composer.json que adicionem ou alterem declarações Perforce VCS, principalmente quando a alteração vier de contribuição externa, pull request não confiável, pacote recém-adicionado ou automação de atualização. Em ambientes CI/CD, avalie execuções que usaram modo de instalação por distribuição quando isso for registrado, pois a recomendação temporária menciona evitar --prefer-dist ou a configuração preferred-install: dist quando a atualização imediata não for possível. Essa observação deve ser usada como filtro de exposição, não como prova isolada de exploração.

  • Processos filhos de shell iniciados durante execução do Composer sem padrão histórico equivalente.
  • Alterações recentes em composer.json envolvendo repositórios Perforce VCS ou campos de origem.
  • Execuções do Composer em runners com segredos de ambiente disponíveis para o processo.
  • Falhas, mensagens anômalas ou comportamento inesperado durante resolução de dependências PHP.
  • Projetos obtidos de fontes externas que foram processados antes da atualização do Composer.
Mitigação

A ação principal é atualizar o Composer imediatamente para uma versão corrigida. Onde a atualização não puder ser aplicada no mesmo ciclo, a contenção deve reduzir a exposição a entradas não confiáveis: inspecionar arquivos composer.json antes de executar Composer, validar se campos relacionados ao Perforce contêm apenas valores esperados e executar comandos de dependência somente em projetos de origem confiável. A recomendação também inclui usar apenas repositórios Composer confiáveis e evitar instalação de dependências com --prefer-dist ou com preferred-install: dist enquanto a correção não estiver implantada.

Para ambientes de engenharia, a resposta deve incluir revisão de pipelines que executam Composer automaticamente em pull requests, forks, dependências recém-publicadas ou projetos clonados de terceiros. Se houver execução recente em contexto sensível, preserve logs de processo, registros de CI/CD e histórico de alterações do composer.json para análise. A mitigação completa não deve se limitar à estáção do desenvolvedor: runners efêmeros, imagens de build e templates internos precisam receber a atualização, pois a vulnerabilidade é acionada pelo Composer processando metadados, não por uma aplicação PHP em produção atendendo tráfego HTTP.

  • Atualizar todas as instalações do Composer usadas por desenvolvedores, automações e CI/CD.
  • Revisar composer.json antes de executar Composer em projetos de origem externa ou não verificada.
  • Validar campos Perforce VCS e rejeitar valores inesperados, ambíguos ou manipulados.
  • Usar apenas repositórios Composer confiáveis durante o período de resposta.
  • Evitar --prefer-dist e preferred-install: dist quando a atualização imediata ainda não tiver sido concluída.
  • Acompanhar a nova versão para Private Packagist Self-Hosted quando esse produto fizer parte do ambiente.

Postar um comentário

0 Comentários