Nếu bạn dùng Cursor kèm extension Claude Code và nó tự cập nhật vào ngày 29/10/2026, hãy coi máy trạm của mình đã bị xâm nhập, chứ không chỉ là "cài nhầm một plugin lỗi". Bản 2.1.314 đã gỡ mã độc khỏi gói cài đặt, nhưng theo các cảnh báo bảo mật, nó không xóa những gì bản độc hại đã kịp cài vào hệ thống.
Chuyện gì đã xảy ra trong 11 giờ
Ngày 29/10, một bản cập nhật mang định danh Anthropic.claude-code xuất hiện trên Cursor Marketplace, bên trong có cửa sau (backdoor). Bản này tồn tại khoảng 11 giờ, từ 02:27 đến 13:35 giờ Thái Bình Dương (09:27–20:35 UTC, tức khoảng 16:27 chiều ngày 29 đến 03:35 sáng ngày 30 theo giờ Việt Nam). Các nhà nghiên cứu ước tính có tới khoảng 5.000 máy của lập trình viên đã tải về hoặc tự động cài bản này.
Phorion, công ty bảo mật chuyên về macOS, nằm trong số những đơn vị báo cáo sớm nhất; Sophos, BleepingComputer và nhiều nơi khác sau đó công bố phân tích kỹ thuật.
Phiên bản bị ảnh hưởng là 2.1.313; bản 2.1.312 cũng được ghi nhận trên một số kênh phân phối. Bản thay thế sạch là 2.1.314.
Điều khiến vụ này nghiêm trọng nằm ở hành vi được ghi nhận. Mã độc chạy ngay khi trình soạn thảo nạp extension, trước cả khi ai đó mở khung chat Claude. Các báo cáo mô tả nó cài một khóa SSH công khai vào ~/.ssh/authorized_keys, tạo cơ chế bám trụ (persistence) để sống sót qua các lần khởi động lại, và duy trì một đường hầm kết nối ra ngoài, liên lạc khoảng mỗi 60 giây với máy chủ điều khiển (C2) tại 134.209.82[.]225. Máy chủ này hiện đã bị ngắt kết nối.
Vì sao cập nhật không làm sạch máy

