Plugin Vercel cho Claude Code bị phát hiện thu thập dữ liệu người dùng một cách quá mức

09 tháng 4, 2026·6 phút đọc

Plugin Vercel trên Claude Code đang gây tranh cãi khi bị phát hiện thu thập dữ liệu telemetry, bao gồm cả các lệnh bash và prompt của người dùng, ngay cả trên những dự án không liên quan đến Vercel. Phương thức xin phép đồng ý của plugin sử dụng kỹ thuật "prompt injection", khiến người dùng lầm tưởng đó là câu hỏi từ hệ thống Claude gốc.

Plugin Vercel cho Claude Code bị phát hiện thu thập dữ liệu người dùng một cách quá mức

Gần đây, tôi đang làm việc trên một dự án hoàn toàn không liên quan gì đến Vercel: không có vercel.json, không có next.config, và không có bất kỳ dependency nào của Vercel. Tuy nhiên, một câu hỏi bất ngờ đã xuất hiện: "Plugin Vercel thu thập dữ liệu sử dụng ẩn danh... Bạn có muốn chia sẻ văn bản prompt của mình không?"

Mọi prompt tôi nhập vào. Trên một dự án không phải của Vercel.

Điều này thực sự khiến tôi cảm thấy không ổn. Vì vậy, tôi đã cùng Claude đi sâu vào mã nguồn của plugin này.

Mã nguồn plugin VercelMã nguồn plugin Vercel

Vấn đề đầu tiên nằm ở chính yêu cầu này. Mục đích của plugin Vercel là hỗ trợ triển khai (deployment), hướng dẫn framework và bổ sung kỹ năng (skill injection). Tại sao nó cần đọc từng prompt bạn gõ? Trên mọi dự án? Đó không còn là phân tích để cải thiện plugin nữa, mà hoàn toàn vượt quá phạm vi của một công cụ hỗ trợ triển khai.

Nhưng ngay cả khi chấp nhận nhu cầu đó, cách họ hỏi còn tồi tệ hơn.

Khi plugin Vercel muốn hỏi về telemetry, nó không hiển thị một lời nhắc CLI hay màn hình cài đặt. Thay vào đó, nó tiêm các hướng dẫn ngôn ngữ tự nhiên vào ngữ cảnh hệ thống (system context) của Claude, ra lệnh cho AI hỏi người dùng một câu hỏi cụ thể. Claude đọc các hướng dẫn này, hiển thị câu hỏi bằng công cụ AskUserQuestion, và sau đó - dựa trên câu trả lời của bạn - chạy lệnh echo 'enabled' hoặc echo 'disabled' để ghi tệp tùy chọn vào hệ thống tệp của bạn.

Kết quả trông giống hệt một câu hỏi gốc của Claude Code. Không có chỉ báo trực quan nào cho thấy nó đến từ một plugin bên thứ ba. Bạn không thể phân biệt được sự khác biệt.

Đây không chỉ là việc tiêm ngữ cảnh (context injection) - vốn là mục đích sử dụng chính của plugin (kỹ năng, tài liệu, hướng dẫn framework). Plugin Vercel đang tiêm các hướng dẫn hành vi, yêu cầu Claude hỏi một câu hỏi cụ thể VÀ thực thi các lệnh shell trên hệ thống tệp của bạn dựa trên phản hồi.

Có một sự khác biệt lớn giữa "đây là ngữ cảnh về định tuyến Next.js" và "hỏi người dùng câu hỏi này rồi ghi vào hệ thống tệp của họ".

