SOC Prime Bias: Critical

08 Jun 2026 19:43 UTC

Pré-instalação para Persistência: Dentro da Campanha de Roubo de Credenciais Miasma do npm da Red Hat

Author Photo
SOC Prime Team linkedin icon Seguir
Pré-instalação para Persistência: Dentro da Campanha de Roubo de Credenciais Miasma do npm da Red Hat
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumo

O Microsoft Defender identificou um comprometimento da cadeia de suprimentos afetando 32 pacotes npm publicados sob o namespace @redhat-cloud-services . Os invasores embutiram um gancho de pré-instalação que implanta um carregador JavaScript altamente ofuscado, que então recupera o runtime Bun e um ladrão de credenciais de segunda etapa. O malware coleta tokens do GitHub, npm, principais provedores de nuvem, HashiCorp Vault e Kubernetes, em seguida, republica pacotes envenenados para continuar se espalhando. A campanha também inclui uma salvaguarda destrutiva que apaga o diretório inicial da vítima se um token de isca for detectado.

Investigação

A investigação rastreou a violação inicial para uma pipeline CI/CD comprometida para RedHatInsights/javascript-clients, onde os invasores abusaram de um fluxo de trabalho legítimo de OIDC do GitHub Actions para publicar pacotes trojanizados com assinaturas de proveniência válidas. A análise do dropper expôs múltiplas camadas de ofuscação, incluindo codificação baseada em ROT, criptografia AES-128-GCM e um cifra personalizada, antes que o Bun fosse executado para lançar o payload de segunda etapa. Os agentes de ameaça também rasparam a memória dos runners do GitHub Actions para extrair segredos diretamente de processos ativos.

Mitigação

A Microsoft recomenda revisar as árvores de dependência para os pacotes afetados, fixar versões confiáveis e desabilitar a execução de scripts npm com a flag @redhat-cloud-services packages, pinning trusted versions, and disabling npm script execution with the --ignore-scripts quando possível. Todos os tokens npm comprometidos devem ser revogados e reemitidos, e as contas do GitHub devem ser revisadas para criação de repositórios não autorizados ou atividades suspeitas. Salvaguardas adicionais foram implementadas dentro do namespace @redhat-cloud-services para evitar publicação não autorizada.

Resposta

Os defensores devem detectar execuções suspeitas de pré-instalação npm e lançamentos inesperados do runtime Bun a partir de diretórios temporários. O monitoramento também deve cobrir a criação de repositórios públicos desconhecidos no GitHub e padrões incomuns de uso de tokens. Defesas de rede devem bloquear ou alertar para conexões a URLs conhecidos de download do Bun e ao domínio api.anthropic.com . Quaisquer credenciais potencialmente expostas devem ser imediatamente rotacionadas, e a memória do runner CI/CD deve ser investigada quanto a sinais de vazamento de segredos.

