Aikido

Mini Shai-Hulud ataca novamente: worm npm compromete centenas de pacotes @antv

Escrito por
Sooraj Shah

Mini Shai-Hulud está de volta.

A campanha de supply chain do npm que estamos rastreando desde abril lançou outra onda, desta vez comprometendo pacotes importantes da Alibaba's @antv suite, juntamente com echarts-for-react e timeago.js. Nossa equipe de malware detectou um grande cluster de versões de pacotes comprometidas em centenas de nomes de pacotes npm.

Uma vez instalado, o payload raspa Secrets em texto puro da memória do runner CI/CD, rouba credenciais locais de Cloud e SSH, e implanta backdoors em configurações do VS Code e Claude Code. Mais de 2.700 repositórios GitHub maliciosos já foram criados usando tokens roubados.

O payload é executado no momento da instalação. Quando qualquer scanner sinaliza o pacote, o código malicioso já foi executado em todas as máquinas que o instalaram. Entramos em mais detalhes sobre a importância disso na seção de detecção abaixo.

Se você tem acompanhado nossa cobertura anterior da onda SAP e da onda TanStack, esta é a mesma campanha que continua a se expandir.

O que aconteceu

Nossa equipe de malware detectou um surto de publicações maliciosas em 19 de maio. Quando terminamos de triar o primeiro lote, mais ainda estavam chegando.

A maior parte da atividade teve como alvo @antv pacotes, um conjunto amplamente utilizado de bibliotecas JavaScript para visualização de dados, gráficos, mapeamento e criação de tabelas. Se você construiu dashboards, gráficos ou UIs com muitos dados em um projeto JavaScript, há uma grande chance de que algo desta lista esteja na sua árvore de dependências. O conjunto afetado inclui @antv/g2, @antv/g6, @antv/x6, @antv/l7, @antv/s2, @antv/f2, @antv/g, @antv/g2plot, @antv/graphin, e @antv/data-set, juntamente com pacotes fora do namespace, como echarts-for-react, timeago.j, size-sensor, e canvas-nest.js.

Além @antv, a onda também atingiu pacotes sob @lint-md, @openclaw-cn, e @starmind, além de vários pacotes npm sem escopo.

echarts-for-react sozinho tem aproximadamente 1,1 milhão de downloads semanais. Uma única versão comprometida de um pacote nessa escala pode atingir muitos ambientes rapidamente.

Isso segue o mesmo padrão que vimos em ondas anteriores. O atacante não precisa comprometer centenas de contas individuais. Eles obtêm acesso a uma conta de mantenedor com amplos direitos de publicação e distribuem versões maliciosas para tudo o que essa conta pode alcançar.

Como o payload funciona

A abordagem técnica é consistente com variantes anteriores do Mini Shai-Hulud, com algumas diferenças na nomenclatura de arquivos e na infraestrutura.

Um payload index.js de nível raiz é injetado no tarball do pacote. O package.json é modificado para executá-lo durante a instalação:

"preinstall": "bun run index.js"

O arquivo index.js é fortemente ofuscado, utilizando tabelas de consulta de string-array, decodificação em tempo de execução e um descriptografador personalizado para ocultar strings sensíveis da análise estática.

O payload também adiciona uma dependência opcional que espelha a técnica que documentamos na onda TanStack:

{
  "optionalDependencies": {
    "@antv/setup": "github:antvis/G2#7cb42f57561c321ecb09b4552802ae0ac55b3a7a"
  }
}

Isso é por vezes chamado de dependência exótica, um github: referência prefixada que aponta diretamente para um repositório e commit do GitHub em vez de um pacote publicado no npm. Isso oferece ao atacante um segundo caminho de execução durante a instalação sem enviar o payload completo no tarball do npm. O npm executa scripts de ciclo de vida para dependências Git durante a instalação, então um pacote que parece uma dependência normal pode executar silenciosamente o payload de um repositório completamente separado.

O que o payload rouba

O payload tem como alvo máquinas de desenvolvedores e ambientes CI/CD. Ele procura por:

  • tokens do GitHub
  • tokens npm
  • tokens OIDC do GitHub Actions
  • credenciais AWS e metadados de instância
  • arquivos de conta de serviço Kubernetes
  • Tokens do HashiCorp Vault
  • Chaves SSH e chaves privadas
  • Arquivos de autenticação Docker
  • Strings de conexão de banco de dados
  • Variáveis de ambiente e Secrets do sistema de arquivos local

Os dados roubados são criptografados antes da exfiltração, o que dificulta a recuperação de dados em texto simples (plaintext) roubados de capturas de rede. O endpoint de exfiltração é disfarçado como uma URL de telemetria, o que pode ser fácil de ignorar nos logs do sistema de build.

O payload também inclui um fallback baseado no GitHub. Se ele obtiver um token GitHub utilizável, pode criar um repositório na conta da vítima e fazer commit dos dados roubados lá. Ao longo de toda a campanha Mini Shai-Hulud, mais de 2.700 repositórios GitHub maliciosos foram criados usando tokens roubados, empregando a mesma nomenclatura com tema Dune e marcadores de campanha invertidos que documentamos em ondas anteriores.

Persistência

Esta é a parte que torna a limpeza mais difícil do que nas ondas anteriores.

O payload escreve em .vscode/tasks.json e .claude/settings.json, plantando backdoors nas configurações do VS Code e do Claude Code. Isso significa que remover o pacote malicioso do seu lockfile não é suficiente. Se esses arquivos não forem verificados e limpos, o atacante mantém uma base na máquina do desenvolvedor mesmo após a reversão da dependência.

Propagação

O payload ainda contém a lógica de propagação npm que torna o Mini Shai-Hulud um worm, e vale a pena repetir como isso funciona porque explica a velocidade dessas ondas.

Após roubar tokens npm, ele os valida contra o registro npm, enumera os pacotes que o proprietário do token pode publicar, baixa os tarballs dos pacotes, injeta o payload malicioso, adiciona um preinstall hook, atualiza a versão e republica. O malware não está apenas roubando Secrets da vítima atual. Ele está usando o acesso de publicação da vítima para comprometer o próximo conjunto de pacotes.

