Ngày 29/10/2026, trong khoảng 11 tiếng, ai dùng Cursor và để extension tự cập nhật có thể đã nhận về một bản Claude Code bị cài cửa hậu. Bản độc hại được đẩy lên Cursor Marketplace dưới đúng định danh anthropic.claude-code, nên nhìn bề ngoài không khác gì một lần cập nhật bình thường. Bài này tóm tắt chuyện gì đã xảy ra, cách kiểm tra máy của bạn và cách dọn dẹp.

Chuyện gì đã xảy ra?

  • Extension: Claude Code for VS Code (anthropic.claude-code), phân phối qua marketplace extension của Cursor.
  • Phiên bản độc hại: 2.1.312 và 2.1.313. Cursor xác nhận hai bản này không phải do Anthropic phát triển.
  • Thời gian: khoảng 2:27 đến 13:35 giờ Thái Bình Dương ngày 29/10/2026 — tức khoảng 16:27 ngày 29/10 đến 03:35 ngày 30/10 giờ Việt Nam.
  • Phạm vi: chưa có bằng chứng các phiên bản khác hay kênh phân phối chính thức (VS Code Marketplace) bị ảnh hưởng.

Sau khi phát hiện, Cursor gỡ bản độc hại, tạm dừng marketplace, kiểm tra lại toàn bộ để chắc chắn không extension nào khác bị chỉnh sửa, xoay vòng khóa, rồi phối hợp với nhà cung cấp hosting đánh sập máy chủ của kẻ tấn công. Công ty bảo mật Phorion là một trong những bên phân tích mẫu sớm nhất.

Mã độc làm gì?

Đoạn mã được chèn vào đầu file extension.js đã minify. Nó chạy ngay khi editor nạp file, trước cả hàm kích hoạt của extension — người dùng không cần bấm gì cả. Sau đó:

  1. Cài khóa SSH của kẻ tấn công vào ~/.ssh/authorized_keys, kèm comment svc-telemetry.
  2. Cố bật SSH server trên máy và mở reverse SSH tunnel ra máy chủ của kẻ tấn công, để từ đó chúng có thể SSH ngược vào máy bạn dù máy nằm sau NAT hay firewall. Tunnel được thử lại mỗi 60 giây, kể cả khi đã đóng editor.
  3. Gửi thông tin trinh sát qua HTTP: hostname, user, hệ điều hành, thư mục làm việc, email Git, IP public và tên các biến môi trường có chứa KEY, TOKEN, SECRET, PASS, AWS, GCP… (chỉ tên, không gửi giá trị — nhưng thế là đủ để biết máy bạn đáng để quay lại).
  4. Cài cơ chế bám trụ để sống sót qua reboot: cron @reboot trên Linux, LaunchAgent giả danh thành phần của Apple trên macOS, scheduled task trên Windows.

Trên máy không có quyền admin, bước bật SSH và tunnel thường thất bại. Nhưng khóa SSH, file bám trụ và dữ liệu trinh sát vẫn được cài/gửi đi. Phorion còn ghi nhận lỗi trong đoạn xử lý crontab của mã độc có thể xóa các cron job sẵn có của bạn trên Linux.

Điểm quan trọng nhất: gỡ extension là chưa đủ. Các script chạy nền và khóa SSH vẫn nằm lại trên máy.

Kiểm tra máy của bạn

Nếu bạn dùng Cursor và extension Claude Code tự cập nhật trong khoảng thời gian trên, hãy kiểm tra ngay. Trên Linux/macOS:

# 1. Có khóa lạ trong authorized_keys không?
grep -n "svc-telemetry" ~/.ssh/authorized_keys

# So theo fingerprint, đừng chỉ tin vào comment
ssh-keygen -lf ~/.ssh/authorized_keys | grep 0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk

# 2. File của mã độc
ls -la ~/.config/.smt ~/.config/.smtk /tmp/.stk_* 2>/dev/null

# 3. Cơ chế bám trụ
crontab -l | grep ".config/.smt"                          # Linux
ls ~/Library/LaunchAgents/com.apple.sysmond.plist         # macOS

