Extension Claude Code trên Cursor bị cài mã độc, gắn backdoor SSH vào máy lập trình viên
Nội dung bài viết

Ngày 29/10/2026, marketplace extension của Cursor (trình soạn code AI dựa trên VS Code) phân phối một bản Claude Code 2.1.313 đã bị chèn mã độc. Bản này tồn tại khoảng 11 giờ, từ 2:27 tới 13:35 giờ Thái Bình Dương (khoảng 16:27 ngày 29/10 tới 3:35 ngày 30/10 giờ Việt Nam). Theo Cursor, có tối đa khoảng 5.000 người dùng bị ảnh hưởng.

Mã độc không lấy trộm mật khẩu ngay. Thay vào đó, nó thêm khóa SSH của kẻ tấn công vào máy và mở một đường hầm SSH ngược để kẻ tấn công vào máy sau. Vì vậy gỡ extension đi là chưa đủ.

Ai bị ảnh hưởng?

Bản độc là một extension VS Code thông thường. Vì vậy nó chạy được trên mọi editor dựa trên VS Code: Cursor, VS Code, VSCodium, Windsurf... Máy có bị nhiễm hay không phụ thuộc vào nguồn bạn tải extension về:

  • Cursor: đã xác nhận bị ảnh hưởng. Cursor cho biết tối đa khoảng 5.000 người dùng đã nhận bản 2.1.313.
  • Open VSX, kho extension mở mà VSCodium, Windsurf, Gitpod mặc định dùng: Phorion và StepSecurity cho biết bản độc được đăng lên Open VSX rồi Cursor sao chép về. Một số nhà nghiên cứu khác phản bác điều này. Hiện các nguồn chưa thống nhất.
  • VS Code tải extension từ Visual Studio Marketplace của Microsoft: tới ngày 30/10, Marketplace không có bản 2.1.313 và chưa có báo cáo người dùng VS Code nào bị nhiễm. Tuy vậy, StepSecurity ghi nhận Marketplace trả lỗi 404 cho riêng bản 2.1.313 trong khi vẫn phân phối hai bản liền trước và liền sau. Nên chưa thể loại trừ hoàn toàn khả năng bản này từng có mặt trên Marketplace.
  • VS Code nhưng cài extension từ Open VSX hoặc từ file .vsix tải ở nơi khác: có nguy cơ, giống như Open VSX ở trên.
  • Gói npm @anthropic-ai/claude-code (bản Claude Code chạy trong terminal): không bị ảnh hưởng.

Cursor cho biết bản 2.1.313 "không do Anthropic phát triển". Hiện chưa rõ kẻ tấn công đưa được bản độc lên dưới tên Anthropic bằng cách nào. Cách an toàn nhất: dù dùng editor nào, nếu có cài extension Claude Code thì hãy kiểm tra theo hướng dẫn bên dưới. Việc kiểm tra chỉ mất vài phút.

Mã độc làm gì?

Kẻ tấn công giữ nguyên mã của Claude Code, chỉ chèn thêm một đoạn loader vào đầu file extension.js. Đoạn này chạy ngay khi editor nạp extension, người dùng không cần mở hay dùng Claude Code. Sau đó nó:

  1. Thêm khóa SSH của kẻ tấn công, đặt tên svc-telemetry, vào file authorized_keys của người dùng.
  2. Thử bật SSH trên máy và mở đường hầm SSH ngược về máy chủ 134.209.82[.]225. Đường hầm vẫn chạy sau khi tắt editor và tự kết nối lại khoảng mỗi phút.
  3. Tự khởi động cùng máy:
    • macOS: một LaunchAgent đặt tên giống dịch vụ của Apple;
    • Linux: một dòng cron chạy khi khởi động;
    • Windows: một scheduled task tên "SysMon", nếu không được thì dùng thư mục Startup.
  4. Gửi thông tin máy về cho kẻ tấn công: tên máy, tên user, hệ điều hành, thư mục làm việc, email Git, IP công khai, và tên của tối đa 40 biến môi trường trông giống khóa bí mật (ví dụ khóa AWS, Google Cloud). Mã độc gửi tên biến chứ không gửi giá trị, có vẻ để kẻ tấn công chọn máy đáng giá rồi vào tận nơi lấy sau.

Một số máy có thể "thoát" phần nguy hiểm nhất. Trên macOS và Windows, việc bật SSH thường cần quyền admin mà extension không có. Mã độc trên macOS cũng có lỗi khi kiểm tra trạng thái SSH, còn trên Windows thì gọi /bin/sh vốn không có sẵn. Khi đó đường hầm không dùng được. Nhưng nếu máy đã bật SSH sẵn, hoặc là máy Linux, thì kẻ tấn công vẫn có thể vào. Dù SSH có bật hay không, khóa svc-telemetry và các script tự khởi động vẫn đã được cài lên máy.

