flawopen.com/Incidents/tensorlake-npm-install-hook-compromise-october-2026
Tensorlake npm 0.5.144: hook malicioso na instalação
Uma versão maliciosa do SDK de IA da Tensorlake adicionou um carregador preinstall. A equipe confirmou alterações diretas na main e reforçou a publicação; o alerta do GitHub considera comprometidos os hosts onde o código foi executado. Pesquisadores associam o padrão do carregador à família ChainDrop/Shai-Hulud; o alerta do GitHub não confirma essa atribuição.[1], [2], [3], [4], [5]
Instalar este pacote foi como ligar um aparelho que começa a funcionar assim que recebe energia: não era preciso apertar um botão nem usá-lo. O npm executou o hook malicioso de pré-instalação com as permissões de quem instalou, antes de alguém importar o SDK.[3], [6], [1]
Conceitos Centrais e Termos
hook preinstall- Script que o npm pode executar durante a instalação. O manifesto publicado do Tensorlake 0.5.144 chamava um carregador nesse hook, sem exigir a importação do SDK.[1], [6]
atestado de proveniência- Evidência sobre a origem e o processo de compilação de um artefato. A equipe informou que a publicação maliciosa tinha proveniência npm; isso não comprova que o código-fonte era seguro.[2], [3]
verificação de scripts de instalação- Controle de CI que falha quando um manifesto publicado declara scripts de instalação. Após o incidente, a Tensorlake adicionou esse controle e npm ci --ignore-scripts.[3]
Mapeamentos de frameworks
- Referência CWE para a fraqueza descrita neste guia: CWE-506
Linha do Tempo do Incidente
Fluxo de Ataque Passo a Paso
Credenciais e persistência do host ficaram em risco
O alerta de malware do GitHub orienta tratar como totalmente comprometido um host afetado. StepSecurity e Socket relatam roubo de credenciais e persistência, incluindo um monitor que poderia reagir à revogação de tokens. Atribua esses detalhes aos pesquisadores; não presuma que toda capacidade foi executada em todo host.[1], [4], [5]
A equipe restaurou os controles de publicação
A resposta reverteu os commits maliciosos, adicionou npm ci --ignore-scripts e uma verificação dos manifestos, reforçou as proteções do repositório e da publicação e substituiu o pacote por 0.5.145. O GHSA não lista versão corrigida porque classifica malware, não uma faixa de código vulnerável convencional.[3], [7]
Código-Fonte: Vulnerável vs. Seguro
Esta comparação de CI segue a PR integrada #1016; não é o pacote malicioso nem um exploit. A verificação executa antes da instalação e rejeita hooks de instalação publicados; ignore-scripts impede que npm ci execute scripts de ciclo de vida das dependências. A equipe informou que seus testes e a compilação do SDK funcionaram assim. Isso pode afetar pacotes que exigem hooks, e comandos invocados explicitamente, como npm test, ainda executam seus scripts. Isole etapas posteriores e não trate proveniência como revisão do código-fonte. O trecho é parcial: além de verificar declarações de hooks de instalação, a verificação do mantenedor também rejeita arquivos inesperados em typescript/lib/.[3], [6]
steps:
- run: npm cisteps:
- run: node scripts/check-no-install-scripts.mjs
- run: npm ci --ignore-scriptsLista de Verificação de Segurança para Engenharia
- ✓Pesquise manifests, arquivos de lock, caches e registros de build por tensorlake@0.5.144. O alerta identifica exatamente essa versão npm; não conclua exposição apenas pelo nome do pacote.[1]
- ✓Se a instalação foi executada, isole o host da rede e preserve as evidências. Remover a dependência não prova que a persistência ou outras alterações desapareceram; reconstrua a partir de mídia confiável quando a integridade não puder ser confirmada.[1], [4], [5]
- ✓Mantenha o host isolado e coordene com a resposta a incidentes a identificação e remoção da persistência que, segundo os pesquisadores, poderia ser acionada pela revogação de tokens, antes de revogar ou trocar tokens. Siga a orientação atual e execute as ações de resposta em sistemas limpos.[4], [5]
- ✓Depois que a equipe tratar a persistência relatada, use um sistema limpo para revogar e trocar as credenciais acessíveis ao processo instalador. Revise repositórios e publicações de pacotes acessíveis e examine artefatos de CI e logs de auditoria em busca de alterações não autorizadas.[4], [5], [3]
- ✓No CI, execute uma verificação revisada de hooks antes de instalar dependências, use npm ci --ignore-scripts quando compatível, isole scripts de build necessários, remova bypasses de envio direto/admin e exija aprovação independente para publicação.[3], [6]
- ✓Em 2026-10-12, verifique se seu ambiente instalou algum destes seis pacotes complementares na versão
0.5.144: `tensorlake-native-*family:tensorlake-native-linux-x64-gnu,tensorlake-native-linux-x64-musl,tensorlake-native-linux-arm64-gnu,tensorlake-native-linux-arm64-musl,tensorlake-native-darwin-arm64,tensorlake-native-win32-x64. O registro npm retornou metadados da versão de cada um nessa data; portanto, trate-os como ainda publicados e inclua-os no inventário de exposição. Isso confirma apenas a disponibilidade no registro, não que um pacote complementar contivesse a carga do incidente. Na PR #1016 já mesclada, a equipe informou que essas versões ainda precisavam ser removidas naquele momento.[3], [8], [9], [10], [11], [12], [13]
Fontes
- GitHub Advisory Database — GHSA-rqxj-g25x-4v9v
- Tensorlake — issue do incidente #1014
- Tensorlake — PR de resposta #1016
- StepSecurity — análise técnica
- Socket — análise técnica
- npm v10 — npm ci e ignore-scripts
- Tensorlake — versão limpa 0.5.145
- npm registry — tensorlake-native-linux-x64-gnu@0.5.144
- npm registry — tensorlake-native-linux-x64-musl@0.5.144
- npm registry — tensorlake-native-linux-arm64-gnu@0.5.144
- npm registry — tensorlake-native-linux-arm64-musl@0.5.144
- npm registry — tensorlake-native-darwin-arm64@0.5.144
- npm registry — tensorlake-native-win32-x64@0.5.144