É assim que a campanha continua crescendo. Cada conta comprometida se torna o ponto de entrada para a próxima onda, e mantenedores com amplo acesso de publicação dão ao worm muito espaço para se espalhar.

O que mudou em relação à onda TanStack

O modelo central é o mesmo: execução em tempo de instalação, payloads baseados em Bun, JavaScript ofuscado, coleta de credenciais, abuso de GitHub e republicação npm. Se você leu nossos artigos anteriores, a arquitetura parecerá familiar.

O @antv as amostras usam um nível raiz index.js em vez do router_init.js que vimos nos pacotes TanStack. A infraestrutura C2 mudou. O payload é um pouco menor. A persistência através de configurações de ferramentas IDE e AI é nova e merece atenção, porque significa que o atacante está pensando no que acontece depois que o comprometimento inicial é limpo.

Esta é a terceira grande onda que rastreamos. Ela passou de um punhado de pacotes SAP em abril, para 169 pacotes na onda TanStack, para um conjunto muito maior de pacotes agora. Cada onda tem sido mais rápida e abrangente que a anterior.

Por que a detecção rápida não é suficiente

Tem havido muita ênfase na rapidez com que pacotes maliciosos podem ser sinalizados após sua publicação. Minutos, em alguns casos. Isso parece reconfortante, mas não aborda o problema.

Esses pacotes executam código no momento da instalação. Um preinstall hook é executado durante npm install, antes mesmo de o pacote ser totalmente descompactado. Se um desenvolvedor ou um CI runner instalar uma versão comprometida na janela entre a publicação e a detecção, o payload já terá sido executado e as credenciais já terão saído da máquina. O dano é feito antes que qualquer scanner possa sinalizar o pacote.

A detecção rápida ajuda na resposta a incidentes. Ela informa quais versões evitar daqui para frente. Mas não protege os desenvolvedores e sistemas de build que instalaram o pacote durante esses primeiros minutos.

A defesa mais eficaz é nunca instalar uma versão de pacote que não teve tempo de ser verificada. Bloquear pacotes por idade, recusando-se a instalar qualquer versão publicada há menos de um certo número de horas ou dias, fecha a janela que as abordagens baseadas em detecção deixam aberta. É uma política simples e é a que realmente impede a execução do payload.

Detecção e mitigação

Se você não estava bloqueando novos pacotes por idade e uma versão comprometida entrou em seu ambiente, comece com lockfiles e caches de pacotes.

Pesquise por namespaces e pacotes afetados:

  • @antv/
  • @lint-md/
  • @openclaw-cn/
  • @starmind/
  • echarts-for-react
  • timeago.js
  • size-sensor
  • canvas-nest.js

Procure por arquivos de payload e marcadores de dependência:

  • preinstall hook contendo bun run index.js
  • @antv/setup
  • github:antvis/G2#7cb42f57561c321ecb09b4552802ae0ac55b3a7a

Verificar artefatos de persistência em máquinas de desenvolvedores:

  • .vscode/tasks.json para definições de tarefas inesperadas
  • .claude/settings.json para alterações de configuração inesperadas

Bloquear tráfego de rede de saída para:

  • t.m-kosche.com

Procure nos logs de CI por:

  • Execução inesperada de Bun durante npm install
  • Falhas de dependência opcionais envolvendo @antv/setup
  • Conexões de saída durante a instalação de dependências
  • atividade de publicação npm de fluxos de trabalho que não deveriam ter publicado
  • solicitações de token OIDC do GitHub Actions durante etapas inesperadas

Se uma versão de pacote comprometida foi executada em uma máquina de desenvolvedor ou runner de CI, rotacione os Secrets desse ambiente. Não pare nos tokens npm.

Rotacione ou revise:

  • tokens npm e acesso de publicação de pacotes
  • PATs do GitHub e Secrets do GitHub Actions
  • Credenciais AWS
  • Tokens de conta de serviço Kubernetes
  • tokens do Vault
  • Chaves SSH
  • Credenciais Docker
  • Secrets de Deployment

Também audite as publicações recentes do npm e as execuções do GitHub Actions. Como observamos em nossa análise do TanStack: um registro de proveniência válido não prova que a build foi segura.

Indicadores de comprometimento

Indicadores de rede:

  • t[.]m-kosche[.]com

Marcadores de pacote:

  • @antv/setup
  • github:antvis/G2#7cb42f57561c321ecb09b4552802ae0ac55b3a7a
  • preinstall execução de script bun run index.js
  • Arquivo de payload de nível raiz incluído fora do conteúdo normal do pacote

Artefatos de persistência:

  • .vscode/tasks.json
  • .claude/settings.json

Marcadores de campanha:

  • Nomes de repositórios com tema Dune no GitHub (mais de 2.700 observados)
  • Revertido Shai-Hulud strings em descrições de repositórios
  • resultados/ diretórios em repositórios criados por atacantes

Indicadores previamente documentados das ondas SAP e TanStack ainda se aplicam. Veja nossa análise sobre TanStack para a lista completa de IOCs de ondas anteriores.

Conclusão

Mini Shai-Hulud continua a se expandir ainda mais no ecossistema npm. Cada onda tem sido maior que a anterior, e os @antv pacotes trazem ferramentas de visualização de dados para o conjunto afetado, juntamente com os pacotes de roteamento, corporativos e de IA de ondas anteriores. A adição de persistência de ferramentas IDE e de IA significa que remover a dependência maliciosa não é mais suficiente para a limpeza.

Se algum dos pacotes afetados foi executado em seu ambiente, considere a máquina ou o runner como expostos até que os Secrets sejam rotacionados, artefatos de persistência sejam removidos e a atividade de publicação recente tenha sido revisada.

Como a Aikido protege contra isso

Se é Aikido , verifique o seu feed central e filtre por problemas de malware. Isto será apresentado como um problema crítico com classificação 100/100. Aikido todas as noites, mas recomendamos que inicie uma nova verificação manual agora. Adicionámos uma regra de deteção para procurar os indicadores de comprometimento especificamente relacionados com esta campanha. Também treinámos a nossa IA de malware para reconhecer os pacotes afetados. A regra rastreia especificamente dependências exóticas, ganchos de ciclo de vida e técnicas de execução bun relacionadas com esta campanha.

