Thủ thuật
Cảnh báo: Ứng dụng lập trình ZCode tự ý tải lên toàn bộ lịch sử Git của người dùng
(giờ Việt Nam)
Tóm tắt AI
ZCode bị phát hiện tự động đóng gói và tải dữ liệu làm việc lên máy chủ đám mây sau khi đăng nhập, bao gồm cả lịch sử Git, bộ nhớ đệm LFS và cấu hình cá nhân. Đáng ngại hơn, người dùng không thể giải mã các tệp tin đã bị mã hóa này vì khóa bảo mật nằm hoàn toàn trên máy chủ.
Bản dịch AI
Tôi không phải là người bản ngữ tiếng Anh; bài viết này được dịch bởi AI.
Mọi chuyện bắt đầu từ một lần kiểm tra định kỳ khi tôi đang giải phóng dung lượng ổ đĩa: thư mục ~/.zcode chiếm hơn 700MB. Sau khi tìm hiểu ngắt quãng, tôi đã xác nhận được một sự thật khá kinh ngạc:
Bất cứ khi nào bạn đăng nhập, ZCode (ứng dụng lập trình AI trên máy tính để bàn chính thức của Zhipu) sẽ âm thầm đóng gói toàn bộ không gian làm việc của bạn — bao gồm lịch sử.git hoàn chỉnh, bộ nhớ đệm LFS, reflogs và các cấu hình ứng dụng toàn cục — sau đó mã hóa và tải trực tiếp lên Aliyun OSS.
Trớ trêu hơn nữa: khóa công khai RSA được sử dụng để mã hóa được máy chủ gửi đến ngay tại thời điểm đó, trong khi khóa bí mật lại nằm hoàn toàn trên đám mây. Bạn không thể giải mã tệp tin đã được mã hóa nặng hàng trăm megabyte nằm ngay trên ổ đĩa của mình, và chính ứng dụng ZCode cũng không thể làm điều đó.
Dưới đây là hồ sơ đầy đủ về quá trình điều tra, chuỗi bằng chứng và một dòng lệnh phòng thủ giúp chặn đứng hành vi này vĩnh viễn.
Điểm khởi đầu: Một tệp lưu trữ 313MB bị kẹt ở trạng thái chờ (Pending) #
~/.zcode là thư mục gốc chứa dữ liệu của ZCode. Phân tích dung lượng trông đại khái như sau:
Bên trong v2/checkpoints/, tôi tìm thấy một tệp.enc dung lượng 313MB cùng với một tệp siêu dữ liệu trạng thái:
Câu chuyện rất đơn giản:
Kho lưu trữ có tổng dung lượng 10GB; sau khi trừ đi các tệp phụ thuộc, 345MB còn lại gần như hoàn toàn là tài sản trí tuệ cốt lõi.
Dữ liệu đi đâu: Từ nhật ký (logs) đến kỹ thuật dịch ngược asar #
Các tệp nhật ký không chứa URL tải lên rõ ràng, vì vậy tôi đã mở tệp app.asar của ứng dụng để kiểm tra. Quy trình tải lên được tái cấu trúc như sau:
Đường ống (pipeline) chạy qua hai giai đoạn:
Việc kiểm tra các socket đang hoạt động đã xác nhận điều này: tiến trình ZCode đang chạy duy trì các kết nối HTTPS liên tục tới các điểm cuối IP zcode.z.ai cùng với hai nút lưu trữ Aliyun OSS.
Phần trớ trêu nhất: Khóa thuộc về máy chủ #
Việc triển khai mã hóa sử dụng phương pháp mã hóa phong bì (envelope encryption) chuẩn mực:
Điểm mấu chốt nằm ở khóa công khai đó: nó được máy chủ cung cấp trong quá trình thương lượng thông tin xác thực, và khóa bí mật tương ứng không bao giờ chạm tới máy tính của bạn. Việc mở khóa phong bì bằng tất cả các khóa bí mật cục bộ trên hệ thống của tôi đều thất bại, đúng như dự đoán.
Nói cách khác: tệp tin 313MB đã mã hóa trên ổ đĩa của bạn không thể được mở bởi bạn hay bởi chính ứng dụng. Chỉ có hệ thống phụ trợ (backend) của Zhipu mới nắm giữ chìa khóa để mở nó.
Nếu tính năng này thực sự được xây dựng để người dùng khôi phục dữ liệu hoặc đồng bộ hóa giữa các thiết bị, các khóa sẽ phải nằm cục bộ (giống như Git hoặc Time Machine). Một chiếc khóa mà chỉ máy chủ mới có thể sử dụng chỉ phục vụ đúng một mục đích: đảm bảo máy chủ có thể đọc mã nguồn của bạn bất cứ khi nào họ muốn.
Những gì bị đóng gói: Gần 90% là.git #
Mặc dù tệp tin đã mã hóa bị khóa, nhưng Manifest (danh mục tệp) được tạo trong quá trình đóng gói lại được lưu cục bộ dưới dạng văn bản thuần (plaintext). Phân tích một bản chụp nhanh gồm 42.411 tệp:
Chỉ riêng thư mục.git đã chiếm 86,6% dung lượng dữ liệu bị gửi đi.
Một khi đã tải lên, đám mây nhận được nhiều hơn là chỉ cây thư mục làm việc hiện tại của bạn — nó nhận được toàn bộ lịch sử của kho lưu trữ kể từ ngày đầu tiên:
Hơn nữa, một tệp manifest bổ sung có tên repo_snapshot_extra_manifest sẽ băm (hash) các tệp cấu hình ZCode toàn cục của bạn (như settings.behavior.json) và gộp chúng vào mọi bản chụp nhanh trên các không gian làm việc.
Sự thật về các nút chuyển đổi: Cài đặt giao diện không ngăn được nó #
Phản ứng tự nhiên là kiểm tra cài đặt để tắt nó đi. Tôi đã đối chiếu các tùy chọn trên giao diện người dùng với mã nguồn:
Nhìn vào mã hợp ngữ (assembly code) của máy chủ, mọi thứ trở nên rõ ràng: tiến trình phụ (sidecar) thu thập/tải lên được khởi tạo vô điều kiện khi khởi động. Không có bất kỳ kiểm tra điều kiện (if) nào dựa trên tùy chọn của người dùng; yêu cầu duy nhất là tokenProvider có thể trả về một JWT hợp lệ.
Tóm lại: chừng nào bạn còn đăng nhập, đường ống chạy ngầm này sẽ luôn hoạt động và không có cài đặt giao diện nào có thể tắt nó.
Các kích hoạt thu thập xảy ra tại hai thời điểm: captureBeforePrompt (trước mỗi câu lệnh) và khi hoàn thành tác vụ được gắn thẻ repo-wiki-update. Trong nhật ký phiên, một phiên hoạt động duy nhất đã tạo ra tới 62 sự kiện thu thập.
Chính sách bảo mật nói gì #
Kiểm tra chính sách bảo mật của ZCode, họ tuyên bố rõ ràng rằng họ thu thập “văn bản, tệp tin và mã nguồn được gửi trong các cuộc hội thoại” — một thông lệ tiêu chuẩn để cung cấp ngữ cảnh cho các mô hình ngôn ngữ lớn (LLM).
Tuy nhiên, trong toàn bộ chính sách, các câu hỏi thường gặp (FAQs) và nhật ký thay đổi (changelogs), không có bất kỳ đề cập nào về việc âm thầm đóng gói và tải lên toàn bộ không gian làm việc cũng như lịch sử Git đầy đủ.
Đề cập gần nhất là tuyên bố mẫu chung chung: “chương trình tối ưu hóa bị tắt theo mặc định và dữ liệu đầu vào sẽ không được sử dụng để huấn luyện nếu không có sự đồng ý”.
Phòng thủ: Xóa thủ công là vô ích; hãy khóa thư mục #
Khi lần đầu tiên tìm thấy gói dữ liệu đang chờ, tôi đã xóa nó. Trong vòng nửa giờ, nó lại tự thu thập — một tệp lưu trữ 313MB mới với bộ đếm thử lại tăng từ 564 lên 565. Khi trình tải lên thấy tệp bị mất, nó chỉ việc đóng gói một tệp mới. Xóa thủ công giống như trò chơi đập chuột (whack-a-mole).
Giải pháp sạch sẽ và hiệu quả nhất là thiết lập cờ bất biến (immutability flag) ở cấp độ hệ thống tệp, từ chối quyền ghi ở cấp độ nhân (kernel):
macOS #
Linux #
Tác động & Khôi phục #
Lời kết #
Bài viết được AI dịch và tổng hợp tự động từ Hacker News Nổi bật (buzzing.cc bản dịch tiếng Trung). Liên kết bài gốc ở phía trên. AIHOT.vn luôn dẫn nguồn đầy đủ — nếu bạn thấy điểm cần chỉnh sửa, hãy gửi ý kiến tại trang phản hồi.