Ataque à Cadeia de Suprimentos no Axios Puxa Dependência Maliciosa do NPM
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
Um pacote npm malicioso, plain-crypto-js@4.2.1, foi publicado e depois incluído como uma dependência transitiva por meio de lançamentos comprometidos do cliente HTTP JavaScript amplamente usado Axios. O pacote usa um script pós-instalação para entregar um trojan de acesso remoto em múltiplas etapas, direcionado a Windows, macOS e Linux. O ataque parece ter se baseado em tokens npm de longa duração, permitindo que os agentes de ameaça liberassem versões maliciosas fora do fluxo de lançamento habitual do projeto. Detectar a dependência alterada cedo pode impedir o RAT antes da execução nos sistemas afetados.
Investigação
A pesquisa da Socket realizou uma análise estática do setup.js dropper e desofuscou strings codificadas para expor o domínio C2, lógica de entrega de carga e caminhos do sistema de arquivos alvo. Os pesquisadores identificaram três versões comprometidas do Axios e dois pacotes npm adicionais que continham o mesmo código malicioso. Eles também extraíram indicadores de rede, caminhos de arquivos e strings de agente de usuário que podem ser usados para engenharia de detecção e criação de regras.
Mitigação
As organizações devem revogar qualquer token npm de longa duração e girar as credenciais de todas as contas potencialmente afetadas. As versões comprometidas do Axios e quaisquer pacotes que dependem de plain-crypto-js@4.2.1 devem ser removidos ou rebaixados imediatamente. As equipes também devem revisar lockfiles, pipelines CI/CD e controles de segurança da cadeia de suprimentos de software para identificar atividades de publicação não autorizadas e reduzir a chance de compromisso de pacotes futuros.
Resposta
As equipes de segurança devem monitorar os logs de instalação do npm para referências a plain-crypto-js@4.2.1 e as versões afetadas do Axios. Regras de detecção devem ser criadas para execução do hook de pós-instalação, acesso à rede para sfrclak.com, e a string de agente de usuário malicioso. Se o compromisso for confirmado, os sistemas afetados devem ser isolados, a memória volátil deve ser coletada para análise, e o host deve ser reformatado se o RAT for encontrado.
graph TB %% Class definitions classDef technique fill:#c2e0ff classDef tool fill:#ffd9b3 classDef malware fill:#f5b7b1 classDef process fill:#d5f5e3 %% Technique nodes tech_t1195_002[“<b>Técnica</b> – <b>T1195.002</b> Comprometimento da cadeia de fornecimento: software<br/><b>Descrição</b>: Adversários comprometem atualizações ou distribuição de pacotes para entregar código malicioso.”] class tech_t1195_002 technique tech_t1127_003[“<b>Técnica</b> – <b>T1127.003</b> Execução proxy via utilitários confiáveis<br/><b>Descrição</b>: Código malicioso executado via script post-install.”] class tech_t1127_003 technique tech_t1059_004[“<b>Técnica</b> – <b>T1059.004</b> Shell Unix<br/><b>Descrição</b>: Uso de curl, chmod, nohup.”] class tech_t1059_004 technique tech_t1059_001[“<b>Técnica</b> – <b>T1059.001</b> PowerShell”] class tech_t1059_001 technique tech_t1059_005[“<b>Técnica</b> – <b>T1059.005</b> Visual Basic”] class tech_t1059_005 technique tech_t1059_003[“<b>Técnica</b> – <b>T1059.003</b> CMD Windows”] class tech_t1059_003 technique tech_t1027_014[“<b>Técnica</b> – <b>T1027.014</b> Ofuscação”] class tech_t1027_014 technique tech_t1070_004[“<b>Técnica</b> – <b>T1070.004</b> Remoção de evidências”] class tech_t1070_004 technique tech_t1195_001[“<b>Técnica</b> – <b>T1195.001</b> Compromisso de dependências”] class tech_t1195_001 technique tech_t1127[“<b>Técnica</b> – <b>T1127</b> Hooks npm”] class tech_t1127 technique tech_t1082[“<b>Técnica</b> – <b>T1082</b> Descoberta do sistema”] class tech_t1082 technique tech_t1219[“<b>Técnica</b> – <b>T1219</b> Acesso remoto”] class tech_t1219 technique tech_t1102_002[“<b>Técnica</b> – <b>T1102.002</b> Comunicação web”] class tech_t1102_002 technique tech_t1570[“<b>Técnica</b> – <b>T1570</b> Transferência lateral”] class tech_t1570 technique tech_t1036_005[“<b>Técnica</b> – <b>T1036.005</b> Mascaramento”] class tech_t1036_005 technique tech_t1036_003[“<b>Técnica</b> – <b>T1036.003</b> Renomeação”] class tech_t1036_003 technique process_curl[“<b>Processo</b> – curl”] class process_curl process process_chmod[“<b>Processo</b> – chmod”] class process_chmod process process_nohup[“<b>Processo</b> – nohup”] class process_nohup process malware_rat[“<b>Malware</b> – macOS RAT”] class malware_rat malware %% Connections showing attack flow tech_t1195_002 –>|leads_to| tech_t1127_003 tech_t1127_003 –>|uses| tech_t1059_004 tech_t1059_004 –>|executes| tech_t1059_001 tech_t1059_004 –>|executes| tech_t1059_005 tech_t1059_004 –>|executes| tech_t1059_003 tech_t1059_004 –>|employs| tech_t1027_014 tech_t1059_004 –>|leverages| tech_t1195_001 tech_t1059_004 –>|leverages| tech_t1127 tech_t1059_004 –>|collects| tech_t1082 tech_t1027_014 –>|enables| tech_t1070_004 tech_t1082 –>|enables| tech_t1219 tech_t1219 –>|communicates via| tech_t1102_002 tech_t1102_002 –>|facilitates| tech_t1570 tech_t1570 –>|results in| tech_t1036_005 tech_t1570 –>|results in| tech_t1036_003 tech_t1059_004 –>|downloads| process_curl tech_t1059_004 –>|sets permissions| process_chmod tech_t1059_004 –>|runs background| process_nohup malware_rat –>|is the| tech_t1219
Fluxo de Ataque
Detecções
MacOS Suspeito – Localizações e Nomes Plist (via file_event)
Ver
Processos Filhos Suspeitos do NodeJS [Windows] (via cmdline)
Ver
Upload/Download de Arquivo Remoto via Ferramentas Padrão (via cmdline)
Ver
Modificação de Permissões de Arquivos na Pasta Tmp Suspeita no MacOS (via cmdline)
Ver
Uso Suspeito de CURL (via cmdline)
Ver
Possível Execução por Uso de chmod e nohup em Comando Único (via cmdline)
Ver
Downloads para Pastas Suspeitas (via cmdline)
Ver
LOLBAS WScript / CScript (via process_creation)
Ver
Possibilidade de Execução Através de Linhas de Comando PowerShell Ocultas (via cmdline)
Ver
Uso de Nohup (via cmdline)
Ver
IOCs (SourceIP) para detectar: Ataque à Cadeia de Suprimentos no Axios Puxa Dependência Maliciosa do npm
Ver
IOCs (DestinationIP) para detectar: Ataque à Cadeia de Suprimentos no Axios Puxa Dependência Maliciosa do npm
Ver
IOCs (Emails) para detectar: Ataque à Cadeia de Suprimentos no Axios Puxa Dependência Maliciosa do npm
Ver
Táticas de Evasão PowerShell e VBScript em Ataque à Cadeia de Suprimentos (Criação de Processo Windows)
Ver
Detecção de Execução de Hook de Postinstall de Pacote npm Malicioso (Criação de Processo Linux)
Ver
Detecção de Script Python Malicioso e Arquivo Temporário em Ataque à Cadeia de Suprimentos Linux (Evento de Arquivo Linux)
Ver
Terminal do Windows Renomeado e VBScript Autodeletante Detectado (Evento de Arquivo Windows)
Ver
Execução de Script PowerShell com Flags Ocultas e de Bypass (Windows PowerShell)
Ver
Execução de Simulação
Pré-requisito: O Check Pré-voo de Telemetria & Baseline deve ter passado.
Racional: Esta seção detalha a execução precisa da técnica do adversário (TTP) projetada para acionar a regra de detecção. Os comandos e 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 invasor que obteve privilégios de usuário limitados em uma estação de trabalho comprometida deseja baixar uma carga útil VBScript maliciosa via um pacote npm legítimo (cenário de cadeia de suprimentos). Para evitar a detecção genérica de PowerShell, o invasor copia
powershell.exepara um novo arquivo chamadopowershell_renamed.exemas mantém a substring “powershell” no nome do arquivo (para que a verificação doImagem|contendoainda corresponda). Em seguida, o invasor executa uma busca “onde powershell” para enumerar o caminho do binário renomeado e finalmente inicia a carga VBScript comcscript //nologopara suprimir o banner do logotipo. -
Script de Teste de Regressão:
# ------------------------------------------------- # Passo 1: Criar uma cópia renomeada de powershell.exe # ------------------------------------------------- $src = "$env:SystemRootSystem32WindowsPowerShellv1.0powershell.exe" $dst = "$env:Temppowershell_renamed.exe" Copy-Item -Path $src -Destination $dst -Force # ------------------------------------------------- # Passo 2: Usar 'onde' para referenciar o binário renomeado # ------------------------------------------------- $whereOutput = & where.exe powershell_renamed Write-Host "PowerShell renomeado localizado em: $whereOutput" # ------------------------------------------------- # Passo 3: Criar uma carga VBScript maliciosa simples # ------------------------------------------------- $vbsPath = "$env:Tempmalicious.vbs" @" Set objShell = CreateObject("WScript.Shell") objShell.Run "cmd.exe /c echo pwned > $env:Temppwned.txt", 0, False "@ | Set-Content -Path $vbsPath -Encoding ASCII # ------------------------------------------------- # Passo 4: Executar o VBScript silenciosamente usando cscript //nologo # ------------------------------------------------- & $dst -Command "cscript //nologo `"$vbsPath`"" # ------------------------------------------------- # Fim da simulação # ------------------------------------------------- -
Comandos de Limpeza:
# Remover o binário PowerShell renomeado Remove-Item -Path "$env:Temppowershell_renamed.exe" -Force -ErrorAction SilentlyContinue # Excluir o arquivo VBScript malicioso Remove-Item -Path "$env:Tempmalicious.vbs" -Force -ErrorAction SilentlyContinue # Remover evidência de execução Remove-Item -Path "$env:Temppwned.txt" -Force -ErrorAction SilentlyContinue