3 pontos por GN⁺ 2025-09-20 | Ainda não há comentários. | Compartilhar no WhatsApp
  • Vários pacotes npm que incluíam o pacote open source @ctrl/tinycolor foram infectados por versões maliciosas; a causa foi o roubo de token npm por meio de um workflow do GitHub Actions em um repositório colaborativo
  • O invasor usou um token npm com permissões amplas para publicar código malicioso em cerca de 20 pacotes, e entre eles o @ctrl/tinycolor tinha grande impacto por registrar 2 milhões de downloads semanais
  • As versões infectadas executavam um payload malicioso na etapa de postinstall, e as equipes de segurança do GitHub e do npm responderam rapidamente com remoção e limpeza
  • O autor preparou um plano de segurança reforçado para evitar recorrência, incluindo migração para Trusted Publishing (OIDC), minimização de permissões de tokens, obrigatoriedade de 2FA e uso de recursos do pnpm
  • Este incidente mostra a fragilidade da segurança da cadeia de suprimentos de software e evidencia a necessidade de melhorar os recursos de segurança e mudar as práticas de segurança em todo o ecossistema npm

TL;DR

  • Um workflow malicioso do GitHub Actions foi enviado a um repositório compartilhado e roubou um token npm
  • Com esse token, o invasor publicou versões maliciosas de 20 pacotes, e entre eles o @ctrl/tinycolor teve maior alcance por causa do alto volume de downloads
  • A conta pessoal e os repositórios não foram comprometidos diretamente, e não houve phishing nem instalação local de malware
  • Graças à resposta rápida das equipes de segurança do GitHub/npm, as versões maliciosas foram removidas e depois versões limpas foram republicadas para limpar o cache

Como descobri o incidente (How I Found Out)

  • Na tarde de 15 de setembro, o membro da comunidade Wes Todd avisou sobre o problema por DM no Bluesky
  • As equipes de segurança do GitHub/npm já estavam organizando a lista de pacotes afetados e iniciando a remoção
  • Como pista inicial, foi compartilhado o nome de branch malicioso 'Shai-Hulud', tirado do nome do verme da areia do universo de Dune

O que realmente aconteceu (What Actually Happened)

  • Havia um colaborador de longa data no repositório angulartics2 que ainda mantinha permissões de admin
  • O token npm armazenado nesse repositório foi roubado por um workflow malicioso do GitHub Actions
  • Com esse token, o invasor publicou cerca de 20 pacotes, incluindo @ctrl/tinycolor
  • As equipes de segurança do GitHub/npm removeram rapidamente as versões maliciosas, e o autor republicou novas versões confiáveis

Impacto (Impact)

  • Ao instalar uma versão maliciosa, o script de postinstall era executado, gerando risco de segurança
  • Usuários afetados são orientados a consultar as instruções imediatas de resposta da StepSecurity

Ambiente de publicação e plano de resposta (Publishing Setup & Interim Plan)

  • Antes, a publicação automática era feita com a combinação semantic-release + GitHub Actions
  • O recurso de provenance do npm era usado, mas não conseguia impedir um invasor com um token válido
  • No futuro, o plano é adotar Trusted Publishing (OIDC) para eliminar tokens estáticos
  • No momento, todos os tokens foram revogados, a 2FA foi tornada obrigatória, apenas tokens com permissões granulares são permitidos, e medidas extras como avaliação do recurso minimumReleaseAge do pnpm estão sendo aplicadas

Melhorias ideais (Publishing Wishlist)

  • É necessário oferecer, no nível da conta npm, uma opção para forçar Trusted Publishing baseado em OIDC
  • Também é necessário bloquear publicações sem provenance e oferecer suporte a integração completa entre semantic-release e OIDC
  • Há o desejo de que a interface do GitHub ofereça uma função de publicação com aprovação manual baseada em 2FA
  • Recursos de proteção no nível de GitHub Environments deveriam estar disponíveis mesmo sem assinatura Pro
  • Na página de pacotes do npm, deveria haver indicação da presença de script postinstall e divulgação do motivo de versões removidas

Ainda não há comentários.

Ainda não há comentários.