Em 1º de junho de 2026, detectamos vários pacotes oficiais do escopo @redhat-cloud-services no npm foram comprometidas com um worm de roubo de credenciais. No total, 96 versões em 32 pacotes foram comprometidas, baixadas cumulativamente 116.991 vezes por semana. O malware parece semelhante ao malware Mini Shai-Hulud que foi recentemente open-sourced pelo TeamPCP. Como as ferramentas foram disponibilizadas publicamente, outros atores de ameaça agora têm acesso às mesmas técnicas e podem replicá-las ou adaptá-las. Os pacotes foram publicados via GitHub Actions OIDC, indicando que o pipeline CI/CD foi comprometido, e não um token npm. Se você instalou alguma versão de pacote afetada desde 1º de junho de 2026, trate todos os Secrets de CI, credenciais de Cloud, chaves SSH e tokens npm como comprometidos e rotacione-os imediatamente.
Linha do tempo da campanha Mini Shai-Hulud
- 22 de abril de 2026 - @bitwarden/cli comprometido via um workflow envenenado do GitHub Actions. O payload se autoidentifica como "Shai-Hulud: The Third Coming."
- 29 de abril de 2026 - Quatro pacotes npm da SAP comprometidos através de um token npm vazado via uma build maliciosa de pull request do CircleCI.
- 30 de abril de 2026 - PyTorch Lightning comprometido no PyPI, versões 2.6.2 e 2.6.3.
- 12 de maio de 2026 - Mini Shai-Hulud atinge mais de 160 pacotes, incluindo Mistral e Tanstack.
- 12 de maio de 2026 - TeamPCP publica o código-fonte completo de Shai-Hulud no GitHub, juntamente com posts no BreachForums incentivando outros a executar suas próprias campanhas.
- 19 de maio de 2026 - Pacote npm DurableTask da Microsoft comprometido, causado por uma conta GitHub previamente comprometida.
- 1º de junho de 2026 - Mais de 30
@redhat-cloud-servicespacotes npm comprometidos com Miasma, uma nova variante de Mini Shai-Hulud.
Miasma: Shai-Hulud está de volta?
O payload incorporado nos pacotes afetados apresenta fortes semelhanças com o Mini Shai-Hulud, o malware de supply chain de código aberto pela TeamPCP. Curiosamente, esta versão se autodenomina "Miasma" e parece ter substituído as referências familiares de Duna do Shai-Hulud por mitologia grega.
TeamPCP é um grupo de agentes de ameaça que tem realizado ataques direcionados à supply chain de CI/CD há vários meses. Seu malware Mini Shai-Hulud é um worm sofisticado de roubo de credenciais que se espalha republicando versões com backdoor de pacotes aos quais a conta da vítima tem acesso. Já relatamos anteriormente sobre comprometimentos afetando Mistral e TanStack, Durable Task da Microsoft, PyTorch Lightning, Bitwarden CLI e Intercom, todos rastreados até as mesmas ferramentas.
Quando a TeamPCP disponibilizou o Mini Shai-Hulud como código aberto, a ameaça se expandiu para além de um único agente. Qualquer grupo agora pode pegar a estrutura, adaptá-la e implantá-la contra novos alvos.
Bypass de publicação confiável
Trusted publishing é um mecanismo que o npm introduziu para eliminar tokens de publicação de longa duração de pipelines CI/CD, substituindo-os por tokens OIDC de curta duração emitidos pelo GitHub Actions. Foi projetado para ser mais seguro, mas como ataques recentes mostram, pode ser contornado se um invasor obtiver acesso a um pipeline CI/CD através de uma vulnerabilidade ou token comprometido.
Descobrimos que a conta GitHub de um funcionário da Red Hat foi comprometida e usada para enviar commits órfãos maliciosos diretamente para vários repositórios, ignorando completamente a revisão de código. Esses commits órfãos continham um arquivo de workflow (ci.yaml) e um script (_index.js).
name: release
on:
push:
branches: ['*']
jobs:
release:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6
- name: prepare
run: bun run _index.js
env:
OIDC_PACKAGES: "@redhat-cloud-services/frontend-components-advisor-components, @redhat-cloud-services/chrome, @redhat-cloud-services/frontend-components, @redhat-cloud-services/frontend-components-config-utilities, @redhat-cloud-services/frontend-components-config, @redhat-cloud-services/eslint-config-redhat-cloud-services, @redhat-cloud-services/frontend-components-notifications, @redhat-cloud-services/frontend-components-remediations, @redhat-cloud-services/rule-components, @redhat-cloud-services/frontend-components-testing, @redhat-cloud-services/frontend-components-translations, @redhat-cloud-services/tsc-transform-imports, @redhat-cloud-services/types, @redhat-cloud-services/frontend-components-utilities"
WORKFLOW_ID: "ci.yaml"
REPO_ID_SUFFIX: "RedHatInsights/frontend-components"Quando o workflow é executado, ele instala o Bun e executa _index.js, passando uma lista de pacotes alvo via a variável de ambiente OIDC_PACKAGES variável de ambiente. O script usa a permissão id-token: write para solicitar um token OIDC de curta duração do GitHub, e então usa esse token para autenticar diretamente com o endpoint de publicação confiável do npm e publicar versões com backdoor de cada pacote na lista.
Este é o mesmo padrão fundamental visto nos comprometimentos de TanStack e Bitwarden: o próprio pipeline CI/CD se torna a superfície de ataque, enquanto a publicação confiável baseada em OIDC – projetada para eliminar tokens de longa duração – se torna um sinal de confiança enganoso.
O script de pré-instalação
Cada pacote comprometido declara um script de pré-instalação em seu package.json que executa node index.js automaticamente em cada npm install, antes que qualquer código de aplicação seja executado e antes que o desenvolvedor tenha qualquer indicação de que algo está errado.
"scripts": {
"preinstall": "node index.js"
}
O arquivo index.js é um payload de 4.2 MB oculto por trás de múltiplas camadas de ofuscação.
O que ele rouba
Assim como em ataques anteriores do Mini Shai-Hulud, o payload realiza uma varredura ampla de credenciais em provedores de Cloud, ambientes de CI/CD e ferramentas de desenvolvimento. No lado do CI, ele visa Secrets do GitHub Actions, incluindo GITHUB_TOKEN e ACTIONS_RUNTIME_TOKEN. Para credenciais de Cloud, ele coleta chaves de acesso e tokens de sessão AWS, credenciais padrão de aplicação GCP e arquivos de chave de conta de serviço, e credenciais de service principal e tokens de identidade gerenciada do Azure. Ele também varre em busca de tokens HashiCorp Vault, tokens de conta de serviço Kubernetes e arquivos kubeconfig, tokens de publicação npm e PyPI, chaves privadas SSH, credenciais de registro Docker, chaves GPG e quaisquer arquivos .env que possa encontrar no sistema de arquivos.
Como a Aikido detecta isso
Se você é um usuário Aikido, verifique seu feed central e filtre por problemas de malware. Isso aparecerá como um problema crítico 100/100. O Aikido reanalisa todas as noites, mas recomendamos acionar uma reanálise manual agora.
Se você ainda não é um usuário Aikido, pode criar uma conta e conectar seus repositórios. Nossa cobertura de malware está incluída no plano gratuito, não é necessário cartão de crédito.
Para uma cobertura mais ampla em toda a sua equipe, o Device Protection da Aikido oferece visibilidade e controle sobre os pacotes de software instalados nos dispositivos da sua equipe. Ele abrange extensões de navegador, bibliotecas de código, plugins IDE e dependências de build, tudo em um só lugar. Pare o malware antes que ele seja instalado.
Para proteção futura, considere Aikido Safe Chain (open source). O Safe Chain se integra ao seu fluxo de trabalho existente, interceptando comandos npm, npx, yarn, pnpm e pnpx e verificando pacotes contra Aikido Intel antes da instalação.
Indicadores de Compromisso
Se você instalou alguma das seguintes versões de pacotes, considere todos os Secrets de CI, credenciais de Cloud, chaves SSH e tokens npm como comprometidos e rotacione-os imediatamente:
@redhat-cloud-services/chrome(2.3.1, 2.3.2)@redhat-cloud-services/compliance-client(4.0.3, 4.0.4)@redhat-cloud-services/config-manager-client(5.0.4, 5.0.5)@redhat-cloud-services/entitlements-client(4.0.11, 4.0.12)@redhat-cloud-services/eslint-config-redhat-cloud-services(3.2.1, 3.2.2)@redhat-cloud-services/frontend-components(7.7.2, 7.7.3)@redhat-cloud-services/frontend-components-advisor-components(3.8.2)@redhat-cloud-services/frontend-components-config(6.11.3, 6.11.4)@redhat-cloud-services/frontend-components-config-utilities(4.11.2, 4.11.3)@redhat-cloud-services/frontend-components-notifications(6.9.2, 6.9.3)@redhat-cloud-services/frontend-components-remediations(4.9.2, 4.9.3)@redhat-cloud-services/frontend-components-testing(1.2.1, 1.2.2)@redhat-cloud-services/frontend-components-translations(4.4.1, 4.4.2)@redhat-cloud-services/frontend-components-utilities(7.4.1, 7.4.2)@redhat-cloud-services/hcc-feo-mcp(0.3.1, 0.3.2)@redhat-cloud-services/hcc-kessel-mcp(0.3.1, 0.3.2)@redhat-cloud-services/hcc-pf-mcp(0.6.1, 0.6.2)@redhat-cloud-services/host-inventory-client(5.0.3, 5.0.4)@redhat-cloud-services/insights-client(4.0.4, 4.0.5)@redhat-cloud-services/integrations-client(6.0.4, 6.0.5)@redhat-cloud-services/javascript-clients-shared(2.0.8, 2.0.9)@redhat-cloud-services/notifications-client(6.1.4, 6.1.5)@redhat-cloud-services/patch-client(4.0.4, 4.0.5)@redhat-cloud-services/quickstarts-client(4.0.11, 4.0.12)@redhat-cloud-services/rbac-client(9.0.3, 9.0.4)@redhat-cloud-services/remediations-client(4.0.4, 4.0.5)@redhat-cloud-services/rule-components(4.7.2, 4.7.3)@redhat-cloud-services/sources-client(3.0.10, 3.0.11)@redhat-cloud-services/topological-inventory-client(3.0.10, 3.0.11)@redhat-cloud-services/tsc-transform-imports(1.2.2)@redhat-cloud-services/types(3.6.1, 3.6.2, 3.6.4)@redhat-cloud-services/vulnerabilities-client(2.1.8, 2.1.9)