Cập nhật extension chỉ thay các tệp nằm trong thư mục của extension. Nó không biết gì về một khóa SSH đã được ghi vào thư mục home, hay một tác vụ khởi động đã đăng ký với hệ điều hành. Những dấu vết đó nằm ngoài vòng đời của extension, nên gỡ cài đặt hay nâng cấp chỉ chặn được lây nhiễm mới.
Phân biệt này quyết định cách đội ngũ phản ứng. Một ticket ghi "đã vá" thực chất đang đóng nhầm vấn đề. Câu hỏi đúng là: đoạn mã này chạm được tới những gì trong lúc nó chạy?
Trên một laptop lập trình viên điển hình, câu trả lời gồm thông tin xác thực CLI đám mây, token Git, khóa SSH riêng, API key của các mô hình ngôn ngữ lớn, và chính mã nguồn. Việc máy chủ C2 bị tắt làm giảm rủi ro đang diễn ra, nhưng không thu hồi được dữ liệu đã bị lấy, cũng không vô hiệu hóa khóa đã được cấp quyền truy cập.
Dọn dẹp ở cấp máy, theo đúng thứ tự
Nếu phiên bản bị ảnh hưởng từng có mặt trên một máy, hãy đi lần lượt qua các bước sau:
- Rà soát khóa SSH được cấp quyền. Xóa mọi khóa công khai không rõ nguồn gốc, đặc biệt là khóa có định danh kiểu
svc-telemetry. - Gỡ cơ chế bám trụ. Kiểm tra
~/Library/LaunchAgents/trên macOS,crontabtrên Linux, Task Scheduler và thư mục Startup trên Windows. - Chặn đường hầm bất thường. Tìm các tiến trình SSH hoặc tiến trình khác kết nối ra ngoài theo chu kỳ và dừng chúng.
- Xoay vòng bí mật. Mặc định rằng mọi thứ tài khoản người dùng đọc được đều đã lộ: credentials AWS/GCP/Azure, token GitHub/GitLab, API key Anthropic hoặc OpenAI, và khóa SSH riêng.
- Sau đó mới cập nhật lên 2.1.314 hoặc gỡ hẳn extension.
Một lượt kiểm tra nhanh đầu tiên trên macOS hoặc Linux trông như sau:
grep -n "svc-telemetry" ~/.ssh/authorized_keys
ls -lt ~/Library/LaunchAgents/ # macOS
crontab -l # Linux
Không ra kết quả nào chưa phải bằng chứng an toàn; nó chỉ loại trừ những dấu hiệu lộ liễu nhất. Xoay vòng bí mật là bước tuyệt đối không được bỏ qua.
Lỗ hổng cấu trúc đằng sau sự cố
Hai đặc điểm thiết kế đã biến một bản tải lên độc hại thành hàng nghìn máy bị xâm nhập.
Thứ nhất, extension kiểu VS Code không chạy trong sandbox. Mã của extension chạy trong tiến trình extension host trên Node.js của trình soạn thảo, với đúng những quyền mà người dùng đang có. Các cảnh báo mô tả đoạn mã bị chèn là một IIFE (hàm tự gọi chính nó ngay khi được định nghĩa) đặt ở đầu tệp extension.js. Nghĩa là nó chạy ngay khoảnh khắc module được nạp. Không hề có hộp thoại xin quyền nào để người dùng cân nhắc.
Thứ hai, các bản fork tập trung vào AI như Cursor không thể dùng Visual Studio Marketplace của Microsoft, vì điều khoản của chợ này chỉ cho phép dùng với sản phẩm Microsoft. Họ phải dựa vào Open VSX hoặc chợ tiện ích riêng. Theo các báo cáo, điểm yếu trong cách xác minh quyền sở hữu namespace của nhà phát hành đã cho phép kẻ tấn công đẩy bản cập nhật dưới tên Anthropic. Khi chợ tiện ích là cửa kiểm soát duy nhất, cơ chế xác minh danh tính của nó chính là toàn bộ mô hình bảo mật.
Tính năng tự động cập nhật làm nốt phần phân phối: người dùng nhận bản độc hại một cách im lặng, không có cảnh báo nào về chữ ký số.
Đây không phải lý do để từ bỏ các IDE AI. Đây là lý do để thôi coi danh sách extension là sở thích cá nhân, và bắt đầu coi nó là phần mềm được triển khai lên một cỗ máy đang giữ thông tin xác thực production.
Đội ngũ nên thay đổi gì ngay
- Khóa cố định phiên bản extension và tắt cập nhật ngầm trên máy công ty. Trong các trình soạn thảo dựa trên VS Code, thiết lập
extensions.autoUpdateđiều khiển việc này; hãy triển khai bản cập nhật sau một khoảng trễ ngắn thay vì nhận ngay vài phút sau khi phát hành. - Đưa thông tin xác thực ra khỏi máy trạm. Phát triển trong Dev Containers hoặc môi trường từ xa, để extension chỉ thấy một workspace dùng xong bỏ, không thấy khóa SSH hay hồ sơ đám mây của bạn.
- Ưu tiên thông tin xác thực ngắn hạn, như phiên đám mây cấp qua SSO và token phân quyền chi tiết có hạn dùng, để bí mật bị đánh cắp nhanh chóng hết giá trị.
- Kiểm kê extension của cả đội, giống như cách bạn vẫn kiểm kê các thư viện phụ thuộc.
Với các đội ngũ Việt Nam đang đưa Cursor và Claude Code vào quy trình rất nhanh để tăng tốc phát hành, bài học khá thẳng: máy trạm của lập trình viên giờ là mục tiêu tuyến đầu. Công cụ AI có giá trị thật, nhưng cỗ máy chạy nó là nơi cất giữ chìa khóa của bạn, và đó mới là thứ kẻ tấn công nhắm tới.




Đang tải bình luận…