Atualização sobre a Segurança da Cadeia de Suprimentos do Composer e Packagist

PHP Cyber Pacotes
Atualização sobre a Segurança da Cadeia de Suprimentos do Composer e Packagist

Este artigo foi originalmente publicado por Nils Adermann e Igor Benko em blog.packagist.com.

Os últimos meses, e ainda mais as últimas semanas, registraram um aumento nos ataques à cadeia de suprimentos de software visando ecossistemas de código aberto. Alguns deles atingiram o ecossistema PHP também, por meio de contas do GitHub invadidas e tokens de acesso roubados, permitindo que atacantes publicassem novas tags em pacotes aos quais não tinham acesso legítimo. Exemplos notáveis incluem o laravel-lang em 22 de maio e o intercom/intercom-php em 30 de abril.

Este post é uma atualização sobre o estado atual do trabalho de segurança da cadeia de suprimentos do Composer e do Packagist.org: o que já está em vigor, o que será lançado nas próximas semanas e os projetos de longo prazo em andamento.

Se você mantém qualquer pacote no Packagist.org e não possui MFA (Autenticação de Múltiplos Fatores) ativado, ative-o agora. Começaremos a publicar o status de MFA dos mantenedores nos logs de transparência e ele ficará visível nos perfis.

Status Atual e Cronograma

Já em vigor:

  • Detecção de malware Aikido: Integrada ao Packagist.org e aos metadados que o Composer consome.
  • Resposta rápida a incidentes: Intervenção manual da equipe do Packagist para remover versões afetadas.
  • Log de transparência: Um registro público de eventos relevantes para a segurança, incluindo modificações de tags git.

Lançamentos iminentes:

  • Composer 2.10: Introdução de uma estrutura unificada de políticas de dependência para malware, vulnerabilidades e pacotes abandonados.
  • Imutabilidade de versões estáveis: Versões com tag não poderão mais ser reescritas silenciosamente por meio de re-tagging em repositórios git.
  • Downloads previsíveis: Depreciação de fallbacks de código-fonte para evitar comportamentos inesperados.

Próximas semanas e meses:

  • Política de idade mínima de lançamento: Um período de "resfriamento" no Composer para recusar versões publicadas há poucas horas.
  • Ferramentas administrativas aprimoradas: Substituições manuais de feeds de malware e congelamento de pacotes durante invasões.
  • Visibilidade de MFA: O status de MFA será exibido nos perfis dos mantenedores para incentivar a segurança das contas.

O Log de Transparência

O Packagist.org possui um log de transparência público que registra eventos de segurança. Este trabalho foi financiado pela German Sovereign Tech Agency e tem sido fundamental para lidar com ataques recentes, permitindo identificar exatamente o que foi manipulado e reconstruir cronogramas precisos.

Imutabilidade de Versão

Esta é uma mudança importante: versões estáveis no Packagist.org se tornarão imutáveis. Uma vez que um pacote publica uma versão não-dev, o Packagist.org não a reescreverá mais em resposta a re-tagging no upstream. Isso impede que um invasor republique uma versão existente e amplamente instalada com um backdoor caso a conta de um mantenedor seja comprometida.

Direção de Longo Prazo

No futuro, o objetivo é que o Packagist.org hospede artefatos de build imutáveis diretamente, junto com a proveniência de build SLSA e atestações Sigstore. Este projeto visa levar o stack Composer + Packagist ao Nível 4 do SLSA Dependency Track, defendendo proativamente contra ataques no upstream.

Patrocínio e Suporte

Este trabalho extensivo requer financiamento. Além do Private Packagist, agradecemos à Sovereign Tech Agency e à Aikido por financiarem muitas horas de trabalho. Estamos lançando um novo programa de patrocínio em junho para apoiar a operação do Packagist.org e o desenvolvimento desses recursos de segurança.