Vụ Cursor: vì sao tiện ích Claude Code giả lọt qua kho phân phối?
Báo cáo của Cursor lần theo đường đi từ khóa cấp cho nhà cung cấp đến bộ nhớ đệm phát tiện ích. Trọng tâm là ai được quyền thay tệp ở chặng cuối.
Trong báo cáo ngày 13/11/2026, Cursor cho biết bản Claude Code giả xuất hiện trong kho tiện ích của họ không đến từ kho nguồn Open VSX. Kẻ tấn công dùng thông tin xác thực đánh cắp được để đặt gói trực tiếp vào bộ nhớ đệm phát đến người dùng. Diễn biến này giải thích vì sao một kho nguồn có thể vẫn sạch trong khi tệp tải từ một nơi phân phối lại đã bị thay.
Từ quyền đọc dữ liệu đến quyền tác động hệ thống khác
Theo báo cáo điều tra của Cursor, kẻ tấn công lấy được một khóa truy cập mà Cursor cấp cho nhà cung cấp Fireworks. Khóa cho phép đọc một vùng lưu trữ dùng để chia sẻ dữ liệu. Vùng đó chứa một phần bản ghi hoạt động của tác nhân lập trình, phần lớn từ năm 2025, ở các phiên không dùng Privacy Mode. Cursor nói một số ít bản ghi còn thông tin xác thực chưa được che, và tỷ lệ khách hàng có thông tin xác thực API bị lộ dưới 0,01%.
Quyền chỉ đọc ngăn khóa sửa dữ liệu trong vùng lưu trữ, nhưng không ngăn người cầm khóa sao chép thứ nằm ở đó. Nếu nội dung có một mã truy cập còn dùng được ở hệ thống khác, quyền của mã đó cần được xét riêng. Cursor cho biết kẻ tấn công đã dùng thông tin lấy được để truy cập một số công cụ SaaS của hãng. Phần tài nguyên bị truy cập bao gồm một số kho mã đã lưu trữ không dùng cho sản xuất, dữ liệu hỗ trợ khách hàng có giới hạn và một số thông tin xác thực từng được gửi đến bộ phận hỗ trợ.
Bộ nhớ đệm là chặng giao tệp, cũng là chỗ cần xác minh
Hãy hình dung một cửa hàng tiện ích nhận gói từ kho nguồn và giữ một bản sao để phát nhanh. Danh mục có thể tiếp tục hiển thị đúng tên, nhà phát hành và phiên bản, dù nội dung ở đường tải đã khác. Theo Cursor, ngày 29/10 kẻ tấn công dùng một thông tin xác thực lấy được từ hệ thống nội bộ để đưa các bản sao giả vào bộ nhớ đệm phục vụ kho tiện ích của hãng. Cursor nói Anthropic không phát hành những bản này và Open VSX không lưu chúng. Do đó, một lần tải từ kênh khác không tự động nằm trong cùng phạm vi ảnh hưởng.
Cursor ước tính tối đa 5.000 người dùng yêu cầu các bản lưu đệm cụ thể có thể đã nhận gói giả trong khoảng 11 giờ. Đó là mức tối đa do hãng ước tính, không phải số máy đã xác nhận cài đặt hoặc bị lấy dữ liệu. Các bản liên quan là 2.1.312 và 2.1.313. Để xác định mình có thuộc nhóm cần xử lý hay không, người dùng cần đối chiếu cả phiên bản, hệ điều hành, nguồn cài và thời điểm trong thông báo của hãng. Chỉ thấy tên Claude Code trên màn hình không đủ để kết luận.
Xóa tiện ích và thu hồi quyền là hai việc khác nhau
Tiện ích trong môi trường lập trình có thể chạy với quyền của tiến trình hoặc tài khoản đang sử dụng. Nếu từng chạy bản bị can thiệp, việc xóa tiện ích giúp ngăn nó tiếp tục hoạt động theo cách đó, nhưng không lấy lại được thông tin đã bị sao chép. Cursor yêu cầu người cài nhầm các bản liên quan làm theo hướng dẫn kiểm tra và khắc phục trong thông báo an ninh. Đội phụ trách máy phát triển cần phân biệt máy có tải gói, máy đã chạy gói và tài khoản mà máy có thể truy cập để chọn phạm vi điều tra phù hợp.
Nếu có khóa bị ảnh hưởng, việc thay khóa nên đi kèm xác minh khóa cũ đã bị thu hồi ở nơi phát hành và kiểm tra nhật ký trong thời gian liên quan. Một khóa mới có thể tồn tại song song với khóa cũ nếu hệ thống không có bước thu hồi riêng. Cũng nên rà nơi nhận sự kiện đăng nhập hoặc sử dụng khóa: nhật ký máy phát triển cho biết một phần, còn dịch vụ phát hành khóa và hệ thống đích mới cho biết yêu cầu nào thực sự đến được tài nguyên.
Giảm rủi ro ở cả hai đầu của đường phân phối
Với bên vận hành kho tiện ích nội bộ, biện pháp có giá trị là so tệp thực sự được trả về với bản đã phê duyệt. Một chữ ký hoặc giá trị băm lấy từ nguồn tin cậy có thể giúp nhận ra sai lệch, với điều kiện bên kiểm tra không lấy đồng thời cả tệp và bằng chứng xác minh từ cùng chặng đã bị sửa. Quyền thay nội dung lưu đệm cũng nên tách khỏi khóa dùng cho dữ liệu hỗ trợ hoặc công cụ cộng tác. Khi phát hiện một phiên bản có vấn đề, đội vận hành cần vô hiệu hóa các bản sao thay vì chỉ sửa mục hiển thị trong danh mục.
Với bên mua công cụ lập trình, bản ghi dùng để cải tiến mô hình phải được xem xét cả nội dung lẫn người nhận. Những giá trị nhìn giống dữ liệu gỡ lỗi có thể là khóa đang cấp quyền. Nên kiểm tra quy trình che thông tin với dữ liệu thử và xác định cách phát hiện khi việc che bỏ sót. Hai bài học từ báo cáo Cursor gặp nhau ở điểm này: cần biết vật gì đang được chuyển qua từng hệ thống, và ai có thể mở hoặc thay nó khi đã rời khỏi nơi tạo ra.
Trong lần diễn tập sự cố, nên thử xác định một máy nhận gói từ bản sao nào và vào thời điểm nào. Nếu nhật ký chỉ ghi tên phiên bản, đội phản ứng khó phân biệt tệp sạch và tệp đã bị đổi mang cùng nhãn. Lưu dấu băm ở chặng phân phối giúp trả lời câu hỏi đó mà không cần giữ lại nội dung nhạy cảm của dự án.
Nguồn: Báo cáo điều tra Cursor ngày 13/11/2026; thông báo nhận diện và khắc phục của Cursor.
Ảnh minh họa: Ảnh màn hình Visual Studio Code minh họa môi trường lập trình có tiện ích; không phải giao diện Cursor hay gói Claude Code bị can thiệp. Cycling2 qua Wikimedia Commons, CC0 1.0.