# 4. Tunnel đang chạy?
ps aux | grep -E "autossh|ssh -N -R" | grep -v grep

# 5. Phiên bản extension đã cài
ls ~/.cursor/extensions | grep claude-code

Trên Windows, kiểm tra %USERPROFILE%\.ssh\authorized_keys, C:\ProgramData\ssh\administrators_authorized_keys, thư mục %USERPROFILE%\.config\ (file smt.cmd, smtk), scheduled task tên SysMon và file sysmon.cmd trong thư mục Startup.

Dấu hiệu xâm nhập (IoC)

  • IP máy chủ kẻ tấn công: 134.209.82.225 — cổng 22 (reverse tunnel, user tunnel) và cổng 8099 (POST /beacon).
  • Khóa SSH cài vào máy: comment svc-telemetry, fingerprint SHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk.
  • Khóa dùng cho tunnel: comment svc-telemetry-tun, fingerprint SHA256:KOAU57+ZG6u3MG4WwzPzPX2O5YEe9qdOC1Bl+6MVyDQ.
  • File extension.js độc hại (SHA-256): ecb58cb29078d9646ad1dcdbe51526f2d9cfea06be5fb2ab183e8ecc3ab6bf15.
  • Log SSH: đăng nhập bằng public key từ 127.0.0.1 hoặc ::1 kể từ 29/10/2026 — dấu hiệu kẻ tấn công đã đi qua tunnel.

Nếu máy đã dính thì làm gì?

  1. Cô lập máy khỏi mạng nếu có thể.
  2. Dừng tiến trình: kill vòng lặp /bin/sh chạy nền và mọi tiến trình ssh/autossh kết nối tới IP trên.
  3. Gỡ bám trụ: sao lưu crontab trước (crontab -l > ~/crontab.bak) rồi xóa dòng @reboot gọi .config/.smt; trên macOS unload và xóa com.apple.sysmond.plist; trên Windows xóa task SysMon và sysmon.cmd.
  4. Xóa khóa và file: bỏ dòng svc-telemetry khỏi authorized_keys, xóa ~/.config/.smt, ~/.config/.smtk, /tmp/.stk_*. Kiểm tra lại SSH server có đang bị bật ngoài ý muốn không.
  5. Chặn IP 134.209.82.225 ở firewall.
  6. Xoay vòng bí mật: mọi API key, token, mật khẩu, session mà user đó truy cập được — ưu tiên các biến môi trường có tên chứa KEY, TOKEN, SECRET, PASS, AWS, GCP vì đúng những tên này đã bị gửi đi.
  7. Cập nhật extension lên bản sạch mới nhất. Nếu thấy dấu hiệu đã có người đăng nhập qua tunnel, cân nhắc cài lại máy thay vì chỉ dọn dẹp.

Cursor đã phát hành script dọn dẹp cho macOS và Windows kèm thông báo bảo mật của họ. Với Linux, hãy làm thủ công theo các bước trên.

Ghi chú của tôi

Extension của editor chạy với đúng quyền của bạn: đọc được mã nguồn, file .env, khóa SSH và mọi thứ trong home. Vậy mà phần lớn chúng ta để nó tự cập nhật mà không nghĩ ngợi. Vụ này không cần lỗ hổng nào trong code của Claude Code — chỉ cần một bản cập nhật mạo danh lọt được vào marketplace.

Vài thói quen nên có, nhất là với máy làm việc có quyền vào production:

  • Tắt tự cập nhật extension trên máy nhạy cảm; cập nhật có chủ đích và ghim phiên bản.
  • Với team: giữ danh sách extension được phép dùng.
  • Đừng để secret production nằm sẵn trong biến môi trường của máy dev; dùng secret manager hoặc nạp khi cần.
  • Thỉnh thoảng nhìn lại ~/.ssh/authorized_keys và crontab -l — hai chỗ kẻ tấn công rất thích nhưng ít ai để ý.

Tham khảo