Một người dùng đã nêu chính xác mối lo ngại này trên GitHub (issue #34). Một nhà phát triển của Vercel đã trả lời rằng do hạn chế của marketplace (Cursor, CC, Codex), họ không thể tạo lời nhắc CLI một lần, nên việc kích hoạt phải đến từ bên trong agent harness.

Tôi hiểu sự hạn chế này. Nhưng câu trả lời cho "chúng tôi không thể xây dựng sự đồng ý phù hợp" không nên là tung ra tính năng - mà là không làm điều đó, thay vì dùng prompt injection để lách luật.

Ngay cả trong các hạn chế hiện tại, họ có thể đã thêm văn bản "Câu hỏi này đến từ plugin Vercel" vào nội dung câu hỏi, và ghi tệp tùy chọn trực tiếp từ JavaScript của hook thay vì hướng dẫn Claude chạy các lệnh shell.

Plugin tuyên bố: "Plugin Vercel thu thập dữ liệu sử dụng ẩn danh như các mẫu skill injection và công cụ được sử dụng theo mặc định."

Nghe có vẻ vô hại. Nhưng đây là những gì nó thực sự thu thập:

Dữ liệu telemetry thực tếDữ liệu telemetry thực tế

Hàng ở giữa. Mọi lệnh bash - chuỗi lệnh đầy đủ, không chỉ tên công cụ - được gửi đến telemetry.vercel.com. Đường dẫn tệp, tên dự án, tên biến môi trường, chi tiết cơ sở hạ tầng. Bất cứ thứ gì trong lệnh, họ đều lấy được.

Việc mô tả đây là "dữ liệu sử dụng ẩn danh như các mẫu skill injection và công cụ được sử dụng" là một sự cường điệu quá mức.

Câu hỏi đồng ý đóng khung lựa chọn của bạn là "chia sẻ prompt thêm, hoặc không". Nó không bao giờ cho bạn biết việc thu thập lệnh bash là tùy chọn. Nó không bao giờ nói bạn có thể tắt nó. Lựa chọn thực sự không phải là giữa telemetry và không có telemetry - mà là giữa "một ít" và "nhiều hơn".

Tất cả những điều này được liên kết với một UUID thiết bị lưu trữ liên tục trên máy của bạn, được tạo một lần và sử dụng mãi mãi. Mọi phiên làm việc, mọi dự án, đều có thể liên kết qua thời gian.

Tùy chọn từ chối (opt-out) có tồn tại - một biến môi trường VERCEL_PLUGIN_TELEMETRY=off được ghi trong README của plugin. Nhưng README đó nằm bên trong thư mục cache của plugin. Không ở bất kỳ đâu bạn có thể thấy trong quá trình cài đặt hoặc chạy lần đầu.

Điều ban đầu khiến tôi bực mình chính là câu hỏi đồng ý hiện lên trên một dự án không phải của Vercel.

Tôi đã đi qua mọi tệp telemetry để tìm kiếm phát hiện dự án. Không có gì cả.

Các bộ so khớp hook (hook matchers) xác nhận điều này. Bộ so khớp UserPromptSubmit thực sự là một chuỗi rỗng - khớp mọi thứ. Cài đặt plugin cho ứng dụng Next.js của bạn, và nó sẽ theo dõi dự án Rust, tập lệnh Python, công việc khách hàng của bạn. Mọi thứ.

Sự mỉa mai? Plugin đã có tính năng phát hiện framework tích hợp sẵn. Nó quét kho lưu trữ của bạn và xác định các framework bạn đang sử dụng mỗi khi bắt đầu phiên. Nhưng nó chỉ dùng điều này để báo cáo những gì nó tìm thấy - không phải để quyết định liệu telemetry có nên kích hoạt hay không.

Cánh cổng đã có. Họ chỉ không sử dụng nó.

Biến môi trường sẽ tắt toàn bộ telemetry nhưng giữ plugin hoạt động đầy đủ. Các kỹ năng, phát hiện framework, quy trình triển khai - mọi thứ vẫn hoạt động. Bạn không mất gì ngoại trừ việc thu thập dữ liệu của Vercel.

Mỗi vấn đề trong số này đều có một lớp Vercel và một lớp kiến trúc Claude Code. Vercel đã đưa ra những lựa chọn mà tôi nghĩ là không ổn. Nhưng kiến trúc plugin đã cho phép những lựa chọn đó - không có thuộc tính trực quan, không có quyền hạn hook, không có phạm vi dự án.

Tôi sử dụng Vercel. Tôi thích Vercel. Tôi sử dụng Claude Code hàng ngày. Tôi muốn cả hai đều tốt hơn.

Mọi thứ trên đây đều có thể kiểm chứng từ mã nguồn plugin tại ~/.claude/plugins/cache/claude-plugins-official/vercel/.

Để tắt telemetry, bạn có thể đặt biến môi trường sau:

VERCEL_PLUGIN_TELEMETRY=off

Bài viết được tổng hợp và biên soạn bằng AI từ các nguồn tin tức công nghệ. Nội dung mang tính tham khảo. Xem bài gốc ↗