Claude Code trên Cursor: kiểm tra extension 2.1.312/2.1.313 và dấu vết SSH
Cursor đã gỡ Claude Code for VS Code 2.1.312 và 2.1.313 sau khi phát hiện bundle chứa mã thiết lập backdoor SSH. Đội dùng Cursor cần khoanh vùng endpoint từng cài các bản này và đưa vào quy trình ứng phó sự cố.
Một extension AI coding chạy với quyền của IDE và tài khoản developer không chỉ là “plugin giao diện”. Nếu bundle bị chèn mã, nó có thể chạm tới tệp cục bộ, source code và công cụ phát triển ngay khi được nạp.
Đó là lý do sự cố Claude Code for VS Code trên Cursor Marketplace cần được xử lý như một vấn đề endpoint security. Cursor đã gỡ hai phiên bản 2.1.312 và 2.1.313 sau khi các bundle này bị phát hiện chứa mã thiết lập backdoor SSH.
Việc gỡ bản phát hành khỏi marketplace không tự xóa dấu vết trên máy từng cài. Nếu tổ chức có developer dùng Cursor cùng extension này, cần khoanh vùng endpoint liên quan và đưa vào quy trình ứng phó sự cố — thay vì chỉ cập nhật hoặc gỡ extension.
Phạm vi được xác nhận
Thông tin hiện có xác nhận sự việc liên quan đến Claude Code for VS Code trên Cursor Marketplace, ở các phiên bản:
2.1.312
2.1.313
Không nên tự suy rộng rằng mọi người dùng Claude Code, mọi extension VS Code, hay việc gọi model Anthropic qua API đều bị ảnh hưởng. Phạm vi tại các registry khác vẫn là điểm cần xác minh riêng.
Mã chèn chạy trước khi extension được kích hoạt
Theo phân tích, tệp extension.js bị chèn một IIFE (immediately invoked function expression — hàm JavaScript tự chạy khi được nạp) ở đầu bundle đã được minify. Phần còn lại vẫn có các dấu hiệu của extension bình thường, gồm chuỗi liên quan đến Claude Code, hàm activate/deactivate và logic giao diện.
Điểm đáng chú ý: mã chèn được thực thi ngay khi Node.js nạp module, trước callback activate. Người dùng không cần bấm nút hay gửi prompt để payload chạy.
Vì extension thừa hưởng quyền của IDE và user đang chạy IDE, một bundle bị cài mã có thể tiếp cận:
Tệp cục bộ và source code.
Công cụ phát triển trên máy.
Những tài nguyên mà tài khoản developer được phép truy cập.
Đây là một rủi ro chuỗi cung ứng phần mềm: điểm xâm nhập nằm ở artefact extension được phân phối, không nhất thiết ở code ứng dụng hay API model mà developer sử dụng.
Payload cố tạo đường truy cập SSH như thế nào
Chuỗi hành vi gồm hai phần: cấy một khóa SSH để đăng nhập vào máy, rồi tạo reverse SSH tunnel đi ra máy chủ bên ngoài.
Đầu tiên, payload tạo thư mục ~/.ssh nếu cần và thêm public key do đối tượng vận hành kiểm soát vào:
text
~/.ssh/authorizedkeys
Nó đặt quyền 0700 cho thư mục .ssh và 0600 cho authorizedkeys. Public key này có comment:
text
svc-telemetry
Tuy nhiên, payload chỉ kiểm tra sự tồn tại của chuỗi comment svc-telemetry, thay vì kiểm tra chính nội dung key. Khi điều tra, không nên chỉ tìm comment này; cần đối chiếu fingerprint của các public key không rõ nguồn gốc nếu đội phản ứng sự cố đã có IOC phù hợp.
Sau đó, payload cố bật SSH server theo từng hệ điều hành:
Linux: thử bật và khởi động sshd hoặc ssh bằng systemctl, sau đó fallback sang service và /etc/init.d/.
macOS: kiểm tra trạng thái Remote Login, rồi thử bật bằng sudo -n systemsetup -setremotelogin on.
Windows: cố cài và khởi động OpenSSH Server qua PowerShell.
Tài liệu không nêu dấu hiệu payload dùng khai thác leo thang đặc quyền. Lệnh sudo -n sẽ thất bại nếu user không có cấu hình hoặc trạng thái sudo phù hợp. Dù vậy, không bật được SSH server không có nghĩa endpoint an toàn: key, cơ chế persistence và hoạt động gửi thông tin nhận diện host vẫn có thể đã được cài đặt.
Dấu vết cần ưu tiên khi triage
Với các endpoint từng dùng hai phiên bản bị ảnh hưởng, đội bảo mật nên ưu tiên khoanh vùng và bảo toàn chứng cứ trước khi thực hiện các thay đổi lớn trên máy.
Các điểm cần rà soát gồm:
Xác định endpoint Cursor từng cài hoặc chạy Claude Code for VS Code phiên bản 2.1.312 hay 2.1.313.
Đưa endpoint vào quy trình incident response. Việc marketplace gỡ bản phát hành không làm sạch những bundle hoặc thay đổi đã tồn tại trên máy.
Rà soát ~/.ssh/authorizedkeys của user liên quan. Tìm comment svc-telemetry, đồng thời kiểm tra các key lạ và lịch sử thay đổi tệp nếu telemetry còn lưu.
Tìm artefact tunnel trong thư mục tạm. Payload ghi private key phục vụ tunnel vào thư mục temporary của hệ điều hành. Tên tệp bắt đầu bằng .stk, theo sau là một phần hash MD5 được tạo từ hostname và đường dẫn home, nên hậu tố sẽ khác nhau theo từng máy.
Điều tra kết nối SSH đi ra ngoài tới 134.209.82[.]225 trên cổng 22, với user từ xa là tunnel.
Đánh giá lại credential và phạm vi dữ liệu. Extension có thể truy cập tệp cục bộ, source code và công cụ phát triển; phạm vi điều tra không nên chỉ giới hạn ở SSH key.
Payload dùng reverse port forwarding với cấu trúc:
text
-R :0:localhost:22
Máy chủ SSH phía ngoài được yêu cầu cấp một cổng lắng nghe động và chuyển traffic qua tunnel về localhost:22 trên máy bị ảnh hưởng. Nếu SSH cục bộ đang chạy, đối tượng vận hành có thể dùng key đã cấy để đăng nhập qua đường hầm này.
Lỗi trên macOS có thể giảm tác động, nhưng không phải biện pháp phòng vệ
Phân tích chỉ ra một lỗi đáng kể trong nhánh macOS. Payload chạy:
text
systemsetup -getremotelogin
bằng user thường, rồi chỉ thử bật Remote Login nếu output khớp với Off.
Tuy nhiên, trên macOS, lệnh kiểm tra này cần quyền quản trị. Khi chạy bằng user thường, nó trả về thông báo yêu cầu quyền administrator thay vì trạng thái Off. Vì vậy, payload không đi vào nhánh bật SSH.
Nếu Remote Login chưa hoạt động, reverse tunnel vẫn có thể kết nối ra ngoài, nhưng traffic quay về localhost:22 sẽ gặp cổng đóng. Ngược lại, nếu Remote Login vốn đã bật hoặc được bật sau đó, key đã cấy vẫn có thể trở thành đường truy cập.
Nhánh Windows cũng có vấn đề riêng: lệnh thiết lập dịch vụ PowerShell bị đưa qua helper hardcode /bin/sh, vốn không phù hợp với một cài đặt Windows tiêu chuẩn.
Các lỗi này có thể làm giảm khả năng tạo shell tương tác trong một số cấu hình. Nhưng đây không phải lý do để hạ mức ưu tiên: persistence, key SSH và hoạt động nhận diện host vẫn là những dấu hiệu nghiêm trọng cần được điều tra.
Bài học cho quy trình cài AI coding extension
Sự cố này nhắc lại rằng extension AI coding là mã thực thi có quyền đáng kể, không đơn thuần là công cụ hỗ trợ giao diện.
Các đội phát triển có thể giảm bề mặt rủi ro bằng cách:
Xem extension như một thành phần thực thi trong chuỗi cung ứng phần mềm.
Ghi nhận marketplace, publisher và phiên bản trước mỗi đợt cập nhật extension.
Tách môi trường thử nghiệm extension hoặc agent khỏi máy có source và credential nhạy cảm khi phù hợp.
Không coi việc extension biến mất khỏi marketplace là bằng chứng endpoint cũ đã an toàn.
Báo sớm cho security hoặc IT nếu từng dùng đúng các phiên bản bị ảnh hưởng, kể cả khi extension hiện đã được cập nhật.
Checklist ngắn: xác minh phiên bản, rà authorizedkeys, tìm artefact .stk, điều tra kết nối tới IP được nêu và đưa endpoint vào quy trình incident response.
Với AI coding assistant, tốc độ cài plugin không được vượt qua tốc độ kiểm soát quyền thực thi.