Para prevenção efetiva, não apenas detecção após o ocorrido, a Aikido oferece duas camadas que abordam diretamente o problema no momento da instalação.

Aikido Safe Chain (código aberto) intercepta comandos npm, pnpm e yarn e verifica pacotes contra Aikido Intel antes da instalação. Ele bloqueia pacotes comprometidos antes que possam executar hooks de instalação. Se um pacote é sinalizado ou muito novo para ser confiável, ele não é instalado.

O Devices Protection da Aikido oferece às equipes de segurança visibilidade em tempo real sobre as dependências e extensões executadas nas máquinas dos desenvolvedores em toda a organização. Ele impõe políticas como o bloqueio de pacotes por idade, para que uma versão publicada minutos atrás nunca chegue a uma máquina de desenvolvedor. Quando algo consegue passar, ele permite conter o raio de impacto instantaneamente.

Se você ainda não é um usuário Aikido, você 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.

Apêndice: Pacotes e versões afetados

Lista atual de pacotes e versões que nossa equipe identificou em todas as ondas Mini Shai-Hulud. Esta lista inclui pacotes das ondas SAP, TanStack e @antv.

  • @antv/a8: 0.1.1, 0.2.1
  • @antv/adjust: 0.3.5, 0.4.5
  • @antv/algorithm: 0.2.26, 0.3.26
  • @antv/async-hook: 2.3.9, 2.4.9
  • @antv/attr: 0.4.5, 0.5.5
  • @antv/ava: 3.5.1, 3.6.1
  • @antv/ava-react: 3.4.2, 3.5.2
  • @antv/awards: 0.1.9, 0.2.9
  • @antv/calendar-heatmap: 1.2.2, 1.3.2
  • @antv/chart-linter: 1.2.6, 1.3.6
  • @antv/chart-node-g6: 0.1.4, 0.2.4
  • @antv/chart-visualization-skills: 0.2.3, 0.3.3
  • @antv/ckb: 2.1.4, 2.2.4
  • @antv/color-schema: 0.3.3, 0.4.3
  • @antv/color-util: 2.1.6, 2.2.6
  • @antv/component: 2.2.11, 2.3.11
  • @antv/coord: 0.5.7, 0.6.7
  • @antv/d3-color: 1.1.0, 1.2.0
  • @antv/d3-interpolate: 1.1.3, 1.2.3
  • @antv/data-samples: 1.1.1, 1.2.1
  • @antv/data-set: 0.12.8, 0.13.8
  • @antv/data-wizard: 2.1.4, 2.2.4
  • @antv/dipper-component: 0.1.4, 0.2.4
  • @antv/dipper-hooks: 0.3.1, 0.4.1
  • @antv/dipper-map: 1.1.10, 1.2.10
  • @antv/dom-util: 2.1.4, 2.2.4
  • @antv/dumi-theme-antv: 0.10.4, 0.9.4
  • @antv/dw-analyzer: 1.2.5, 1.3.5
  • @antv/dw-random: 1.2.7, 1.3.7
  • @antv/dw-transform: 1.2.7, 1.3.7
  • @antv/dw-util: 1.2.4, 1.3.4
  • @antv/event-emitter: 0.2.3, 0.3.3
  • @antv/expr: 1.1.2, 1.2.2
  • @antv/f-charts: 0.1.0, 0.2.0
  • @antv/f-engine: 1.11.0, 1.12.0
  • @antv/f-lottie: 1.11.0, 1.12.0
  • @antv/f-my: 1.11.0, 1.12.0
  • @antv/f-react: 1.11.0, 1.12.0
  • @antv/f-test-utils: 1.1.9, 1.2.9
  • @antv/f-vue: 1.11.0, 1.12.0
  • @antv/f-wx: 1.11.0, 1.12.0
  • @antv/f2: 5.15.0, 5.16.0
  • @antv/f2-algorithm: 5.8.0, 5.9.0
  • @antv/f2-canvas: 1.1.5, 1.2.5
  • @antv/f2-context: 0.1.1, 0.2.1
  • @antv/f2-graphic: 0.1.16, 0.2.16
  • @antv/f2-my: 4.1.52, 4.2.52
  • @antv/f2-react: 5.15.0, 5.16.0
  • @antv/f2-site: 4.1.42, 4.2.42
  • @antv/f2-vue: 4.1.33, 4.2.33
  • @antv/f2-wordcloud: 5.15.0, 5.16.0
  • @antv/f2-wx: 4.1.51, 4.2.51
  • @antv/f6: 0.1.19, 0.2.19
  • @antv/f6-alipay: 0.1.7, 0.2.7
  • @antv/f6-core: 0.1.2, 0.2.2
  • @antv/f6-element: 0.1.1, 0.2.1
  • @antv/f6-hammerjs: 0.1.2, 0.2.2
  • @antv/f6-plugin: 1.1.6, 1.2.6
  • @antv/f6-ui: 1.1.3, 1.2.3
  • @antv/f6-wx: 0.1.7, 0.2.7
  • @antv/g: 6.4.1, 6.5.1
  • @antv/g-base: 0.6.16, 0.7.16
  • @antv/g-camera-api: 2.1.45, 2.2.45
  • @antv/g-canvas: 2.3.0, 2.4.0
  • @antv/g-canvaskit: 1.2.1, 1.3.1
  • @antv/g-compat: 1.1.11, 1.2.11
  • @antv/g-components: 2.1.42, 2.2.42
  • @antv/g-css-layout-api: 1.1.38, 1.2.38
  • @antv/g-css-typed-om-api: 1.1.38, 1.2.38
  • @antv/g-device-api: 1.7.13, 1.8.13
  • @antv/g-dom-mutation-observer-api: 2.1.42, 2.2.42
  • @antv/g-gesture: 3.1.42, 3.2.42
  • @antv/g-image-exporter: 1.1.42, 1.2.42
  • @antv/g-layout-blocklike: 1.8.49, 1.9.49
  • @antv/g-lite: 2.8.0, 2.9.0
  • @antv/g-lottie-player: 1.2.1, 1.3.1
  • @antv/g-math: 3.2.0, 3.3.0
  • @antv/g-mobile: 1.2.5, 1.3.5
  • @antv/g-mobile-canvas: 1.2.1, 1.3.1
  • @antv/g-mobile-canvas-element: 1.1.42, 1.2.42
  • @antv/g-mobile-svg: 1.2.1, 1.3.1
  • @antv/g-mobile-webgl: 1.2.1, 1.3.1
  • @antv/g-pattern: 2.1.42, 2.2.42
  • @antv/g-perf: 1.1.0, 1.2.0
  • @antv/g-plugin-3d: 2.2.1, 2.3.1
  • @antv/g-plugin-a11y: 1.5.1, 1.6.1
  • @antv/g-plugin-annotation: 1.3.0, 1.4.0
  • @antv/g-plugin-box2d: 2.2.1, 2.3.1
  • @antv/g-plugin-canvas-path-generator: 2.2.26, 2.3.26
  • @antv/g-plugin-canvas-picker: 2.4.1, 2.5.1
  • @antv/g-plugin-canvas-renderer: 2.6.1, 2.7.1
  • @antv/g-plugin-canvaskit-renderer: 2.4.1, 2.5.1
  • @antv/g-plugin-control: 2.2.1, 2.3.1
  • @antv/g-plugin-css-select: 2.2.1, 2.3.1
  • @antv/g-plugin-device-renderer: 2.7.1, 2.8.1
  • @antv/g-plugin-dom-interaction: 2.2.31, 2.3.31
  • @antv/g-plugin-dragndrop: 2.2.1, 2.3.1
  • @antv/g-plugin-gesture: 2.2.1, 2.3.1
  • @antv/g-plugin-gpgpu: 1.10.20, 1.11.20
  • @antv/g-plugin-html-renderer: 2.4.1, 2.5.1
  • @antv/g-plugin-image-loader: 2.4.1, 2.5.1
  • @antv/g-plugin-matterjs: 2.2.1, 2.3.1
  • @antv/g-plugin-mobile-interaction: 1.1.42, 1.2.42
  • @antv/g-plugin-physx: 2.2.1, 2.3.1
  • @antv/g-plugin-rough-canvas-renderer: 2.2.1, 2.3.1
  • @antv/g-plugin-rough-svg-renderer: 2.2.1, 2.3.1
  • @antv/g-plugin-svg-picker: 2.1.46, 2.2.46
  • @antv/g-plugin-svg-renderer: 2.5.1, 2.6.1
  • @antv/g-plugin-webgl-device: 1.10.17, 1.11.17
  • @antv/g-plugin-webgl-renderer: 1.1.26, 1.2.26
  • @antv/g-plugin-webgpu-device: 1.10.17, 1.11.17
  • @antv/g-plugin-yoga: 2.4.1, 2.5.1
  • @antv/g-plugin-zdog-canvas-renderer: 2.2.1, 2.3.1
  • @antv/g-plugin-zdog-svg-renderer: 2.2.1, 2.3.1
  • @antv/g-shader-components: 2.1.0, 2.2.0
  • @antv/g-svg: 2.2.1, 2.3.1
  • @antv/g-web-animations-api: 2.2.32, 2.3.32
  • @antv/g-web-components: 2.2.1, 2.3.1
  • @antv/g-webgl: 2.2.1, 2.3.1
  • @antv/g-webgl-compute: 0.1.1, 0.2.1
  • @antv/g-webgpu: 2.2.1, 2.3.1
  • @antv/g-webgpu-compiler: 0.8.2, 0.9.2
  • @antv/g-webgpu-core: 0.8.2, 0.9.2
  • @antv/g-webgpu-engine: 0.8.2, 0.9.2
  • @antv/g-webgpu-raytracer: 0.6.1, 0.7.1
  • @antv/g-webgpu-unitchart: 0.6.1, 0.7.1
  • @antv/g2: 5.5.8, 5.6.8
  • @antv/g2-brush: 0.1.2, 0.2.2
  • @antv/g2-extension-3d: 0.3.0, 0.4.0
  • @antv/g2-extension-ava: 0.3.0, 0.4.0
  • @antv/g2-extension-plot: 0.3.2, 0.4.2
  • @antv/g2-plugin-slider: 2.2.1, 2.3.1
  • @antv/g2-ssr: 0.3.0, 0.4.0
  • @antv/g2plot: 2.5.35, 2.6.35
  • @antv/g2plot-schemas: 1.3.2, 1.4.2
  • @antv/g6: 5.2.1, 5.3.1
  • @antv/g6-alipay: 0.1.1, 0.2.1
  • @antv/g6-cli: 0.1.4, 0.2.4
  • @antv/g6-core: 0.10.24, 0.9.24
  • @antv/g6-editor: 1.3.0, 1.4.0
  • @antv/g6-element: 0.10.25, 0.9.25
  • @antv/g6-extension-3d: 0.2.23, 0.3.23
  • @antv/g6-extension-react: 0.3.7, 0.4.7
  • @antv/g6-mobile: 0.2.2, 0.3.2
  • @antv/g6-pc: 0.10.25, 0.9.25
  • @antv/g6-plugin: 0.10.25, 0.9.25
  • @antv/g6-plugin-map-view: 0.1.4, 0.2.4
  • @antv/g6-plugins: 1.1.9, 1.2.9
  • @antv/g6-react-node: 1.5.8, 1.6.8
  • @antv/g6-ssr: 0.2.1, 0.3.1
  • @antv/g6-wx: 0.1.1, 0.2.1
  • @antv/gatsby-theme: 0.2.0, 0.3.0
  • @antv/geo-coord: 1.1.8, 1.2.8
  • @antv/gi-assets-advance: 2.6.22, 2.7.22
  • @antv/gi-assets-algorithm: 2.4.19, 2.5.19
  • @antv/gi-assets-basic: 2.5.40, 2.6.40
  • @antv/gi-assets-galaxybase: 1.3.15, 1.4.15
  • @antv/gi-assets-graphscope: 2.2.15, 2.3.15
  • @antv/gi-assets-hugegraph: 1.2.15, 1.3.15
  • @antv/gi-assets-janusgraph: 1.2.15, 1.3.15
  • @antv/gi-assets-neo4j: 2.2.15, 2.3.15
  • @antv/gi-assets-scene: 2.3.21, 2.4.21
  • @antv/gi-assets-tugraph: 2.2.15, 2.3.15
  • @antv/gi-assets-tugraph-analytics: 0.3.15, 0.4.15
  • @antv/gi-assets-xlab: 0.2.30, 0.3.30
  • @antv/gi-cli: 1.3.11, 1.4.11
  • @antv/gi-common-components: 1.4.16, 1.5.16
  • @antv/gi-mock-data: 1.1.5, 1.2.5
  • @antv/gi-public-data: 1.1.1, 1.2.1
  • @antv/gi-sdk: 3.1.0, 3.2.0
  • @antv/gi-sdk-app: 1.3.10, 1.4.10
  • @antv/gi-theme-antd: 0.7.11, 0.8.11
  • @antv/github-config-cli: 0.2.0, 0.3.0
  • @antv/gl-matrix: 2.8.1, 2.9.1
  • @antv/gpt-vis: 1.1.0, 1.2.0
  • @antv/gpt-vis-ssr: 0.4.7, 0.5.7
  • @antv/graphin: 3.1.5, 3.2.5
  • @antv/graphin-components: 2.5.1, 2.6.1
  • @antv/graphin-graphscope: 1.1.5, 1.2.5
  • @antv/graphin-icons: 1.1.0, 1.2.0
  • @antv/graphlib: 2.1.4, 2.2.4
  • @antv/hierarchy: 0.8.1, 0.9.1
  • @antv/infographic: 0.3.19, 0.4.19
  • @antv/insight-component: 1.1.0, 1.2.0
  • @antv/interaction: 0.2.5, 0.3.5
  • @antv/istanbul: 0.1.0, 0.2.0
  • @antv/knowledge: 1.2.4, 1.3.4
  • @antv/l7: 2.26.10, 2.27.10
  • @antv/l7-component: 2.26.10, 2.27.10
  • @antv/l7-composite-layers: 0.18.1, 0.19.1
  • @antv/l7-core: 2.26.10, 2.27.10
  • @antv/l7-district: 2.4.12, 2.5.12
  • @antv/l7-draw: 3.2.5, 3.3.5
  • @antv/l7-editor: 1.2.13, 1.3.13
  • @antv/l7-extension-g-layer: 1.1.0, 1.2.0
  • @antv/l7-layers: 2.26.10, 2.27.10
  • @antv/l7-leaflet: 1.1.2, 1.2.2
  • @antv/l7-map: 2.26.10, 2.27.10
  • @antv/l7-mapkit: 0.6.0, 0.7.0
  • @antv/l7-maps: 2.26.10, 2.27.10
  • @antv/l7-mini: 2.21.8, 2.22.8
  • @antv/l7-pass: 1.1.0, 1.2.0
  • @antv/l7-react: 2.5.3, 2.6.3
  • @antv/l7-renderer: 2.26.10, 2.27.10
  • @antv/l7-scene: 2.26.10, 2.27.10
  • @antv/l7-source: 2.26.10, 2.27.10
  • @antv/l7-three: 2.26.10, 2.27.10
  • @antv/l7-utils: 2.26.10, 2.27.10
  • @antv/l7plot: 0.6.11, 0.7.11
  • @antv/l7plot-component: 0.1.11, 0.2.11
  • @antv/larkmap: 1.6.1, 1.7.1
  • @antv/layout-gpu: 1.2.7, 1.3.7
  • @antv/layout-wasm: 1.5.2, 1.6.2
  • @antv/li-aiearth-assets: 0.5.7, 0.6.7
  • @antv/li-analysis-assets: 1.10.1, 1.11.1
  • @antv/li-core-assets: 1.4.7, 1.5.7
  • @antv/li-editor: 1.7.1, 1.8.1
  • @antv/li-p2: 1.10.2, 1.9.2
  • @antv/li-sam-assets: 0.2.4, 0.3.4
  • @antv/li-sdk: 1.6.1, 1.7.1
  • @antv/lite-insight: 2.2.1, 2.3.1
  • @antv/matrix-util: 3.1.4, 3.2.4
  • @antv/mcp-server-antv: 0.2.8, 0.3.8
  • @antv/mcp-server-chart: 0.10.10, 0.11.10
  • @antv/my-f2: 2.2.7, 2.3.7
  • @antv/my-f2-pc: 0.2.1, 0.3.1
  • @antv/narrative-text-editor: 0.3.20, 0.4.20
  • @antv/narrative-text-schema: 0.4.7, 0.5.7
  • @antv/narrative-text-vis: 0.4.16, 0.5.16
  • @antv/path-util: 3.1.1, 3.2.1
  • @antv/react-g: 2.2.1, 2.3.1
  • @antv/s2: 2.8.1, 2.9.1
  • @antv/s2-react: 2.4.1, 2.5.1
  • @antv/s2-react-components: 2.2.2, 2.3.2
  • @antv/s2-ssr: 0.2.1, 0.3.1
  • @antv/s2-vue: 2.3.0, 2.4.0
  • @antv/sam: 0.3.0, 0.4.0
  • @antv/scale: 0.6.2, 0.7.2
  • @antv/semantic-release-pnpm: 1.1.4, 1.2.4
  • @antv/smart-color: 0.3.1, 0.4.1
  • @antv/stat: 0.1.2, 0.2.2
  • @antv/t8: 0.4.0, 0.5.0
  • @antv/thumbnails: 2.1.0, 2.2.0
  • @antv/thumbnails-component: 2.1.0, 2.2.0
  • @antv/torch: 1.1.6, 1.2.6
  • @antv/translator: 1.1.1, 1.2.1
  • @antv/util: 3.4.11, 3.5.11
  • @antv/vendor: 1.1.11, 1.2.11
  • @antv/vis-predict-engine: 0.2.1, 0.3.1
  • @antv/webgpu-graph: 1.1.0, 1.2.0
  • @antv/word-scale-chart: 0.4.4, 0.5.4
  • @antv/wx-f2: 2.2.1, 2.3.1
  • @antv/x6: 3.2.7, 3.3.7
  • @antv/x6-angular-shape: 3.1.1, 3.2.1
  • @antv/x6-common: 2.1.17, 2.2.17
  • @antv/x6-components: 0.11.7, 0.12.7
  • @antv/x6-geometry: 2.1.5, 2.2.5
  • @antv/x6-plugin-clipboard: 2.2.6, 2.3.6
  • @antv/x6-plugin-dnd: 2.2.1, 2.3.1
  • @antv/x6-plugin-export: 2.2.6, 2.3.6
  • @antv/x6-plugin-history: 2.3.4, 2.4.4
  • @antv/x6-plugin-keyboard: 2.3.3, 2.4.3
  • @antv/x6-plugin-minimap: 2.1.7, 2.2.7
  • @antv/x6-plugin-scroller: 2.1.10, 2.2.10
  • @antv/x6-plugin-selection: 2.3.2, 2.4.2
  • @antv/x6-plugin-snapline: 2.2.7, 2.3.7
  • @antv/x6-plugin-stencil: 2.2.5, 2.3.5
  • @antv/x6-plugin-transform: 2.2.8, 2.3.8
  • @antv/x6-react: 0.2.26, 0.3.26
  • @antv/x6-react-components: 2.1.9, 2.2.9
  • @antv/x6-react-shape: 3.1.1, 3.2.1
  • @antv/x6-vector: 1.5.2, 1.6.2
  • @antv/x6-vue-shape: 3.1.2, 3.2.2
  • @antv/x6-vue3-shape: 1.1.0, 1.2.0
  • @antv/xflow: 2.2.13, 2.3.13
  • @antv/xflow-core: 1.1.55, 1.2.55
  • @antv/xflow-diff: 1.1.0, 1.2.0
  • @antv/xflow-extension: 1.1.55, 1.2.55
  • @antv/xflow-hook: 1.1.55, 1.2.55
  • @beproduct/nestjs-auth: 0.1.10, 0.1.11, 0.1.12, 0.1.13, 0.1.14, 0.1.15, 0.1.16, 0.1.17, 0.1.18, 0.1.19, 0.1.2, 0.1.3, 0.1.4, 0.1.5, 0.1.6, 0.1.7, 0.1.8, 0.1.9
  • @cap-js/db-service: 2.10.1
  • @cap-js/postgres: 2.2.2
  • @cap-js/sqlite: 2.2.2
  • @dirigible-ai/sdk: 0.6.2, 0.6.3
  • @draftauth/client: 0.2.1, 0.2.2
  • @draftauth/core: 0.13.1, 0.13.2
  • @draftlab/auth: 0.24.1, 0.24.2
  • @draftlab/auth-router: 0.5.1, 0.5.2
  • @draftlab/db: 0.16.1, 0.16.2
  • @intercom/intercom-php: 5.0.2
  • @lint-md/cli: 2.1.0, 2.2.0
  • @lint-md/core: 2.1.0, 2.2.0
  • @lint-md/parser: 0.1.14, 0.2.14
  • @mesadev/rest: 0.28.3
  • @mesadev/saguaro: 0.4.22
  • @mesadev/sdk: 0.28.3
  • @mistralai/mistralai: 2.2.2, 2.2.3, 2.2.4
  • @mistralai/mistralai-azure: 1.7.1, 1.7.2, 1.7.3
  • @mistralai/mistralai-gcp: 1.7.1, 1.7.2, 1.7.3
  • @ml-toolkit-ts/preprocessing: 1.0.2, 1.0.3
  • @ml-toolkit-ts/xgboost: 1.0.3, 1.0.4
  • @openclaw-cn/cli: 1.4.1
  • @openclaw-cn/feishu: 0.2.11
  • @openclaw-cn/libsignal: 2.1.1
  • @openclaw-cn/toutiao-ops: 1.2.4
  • @opensearch-project/opensearch: 3.5.3, 3.6.2, 3.7.0, 3.8.0
  • @squawk/airport-data: 0.7.4, 0.7.5, 0.7.6, 0.7.7, 0.7.8
  • @squawk/airports: 0.6.2, 0.6.3, 0.6.4, 0.6.5, 0.6.6
  • @squawk/airspace: 0.8.1, 0.8.2, 0.8.3, 0.8.4, 0.8.5
  • @squawk/airspace-data: 0.5.3, 0.5.4, 0.5.5, 0.5.6, 0.5.7
  • @squawk/airway-data: 0.5.4, 0.5.5, 0.5.6, 0.5.7, 0.5.8
  • @squawk/airways: 0.4.2, 0.4.3, 0.4.4, 0.4.5, 0.4.6
  • @squawk/fix-data: 0.6.4, 0.6.5, 0.6.6, 0.6.7, 0.6.8
  • @squawk/fixes: 0.3.2, 0.3.3, 0.3.4, 0.3.5, 0.3.6
  • @squawk/flight-math: 0.5.4, 0.5.5, 0.5.6, 0.5.7, 0.5.8
  • @squawk/flightplan: 0.5.2, 0.5.3, 0.5.4, 0.5.5, 0.5.6
  • @squawk/geo: 0.4.4, 0.4.5, 0.4.6, 0.4.7, 0.4.8
  • @squawk/icao-registry: 0.5.2, 0.5.3, 0.5.4, 0.5.5, 0.5.6
  • @squawk/icao-registry-data: 0.8.4, 0.8.5, 0.8.6, 0.8.7, 0.8.8
  • @squawk/mcp: 0.9.1, 0.9.2, 0.9.3, 0.9.4, 0.9.5
  • @squawk/navaid-data: 0.6.4, 0.6.5, 0.6.6, 0.6.7, 0.6.8
  • @squawk/navaids: 0.4.2, 0.4.3, 0.4.4, 0.4.5, 0.4.6
  • @squawk/notams: 0.3.10, 0.3.6, 0.3.7, 0.3.8, 0.3.9
  • @squawk/procedure-data: 0.7.3, 0.7.4, 0.7.5, 0.7.6, 0.7.7
  • @squawk/procedures: 0.5.2, 0.5.3, 0.5.4, 0.5.5, 0.5.6
  • @squawk/types: 0.8.1, 0.8.2, 0.8.3, 0.8.4, 0.8.5
  • @squawk/units: 0.4.3, 0.4.4, 0.4.5, 0.4.6, 0.4.7
  • @squawk/weather: 0.5.10, 0.5.6, 0.5.7, 0.5.8, 0.5.9
  • @starmind/collector-cli: 0.3.10
  • @supersurkhet/cli: 0.0.2, 0.0.3, 0.0.4, 0.0.5, 0.0.6, 0.0.7
  • @supersurkhet/sdk: 0.0.2, 0.0.3, 0.0.4, 0.0.5, 0.0.6, 0.0.7
  • @tallyui/components: 1.0.1, 1.0.2, 1.0.3
  • @tallyui/connector-medusa: 1.0.1, 1.0.2, 1.0.3
  • @tallyui/connector-shopify: 1.0.1, 1.0.2, 1.0.3
  • @tallyui/connector-vendure: 1.0.1, 1.0.2, 1.0.3
  • @tallyui/connector-woocommerce: 1.0.1, 1.0.2, 1.0.3
  • @tallyui/core: 0.2.1, 0.2.2, 0.2.3
  • @tallyui/database: 1.0.1, 1.0.2, 1.0.3
  • @tallyui/pos: 0.1.1, 0.1.2, 0.1.3
  • @tallyui/storage-sqlite: 0.2.1, 0.2.2, 0.2.3
  • @tallyui/theme: 0.2.1, 0.2.2, 0.2.3
  • @tanstack/arktype-adapter: 1.166.12, 1.166.15
  • @tanstack/eslint-plugin-router: 1.161.12, 1.161.9
  • @tanstack/eslint-plugin-start: 0.0.4, 0.0.7
  • @tanstack/history: 1.161.12, 1.161.9
  • @tanstack/nitro-v2-vite-plugin: 1.154.12, 1.154.15
  • @tanstack/react-router: 1.169.5, 1.169.8
  • @tanstack/react-router-devtools: 1.166.16, 1.166.19
  • @tanstack/react-router-ssr-query: 1.166.15, 1.166.18
  • @tanstack/react-start: 1.167.68, 1.167.71
  • @tanstack/react-start-client: 1.166.51, 1.166.54
  • @tanstack/react-start-rsc: 0.0.47, 0.0.50
  • @tanstack/react-start-server: 1.166.55, 1.166.58
  • @tanstack/router-cli: 1.166.46, 1.166.49
  • @tanstack/router-core: 1.169.5, 1.169.8
  • @tanstack/router-devtools: 1.166.16, 1.166.19
  • @tanstack/router-devtools-core: 1.167.6, 1.167.9
  • @tanstack/router-generator: 1.166.45, 1.166.48
  • @tanstack/router-plugin: 1.167.38, 1.167.41
  • @tanstack/router-ssr-query-core: 1.168.3, 1.168.6
  • @tanstack/router-utils: 1.161.11, 1.161.14
  • @tanstack/router-vite-plugin: 1.166.53, 1.166.56
  • @tanstack/solid-router: 1.169.5, 1.169.8
  • @tanstack/solid-router-devtools: 1.166.16, 1.166.19
  • @tanstack/solid-router-ssr-query: 1.166.15, 1.166.18
  • @tanstack/solid-start: 1.167.65, 1.167.68
  • @tanstack/solid-start-client: 1.166.50, 1.166.53
  • @tanstack/solid-start-server: 1.166.54, 1.166.57
  • @tanstack/start-client-core: 1.168.5, 1.168.8
  • @tanstack/start-fn-stubs: 1.161.12, 1.161.9
  • @tanstack/start-plugin-core: 1.169.23, 1.169.26
  • @tanstack/start-server-core: 1.167.33, 1.167.36
  • @tanstack/start-static-server-functions: 1.166.44, 1.166.47
  • @tanstack/start-storage-context: 1.166.38, 1.166.41
  • @tanstack/valibot-adapter: 1.166.12, 1.166.15
  • @tanstack/virtual-file-routes: 1.161.10, 1.161.13
  • @tanstack/vue-router: 1.169.5, 1.169.8
  • @tanstack/vue-router-devtools: 1.166.16, 1.166.19
  • @tanstack/vue-router-ssr-query: 1.166.15, 1.166.18
  • @tanstack/vue-start: 1.167.61, 1.167.64
  • @tanstack/vue-start-client: 1.166.46, 1.166.49
  • @tanstack/vue-start-server: 1.166.50, 1.166.53
  • @tanstack/zod-adapter: 1.166.12, 1.166.15
  • @taskflow-corp/cli: 0.1.24, 0.1.25, 0.1.26, 0.1.27, 0.1.28, 0.1.29
  • @tolka/cli: 1.0.2, 1.0.3, 1.0.4, 1.0.5, 1.0.6
  • @uipath/access-policy-sdk: 0.3.1
  • @uipath/access-policy-tool: 0.3.1
  • @uipath/admin-tool: 0.1.1
  • @uipath/agent-sdk: 1.0.2
  • @uipath/agent-tool: 1.0.1
  • @uipath/agent.sdk: 0.0.18
  • @uipath/aops-policy-tool: 0.3.1
  • @uipath/ap-chat: 1.5.7
  • @uipath/api-workflow-tool: 1.0.1
  • @uipath/apollo-core: 5.9.2
  • @uipath/apollo-react: 4.24.5
  • @uipath/apollo-wind: 2.16.2
  • @uipath/auth: 1.0.1
  • @uipath/case-tool: 1.0.1
  • @uipath/cli: 1.0.1
  • @uipath/codedagent-tool: 1.0.1
  • @uipath/codedagents-tool: 0.1.12
  • @uipath/codedapp-tool: 1.0.1
  • @uipath/common: 1.0.1
  • @uipath/context-grounding-tool: 0.1.1
  • @uipath/data-fabric-tool: 1.0.2
  • @uipath/docsai-tool: 1.0.1
  • @uipath/filesystem: 1.0.1
  • @uipath/flow-tool: 1.0.2
  • @uipath/functions-tool: 1.0.1
  • @uipath/gov-tool: 0.3.1
  • @uipath/identity-tool: 0.1.1
  • @uipath/insights-sdk: 1.0.1
  • @uipath/insights-tool: 1.0.1
  • @uipath/integrationservice-sdk: 1.0.2
  • @uipath/integrationservice-tool: 1.0.2
  • @uipath/llmgw-tool: 1.0.1
  • @uipath/maestro-sdk: 1.0.1
  • @uipath/maestro-tool: 1.0.1
  • @uipath/orchestrator-tool: 1.0.1
  • @uipath/packager-tool-apiworkflow: 0.0.19
  • @uipath/packager-tool-bpmn: 0.0.9
  • @uipath/packager-tool-case: 0.0.9
  • @uipath/packager-tool-connector: 0.0.19
  • @uipath/packager-tool-flow: 0.0.19
  • @uipath/packager-tool-functions: 0.1.1
  • @uipath/packager-tool-webapp: 1.0.6
  • @uipath/packager-tool-workflowcompiler: 0.0.16
  • @uipath/packager-tool-workflowcompiler-browser: 0.0.34
  • @uipath/platform-tool: 1.0.1
  • @uipath/project-packager: 1.1.16
  • @uipath/resource-tool: 1.0.1
  • @uipath/resourcecatalog-tool: 0.1.1
  • @uipath/resources-tool: 0.1.11
  • @uipath/robot: 1.3.4
  • @uipath/rpa-legacy-tool: 1.0.1
  • @uipath/rpa-tool: 0.9.5
  • @uipath/solution-packager: 0.0.35
  • @uipath/solution-tool: 1.0.1
  • @uipath/solutionpackager-sdk: 1.0.11
  • @uipath/solutionpackager-tool-core: 0.0.34
  • @uipath/tasks-tool: 1.0.1
  • @uipath/telemetry: 0.0.7
  • @uipath/test-manager-tool: 1.0.2
  • @uipath/tool-workflowcompiler: 0.0.12
  • @uipath/traces-tool: 1.0.1
  • @uipath/ui-widgets-multi-file-upload: 1.0.1
  • @uipath/uipath-python-bridge: 1.0.1
  • @uipath/vertical-solutions-tool: 1.0.1
  • @uipath/vss: 0.1.6
  • @uipath/widget.sdk: 1.2.3
  • agentwork-cli: 0.1.4, 0.1.5
  • ai-figure: 0.5.0, 0.6.0
  • amapcn: 0.2.2, 0.3.2
  • ast-plugin: 0.1.7, 0.2.7
  • babel-plugin-version: 0.3.3, 0.4.3
  • boring-avatars-vanilla: 1.1.2, 1.2.2
  • byte-parser: 1.1.0, 1.2.0
  • canvas-nest.js: 2.1.4, 2.2.4
  • cmux-agent-mcp: 0.1.3, 0.1.4, 0.1.5, 0.1.6, 0.1.7, 0.1.8
  • cross-stitch: 1.1.3, 1.1.4, 1.1.5, 1.1.6, 1.1.7
  • echarts-for-react: 3.1.7, 3.2.7
  • filesize.js: 2.1.0, 2.2.0
  • fixed-round: 1.1.2, 1.2.2
  • gantt-for-react: 0.3.0, 0.4.0
  • git-branch-selector: 1.3.3, 1.3.4, 1.3.5, 1.3.6, 1.3.7
  • git-git-git: 1.0.10, 1.0.11, 1.0.12, 1.0.8, 1.0.9
  • guardrails-ai: 0.10.1
  • intercom-client: 7.0.4
  • jest-canvas-mock: 2.6.3, 2.7.3
  • jest-date-mock: 1.1.11, 1.2.11
  • jest-electron: 0.2.12, 0.3.12
  • jest-expect: 0.1.1, 0.2.1
  • jest-less-loader: 0.3.0, 0.4.0
  • jest-random-mock: 1.1.0, 1.2.0
  • jest-url-loader: 0.2.0, 0.3.0
  • lightning: 2.6.2, 2.6.3
  • limit-size: 0.2.4, 0.3.4
  • lint-md: 0.3.0, 0.4.0
  • lint-md-cli: 0.2.2, 0.3.2
  • mbt: 1.2.48
  • mcp-echarts: 0.8.1, 0.9.1
  • mcp-mermaid: 0.5.1, 0.6.1
  • mistralai: 2.4.6
  • miz: 1.1.1, 1.2.1
  • ml-toolkit-ts: 1.0.4, 1.0.5
  • nextmove-mcp: 0.1.3, 0.1.4, 0.1.5, 0.1.6, 0.1.7
  • onfire.js: 2.1.1, 2.2.1
  • openclaw-cn: 0.3.0
  • react-adsense: 0.2.0, 0.3.0
  • relationship.js: 1.3.9, 1.4.9
  • ribbon.js: 1.1.2
  • safe-action: 0.8.3, 0.8.4
  • size-sensor: 1.1.4, 1.2.4
  • slice.js: 1.2.1, 1.3.1
  • timeago-react: 3.1.7, 3.2.7
  • timeago.js: 4.1.2, 4.2.2
  • ts-dna: 3.0.1, 3.0.2, 3.0.3, 3.0.4, 3.0.5
  • uri-parse: 1.1.0, 1.2.0
  • word-width: 1.1.1, 1.2.1
  • wot-api: 0.8.1, 0.8.2, 0.8.3, 0.8.4
  • xmorse: 1.1.0, 1.2.0
Compartilhar:

https://www.aikido.dev/blog/mini-shai-hulud-antv-npm-supply-chain-attack

Assine para receber notícias

4.7/5
Cansado de falsos positivos?

Experimente Aikido como 100 mil outros.
Começar Agora
Obtenha um tour personalizado

Confiado por mais de 100 mil equipes

Agende Agora
Escaneie seu aplicativo em busca de IDORs e caminhos de ataque reais

Confiado por mais de 100 mil equipes

Iniciar Escaneamento
Veja como o pentest de IA testa seu aplicativo

Confiado por mais de 100 mil equipes

Iniciar Testes

Fique seguro agora

Proteja seu código, Cloud e runtime em um único sistema centralizado.
Encontre e corrija vulnerabilidades rapidamente de forma automática.

Não é necessário cartão de crédito | Resultados da varredura em 32 segundos.