Cursor đã xử lý thế nào?

Theo thông báo của Cursor:

  • gỡ bản 2.1.313 khỏi marketplace;
  • tạm đóng marketplace để rà soát toàn bộ extension, đổi các khóa truy cập, dựng lại rồi mới mở lại;
  • phối hợp với nhà cung cấp cloud để đánh sập máy chủ của kẻ tấn công;
  • liên hệ với những người dùng bị ảnh hưởng.

Mã độc được phát hiện bởi Phorion và nhóm OpenSourceMalware.

Cách kiểm tra máy của bạn

Nếu bạn có cài extension Claude Code trên Cursor, VS Code hay editor nào khác dựa trên VS Code, và đã mở editor trong khoảng 29-30/10, hãy kiểm tra:

1. Phiên bản extension. Tìm thư mục có tên bắt đầu bằng anthropic.claude-code-2.1.313 trong thư mục extension của editor. Với VS Code là ~/.vscode/extensions, với Cursor là ~/.cursor/extensions; trên Windows, ~ là C:\Users\<tên bạn>. Bản cũ có thể đã bị xóa sau khi cập nhật lên bản mới, nên kể cả khi không thấy thư mục này, vẫn nên làm bước 2 và 3.

2. Khóa SSH lạ. Tìm chuỗi svc-telemetry trong file authorized_keys:

# macOS / Linux
grep svc-telemetry ~/.ssh/authorized_keys
# Windows (PowerShell)
Select-String svc-telemetry $env:USERPROFILE\.ssh\authorized_keys

Có kết quả nghĩa là máy đã bị cài backdoor.

3. Cơ chế tự khởi động.

  • Windows: chạy schtasks /query /tn SysMon, và xem thư mục Startup có script lạ không.
  • Linux: chạy crontab -l, tìm dòng @reboot lạ.
  • macOS: xem các file mới trong ~/Library/LaunchAgents, đặc biệt là com.apple.sysmond.plist (theo StepSecurity), và thư mục ẩn ~/.config/.smt.

4. Log SSH. Phorion khuyên kiểm tra log SSH xem có lượt đăng nhập từ localhost bằng khóa này không. Đó là dấu hiệu đường hầm đã được dùng.

Cursor và Phorion đã công bố lệnh kiểm tra, dọn dẹp và danh sách dấu hiệu nhận biết đầy đủ. Nếu phát hiện bị nhiễm, nên làm theo hướng dẫn gốc của họ.

Nếu máy đã bị nhiễm

  1. Ngắt mạng máy đó để cắt đường hầm SSH.
  2. Xóa khóa svc-telemetry khỏi authorized_keys và xóa các script, task, LaunchAgent, cron mà mã độc tạo ra. Chỉ gỡ extension thì các script này vẫn còn chạy.
  3. Từ một máy sạch, đổi toàn bộ secret có trên máy bị nhiễm: khóa cloud, khóa API, token GitHub/npm, mật khẩu database, các giá trị trong file .env. Đăng xuất các phiên đăng nhập đang mở.
  4. Cân nhắc cài lại máy từ bản sao lưu sạch nếu không chắc đã dọn hết.

Bài học cho người làm web

Đây là vụ tấn công chuỗi cung ứng thứ ba nhắm vào công cụ của lập trình viên chỉ trong tháng 10, sau LiteLLM và Rank Math SEO PRO. Điểm chung: mã độc nằm ngay trong bản cập nhật chính thức của một công cụ quen thuộc, nên thói quen "chỉ cài từ nguồn chính thức" không đủ để tự bảo vệ.

Máy của lập trình viên thường chứa rất nhiều thứ đáng giá: khóa SSH vào server, token GitHub, file .env của cả chục dự án khách hàng. Một vài cách giảm rủi ro:

  • Tắt tự động cập nhật extension, hoặc chờ vài ngày sau khi có bản mới rồi mới cập nhật. Phần lớn bản độc bị phát hiện và gỡ trong vòng một ngày.
  • Chỉ giữ những extension thật sự cần dùng.
  • Không để secret dài hạn nằm rải rác trong .env trên máy cá nhân. Ưu tiên token ngắn hạn và trình quản lý secret.
  • Tắt SSH server trên máy làm việc nếu không cần. Trong vụ này, nhiều máy thoát được chỉ vì SSH không bật.
  • Định kỳ kiểm tra authorized_keys, các tác vụ tự khởi động và kết nối ra ngoài bất thường.

Nguồn tham khảo: BleepingComputer, Help Net Security và StepSecurity.