"graph TB %% Definições de Classe classDef action fill:#99ccff classDef tool fill:#cccccc classDef malware fill:#ffcc99 classDef process fill:#ff9966 %% Nós node_sc_001["<b>Ação</b> – <b>T1195.001 Comprometimento da Cadeia de Suprimentos</b>: Comprometer Dependências de Software e Ferramentas de Desenvolvimento<br/>O invasor sequestrou a pipeline CI/CD do RedHatInsights/javascript-clients e usou OIDC do GitHub Actions para publicar pacotes npm trojanizados @redhat-cloud-services."] class node_sc_001 action tool_github_oidc["<b>Ferramenta</b> – <b>Nome</b>: OIDC do GitHub Actions<br/><b>Descrição</b>: Integração OpenID Connect que fornece tokens de curta duração para fluxos de trabalho CI."] class tool_github_oidc tool malicious_preinstall["<b>Malware</b> – <b>T1127.003 Execução Proxy de Utilitários de Desenvolvedor Confiáveis</b>: Gancho de pré-instalação malicioso em package.json executado automaticamente durante <code>npm install</code>, gerando <code>node index.js</code>."] class malicious_preinstall malware installer_trigger["<b>Ação</b> – <b>T1546.016 Execução Disparada por Evento</b>: Disparador de pacote do instalador que executa o dropper quando o script de pré-instalação é invocado."] class installer_trigger action obfuscated_payload["<b>Malware</b> – <b>T1027.009 Arquivos ou Informações Ofuscadas</b>: Payload embutido (4.29u202fMB index.js) usando camadas múltiplas ROT, AESu2011128u2011GCM, stringu2011array e cifra PBKDF2 personalizada para ocultar seu código."] class obfuscated_payload malware dynamic_resolution["<b>Malware</b> – <b>T1027.007 Arquivos ou Informações Ofuscadas</b>: Resolução de API dinâmica u2013 a desofuscação em tempo de execução resolve URLs para o runtime Bun e endpoints C2."] class dynamic_resolution malware ingress_transfer["<b>Ação</b> – <b>T1105 Transferência de Ferramenta de Ingresso</b>: Dropper baixa o runtime JavaScript Bun dos URLs de release oficiais antes de executar o payload de segunda etapa."] class ingress_transfer action tool_bun_runtime["<b>Ferramenta</b> – <b>Nome</b>: Runtime JavaScript Bun<br/><b>Descrição</b>: Motor JavaScript de alto desempenho usado como ambiente de execução para a segunda etapa."] class tool_bun_runtime tool metadata_query["<b>Ação</b> – <b>T1552.005 Credenciais Inseguras</b>: API de Metadados de Instâncias de Nuvem<br/>Consulta serviços de metadados de AWS/ECS, Azure IMDS e GCP para obter tokens de acesso à nuvem."] class metadata_query action file_credential["<b>Ação</b> – <b>T1552.001 Credenciais Inseguras</b>: Credenciais em Arquivos<br/>Raspa arquivos locais em busca de chaves SSH, configs CLI, arquivos de carteiras de criptomoedas e outros materiais secretos."] class file_credential action token_harvest["<b>Ação</b> – <b>T1528 Roubo de Token de Acesso a Aplicação</b>: Coleta tokens de runner do GitHub Actions, tokens OIDC do npm e outros tokens de provedores."] class token_harvest action browser_discovery["<b>Ação</b> – <b>T1217 Descoberta de Informações do Navegador</b>: Coleta arquivos de armazenamento de navegadores e carteiras de criptomoedas de estações de trabalho de desenvolvedores."] class browser_discovery action elevation_control["<b>Ação</b> – <b>T1548 Abuso do Mecanismo de Controle de Elevação</b>: Instala uma regra sudo sem senha via um mount de vinculação em <code>/etc/sudoers.d</code> para ganhar privilégios de root."] class elevation_control action exfiltration_git["<b>Ação</b> – <b>T1048 Exfiltração por Protocolo Alternativo</b>: Exfiltra credenciais roubadas criando repositórios GitHub sob a conta da vítima, cometendo arquivos JSON, e também usa um endpoint HTTPS alternativo."] class exfiltration_git action destructive_cleanup["<b>Ação</b> – <b>T1070.010 Remoção de Indicador</b>: Realoca malware e, se um token de isca foi utilizado, executa <code>rm -rf ~/</code> para apagar o diretório inicial do usuário."] class destructive_cleanup action node_sc_002["<b>Ação</b> – <b>T1195.002 Comprometimento da Cadeia de Suprimentos</b>: Comprometimento da cadeia de suprimentos de software u2013 republishing pacotes envenenados com proveniência SLSA forjada, permitindo propagação semelhante a verme para projetos a jusante."] class node_sc_002 action %% Conexões node_sc_001 –>|usa| tool_github_oidc tool_github_oidc –>|executa| malicious_preinstall malicious_preinstall –>|dispara| installer_trigger installer_trigger –>|executa| obfuscated_payload obfuscated_payload –>|realiza| dynamic_resolution dynamic_resolution –>|baixa| ingress_transfer ingress_transfer –>|instala| tool_bun_runtime tool_bun_runtime –>|consulta| metadata_query metadata_query –>|raspa| file_credential file_credential –>|coleta| token_harvest token_harvest –>|coleta| browser_discovery browser_discovery –>|habilita| elevation_control elevation_control –>|exfiltra via| exfiltration_git exfiltration_git –>|pode disparar| destructive_cleanup destructive_cleanup –>|facilita| node_sc_002 node_sc_002 –>|propaga para| node_sc_001 "

Fluxo de Ataque

Detecções

Upload/Download de Arquivo Remoto via Ferramentas Padrão (via linha de comando)

Equipe SOC Prime
08 Jun 2026

IOCs (HashSha256) para detectar: Pré-instalação para persistência: Dentro da campanha de roubo de credenciais do npm Miasma da Red Hat

Regras AI do SOC Prime
08 Jun 2026

Comportamento Suspeito de Processos Node.js com Execução do Runtime Bun [Criação de Processo do Windows]

Regras AI do SOC Prime
08 Jun 2026

Execução do Runtime Bun e Detecção de Regra Sudo Sem Senha [Criação de Processo do Linux]

Regras AI do SOC Prime
08 Jun 2026

Coleta de Token de Conta de Serviço GCP pela Campanha Miasma [Google Cloud Platform]

Regras AI do SOC Prime
08 Jun 2026

Detecção de Acesso Não Autorizado a Token OAuth2 do Azure IMDS [Logs de Atividade do Azure]

Regras AI do SOC Prime
08 Jun 2026

Acesso a Credenciais via Recuperação de Token OAuth2 de IMDS e Acesso ao Secrets Manager [AWS Cloudtrail]

Regras AI do SOC Prime
08 Jun 2026

Execução de Simulação

Pré-requisito: O Check de Pré-vazio & Baseline de Telemetria deve ter passado.

Racional: Esta seção detalha a execução precisa da técnica do adversário (TTP) projetada para disparar a regra de detecção. Os comandos e a narrativa DEVEM refletir diretamente os TTPs identificados e visam gerar a telemetria exata esperada pela lógica de detecção.

  • Narrativa de Ataque & Comandos:
    Um adversário que já comprometeu uma VM GCE utiliza uma abordagem viver-da-terra para coletar o token padrão de conta de serviço da VM. Os passos são:

    1. Sonde o servidor de metadados para verificar se está acessível.
    2. Envie uma solicitação de token to http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token com o cabeçalho Metadata-Flavor: Google necessário.
    3. Salve o JSON retornado (contém access_token, expires_in, token_type).
    4. Use o token para chamar uma API GCP privilegiada (por exemplo, listar todos os buckets) para demonstrar credenciais acionáveis.

    Esta sequência exata gera o evento de auditoria GCPServiceAccountTokenAccess, que corresponde à seleção.

  • do Sigma

    Script de Teste de Regressão:
  • Cleanup Commands:

    # Nenhuma alteração persistente foi feita; somente remoção de variáveis temporárias.
    unset TOKEN_RESPONSE ACCESS_TOKEN
    echo "[*] Limpeza completa."