Código malicioso em @subql/common 5.8.3 rouba credenciais e abre backdoor
A versão 5.8.3 do pacote npm @subql/common, publicada em 5 de outubro de 2026 após adulteração do workflow de CI do repositório subquery/subql, rouba credenciais de AWS, GitHub, Kubernetes e Vault e aceita comandos por shell reverso. O advisory GHSA-9333-3c4x-x3h5 foi publicado e a versão foi removida do npm por volta de 12:46 UTC, segundo a GMO Flatt Security, mas a dist-tag 'redteam' ainda aponta para a versão canário do atacante. Fixe a 5.8.2, remova a 5.8.3, bloqueie ci-artifacts.dev e rotacione credenciais de ambientes que instalaram ou importaram o pacote.
O que aconteceu
A versão 5.8.3 do pacote npm @subql/common, do ecossistema SubQuery, foi publicada com código malicioso em 5 de outubro de 2026. O atacante adulterou o fluxo oficial de publicação e o npm registrou o release como Trusted Publisher. O código rouba credenciais e permite controle remoto; a versão foi removida do npm no mesmo dia.
Por que importa
A biblioteca é dependência compartilhada: a StepSecurity identificou 19 de 77 pacotes @subql com caminho para a versão maliciosa, sem novo release dos pacotes pais. Segundo o advisory do GitHub, qualquer computador com o pacote instalado ou em execução deve ser considerado totalmente comprometido, com credenciais de nuvem, tokens e chaves expostos.
O que fazer
Fixe @subql/common na 5.8.2 e bloqueie a 5.8.3 e o domínio ci-artifacts.dev nos controles de dependência. Inventarie máquinas e pipelines que instalaram ou importaram o pacote, remova-o e rotacione todas as credenciais (AWS, GitHub, SSH, Kubernetes, Vault, arquivos .env e .npmrc) de outro computador. Verifique a persistência: processo manifest-cache.js --warm e o arquivo /tmp/tmp.ts018051808.lock.
Para o time técnico
- Afetados
- SubQuery @subql/common (npm) e pacotes downstream @subql/* · @subql/common 5.8.3 e 5.8.3-onf-rt1 (canário do atacante, sem payload recuperado; a dist-tag 'redteam' ainda aponta para ela). Downstream que resolve para 5.8.3: @subql/cli 6.6.3 e @subql/node-core 19.3.1 (~5.8.2), @subql/query 2.25.0 (~5.8.1), @subql/node-ethereum 6.5.0 (^5.8.2). Caminhos indiretos via @subql/node-core: @subql/node 6.4.6, @subql/node-solana 6.3.5, @subql/node-starknet 6.1.0 (StepSecurity). Fixar o pacote pai não fixa suas dependências.
- Exploração
- Código malicioso confirmado por análise estática; Amazon Inspector creditado como finder no OSV (MAL-2026-17571), StepSecurity decodificou o payload sem executá-lo e GMO Flatt Security detalhou infostealer e agente C2. Sem relato de exploração contra vítimas específicas nas fontes. Advisory GHSA-9333-3c4x-x3h5 e registro OSV publicados em 5 de outubro de 2026.
- Correção
- Versão segura conhecida: @subql/common 5.8.2 (npm 'latest'). A 5.8.3 foi removida do npm por volta de 12:46 UTC de 5 de outubro (estimativa da GMO Flatt Security pelo timestamp do registro). Mitigações: bloquear ci-artifacts.dev, remover 5.8.3 e 5.8.3-onf-rt1, fixar a árvore de dependências, rotacionar credenciais de outro computador, encerrar processos manifest-cache.js --warm e considerar shell reverso ativo.
- Vetor
- Comprometimento do repositório GitHub subquery/subql: o atacante obteve acesso de push, adulterou .github/workflows/publish.yml para baixar https://ci-artifacts.dev/pkg/@subql-common-5.8.3.tgz e substituir o pacote legítimo, e publicou 5.8.3 via GitHub Actions OIDC (Trusted Publisher). Entrada: postinstall 'node ./dist/project/readers/manifest-cache.js' executa em todo npm install, sem require; o payload também inicia na importação, pois dist/index.js re-exporta manifest-cache e ManifestCacheReader.warm spawna processo node desanexado com --warm. Desabilitar scripts de instalação não basta (StepSecurity).
- Mais detalhes
- Payload (Amazon Inspector): ~60 KB em base64 (MANIFEST_CACHE_SEED) decodificados com XOR 0x5a e zlib.gunzipSync, avaliados via new Function; source map alterado para esconder o dispatcher. Comportamento (GMO Flatt Security): daemonização com processo desanexado e lock file; enumera e lê AWS SSM Parameter Store e Secrets Manager em todas as regiões; rouba tokens GitHub (GITHUB_TOKEN, PAT ghp_ e gho_), chaves SSH.env.npmrc, config Docker, Kubernetes e Vault; exclui ambientes em idioma russo; toolkit embutido com scripts AES-256-GCM; injeção em workflows do GitHub Actions; chamadas de API com AWS Signature V4; shell reverso. Linha do tempo UTC de 5/10/2026 (StepSecurity e Flatt): 11:23 branch chore/ci-audit-55 criada; 11:24:40 publicação de 5.8.3-onf-rt1; 11:52 commit 506863d '[release] 5.8.3' sob o nome Ian He <ian@onfinality.io>, sem assinatura GPG, enquanto commits legítimos anteriores são assinados (último em 1/4/2026); 11:56:29 publicação de 5.8.3; ~12:46 remoção do npm. StepSecurity abriu o issue #3047 no repositório SubQuery. CWE-506 no OSV. A 5.8.2 foi publicada em 20 de novembro de 2025.
Indicadores (IoCs)
- ci-artifacts.dev
- https://ci-artifacts.dev/pkg/@subql-common-5.8.3.tgz
Linha do tempo
Advisory do GitHub e análises detalham o ataque ao ecossistema SubQuery.
Fontes 5 fontes
- Malicious code in @subql/common (GHSA-9333-3c4x-x3h5) GitHub
- SubQuery Ecosystem Compromise: Hidden Credential Theft and Backdoors StepSecurity
- Software Supply Chain Attack on @subql/common: Overview and Response Guidance GMO Flatt Security
- MAL-2026-17571 OSV
- [security] Malicious release @subql/common@5.8.3 (issue #3047) GitHub / SubQuery


