Logo
Extension Claude Code 2.1.313 cài backdoor SSH vào máy dev: Kiểm tra ngay trước khi quá muộn

Extension Claude Code 2.1.313 cài backdoor SSH vào máy dev: Kiểm tra ngay trước khi quá muộn

tobi
tobi•• … views

Nếu bạn đang dùng Claude Code dạng extension trong Cursor hoặc các editor họ VS Code, hãy dành 5 phút đọc bài này. Ngày 29/10/2026, một bản build bị cài cắm của extension chính thức Claude Code — phiên bản 2.1.313, mang đúng định danh nhà phát hành anthropic.claude-code — đã được phân phối qua marketplace của Cursor trong khoảng 11 giờ. Bản build này chủ động cài backdoor SSH lên máy lập trình viên: cắm key lạ vào ~/.ssh/authorized_keys, mở đường hầm kết nối ngược về server của kẻ tấn công và cài cơ chế sống sót qua mỗi lần khởi động lại máy.

Cursor xác nhận tối đa khoảng 5.000 người dùng bị ảnh hưởng. Mọi thứ diễn ra âm thầm: extension vẫn hoạt động bình thường, bạn không cần mở một cuộc trò chuyện Claude nào thì mã độc cũng đã chạy. Bài này tóm tắt sự việc, cách mã độc hoạt động, và quan trọng nhất là hướng dẫn bạn tự kiểm tra máy từng bước — cùng cách xử lý nếu chẳng may dính phải.

1. Chuyện gì vừa xảy ra?

Theo thông báo của Cursor và phân tích của Phorion cùng OpenSourceMalware, bản extension Claude Code 2.1.313 bị chèn thêm mã độc vào file extension.js trước khi đến tay người dùng. Bản độc xuất hiện trên marketplace của Cursor từ khoảng 2 giờ 27 phút sáng đến 1 giờ 35 phút chiều ngày 29/10/2026 (giờ Thái Bình Dương) — tức khoảng 11 giờ — và ai cài mới hoặc để extension tự cập nhật trong khung giờ đó đều có thể đã nhận phải.

Vài điểm cần nói rõ để tránh hoang mang sai chỗ:

  • Đây là bản build bị cài cắm, không phải do Anthropic phát hành. Cursor khẳng định bản độc “không phải do Anthropic phát triển”, và cách thức kẻ tấn công đưa được bản cập nhật trái phép này lên marketplace vẫn chưa được làm rõ.
  • Kênh phân phối được xác nhận là marketplace của Cursor. Một số bài báo đầu tiên nhắc tới Open VSX khiến người dùng editor khác lo lắng; The Hacker News sau đó đã đính chính, và tới nay chưa có bằng chứng cho thấy bản trên Open VSX hay kho chính thức của Microsoft bị cài cắm.
  • Phản ứng của Cursor: gỡ bản độc ngay khi phát hiện, tạm đóng toàn bộ marketplace để rà soát (xác nhận không còn extension nào khác bị sửa), thay key, dựng lại marketplace, và phối hợp với nhà cung cấp hosting để đánh sập server của kẻ tấn công — khiến đường hầm và kênh gửi dữ liệu ngừng hoạt động.
  • Ngày 30/10, Anthropic đã phát hành bản sạch 2.1.314 lên Open VSX và Microsoft VS Code Marketplace.

2. Mã độc hoạt động như thế nào?

Theo phân tích của OpenSourceMalware, file extension.js của bản độc bị chèn một “loader” JavaScript dài 66 dòng ở ngay phần đầu, tự thực thi ngay khi được nạp (IIFE) — trước cả hàm activate của extension. Bạn không cần tương tác gì, mã độc vẫn kích hoạt mỗi khi editor khởi động hoặc webview của extension được mở. Sau khi chạy, nó làm 4 việc:

Một, cắm key SSH của kẻ tấn công. Mã độc thêm một public key Ed25519 vào cuối file ~/.ssh/authorized_keys của bạn, với phần comment là svc-telemetry — một cái tên cố tình nghe như key phục vụ đo đạc hệ thống để bạn dễ bỏ qua khi rà soát. Nó còn cẩn thận đặt quyền 0700 cho thư mục .ssh và 0600 cho file authorized_keys để trông giống một cấu hình SSH “chuẩn chỉnh”.

Hai, mở đường hầm ngược về server lạ. Nó giải mã một private key được nhúng sẵn vào file tạm dạng .stk_, rồi kết nối tới tunnel@134.209.82.225 và yêu cầu chuyển tiếp ngược (reverse forwarding) về cổng 22 trên máy bạn. Hiểu đơn giản: dù máy bạn ở sau NAT hay firewall, kẻ tấn công vẫn có một lối đi tới dịch vụ SSH trên máy bạn. Đường hầm tự kết nối lại sau khoảng 60 giây khi bị ngắt, ưu tiên dùng autossh nếu có.

Ba, cài cơ chế bám trụ (persistence). Để sống sót sau khi bạn tắt editor hay khởi động lại máy, mã độc cài riêng cho từng hệ điều hành: trên macOS là LaunchAgent tên com.apple.sysmond.plist (giả danh thành phần của Apple) cùng các file ~/.config/.smt và ~/.config/.smtk; trên Linux là một dòng cron @reboot; trên Windows là scheduled task tên SysMon chạy với quyền SYSTEM, kèm script dự phòng trong thư mục Startup.

Bốn, gửi thông tin máy về server điều khiển. Chỉ khoảng 1,5 giây sau khi chạy, nó gửi một gói HTTP không mã hoá tới cổng 8099 của server kẻ tấn công, chứa: tên máy, tên người dùng, hệ điều hành và kiến trúc CPU, thư mục home và thư mục làm việc, email Git trong cấu hình toàn cục, IP public, và tên của tối đa 40 biến môi trường chứa các từ khoá như KEY, TOKEN, SECRET, PASS, AWS, GCP. Giá trị của các biến không bị gửi trong gói đầu tiên này, nhưng danh sách tên đó đủ để kẻ tấn công biết máy nào đang giữ credential AWS, token CI hay key API đáng giá để quay lại trước.

Minh họa 3D isometric: laptop của lập trình viên bị mở tung với chiếc chìa khoá lạ phát sáng phía trên, kỹ sư đang dùng kính lúp kiểm tra bên trong máy

Máy dev là mục tiêu giá trị cao: trên đó thường có sẵn SSH key, token GitHub, credential cloud và quyền truy cập vào hạ tầng công ty — đúng những thứ mã độc này nhắm tới.

3. Ai bị ảnh hưởng, ai không cần lo?

Đối tượng Trạng thái
Cài/cập nhật Claude Code 2.1.313 qua Cursor Marketplace trong ngày 29/10 Có nguy cơ cao — cần kiểm tra ngay theo mục 5
Dùng Claude Code qua Open VSX Chưa có bằng chứng bị ảnh hưởng; vẫn nên kiểm tra key lạ cho chắc
Dùng qua Microsoft VS Code Marketplace Chưa có bằng chứng bị ảnh hưởng
Dùng Claude Code dạng CLI (terminal, cài qua npm) Không liên quan đến sự cố này
Đã ở phiên bản khác 2.1.313 trong suốt ngày 29/10 Không thuộc diện bị ảnh hưởng của đợt này

Hai lưu ý. Thứ nhất, “tối đa 5.000 người” là ước tính của Cursor về lượng người đã cài bản độc trong cửa sổ 11 giờ — không có nghĩa cứ dùng Cursor là dính. Thứ hai, nếu bạn bật tự động cập nhật extension (auto-update, vốn là mặc định) thì nguy cơ “vô tình nhận bản độc” cao hơn nhiều, vì bạn không hề bấm nút cập nhật nào cả. Đây cũng là lý do sự cố này được giới bảo mật bàn tán sôi nổi: nó đánh đúng vào thói quen tin tưởng cập nhật tự động của dân dev.

4. Vì sao chưa chắc kẻ tấn công đã vào được máy bạn?

Có một chi tiết kỹ thuật giúp giảm bớt phần nào thiệt hại. Để đăng nhập được qua đường hầm, dịch vụ SSH trên máy nạn nhân phải đang bật. Mã độc có cố tự bật SSH (Remote Login trên macOS, dịch vụ SSH trên Linux, OpenSSH Server trên Windows), nhưng việc này cần quyền quản trị mà extension không có trên phần lớn máy Mac và Windows. Riêng trên macOS, Phorion còn phát hiện đoạn mã kiểm tra trạng thái Remote Login bị lỗi logic, khiến bước bật SSH thường bị bỏ qua. Nói cách khác, trên nhiều máy, kẻ tấn công chưa chắc đã đăng nhập được qua backdoor này.

Nhưng đừng vội thở phào: 3 thứ còn lại vẫn chạy trót lọt mà không cần quyền admin — key lạ vẫn nằm trong authorized_keys, persistence vẫn được cài, và thông tin máy vẫn bị gửi về server điều khiển. Nếu sau này bạn tự bật Remote Login, hay máy bạn vốn đã chạy SSH server sẵn (rất phổ biến với máy Linux và máy dev/VPS), cánh cửa đó sẽ mở ngay lập tức. Cursor cũng khuyến cáo rõ: dù khả năng bị đăng nhập thấp trên Mac/Windows, người dùng vẫn phải làm đủ các bước khắc phục ở mục 5 và 6.

5. Tự kiểm tra máy trong 5 phút

Bước 1: Kiểm tra phiên bản extension đã cài

Mở Cursor (hoặc editor bạn dùng), vào mục Extensions, tìm “Claude Code” và xem số phiên bản. Nếu là 2.1.313, bạn thuộc diện cần xử lý ngay. Trên macOS/Linux, bạn cũng có thể kiểm tra thư mục extension bằng lệnh:

ls ~/.cursor/extensions/ | grep -i claude

Nếu thấy thư mục dạng anthropic.claude-code-2.1.313..., đó chính là bản độc.

Bước 2: Tìm key lạ “svc-telemetry”

Đây là dấu hiệu nhận biết quan trọng nhất. Chạy lệnh:

grep -n "svc-telemetry" ~/.ssh/authorized_keys

Nếu không có kết quả, máy bạn không có key lạ này. Nếu hiện ra một dòng key Ed25519 với comment svc-telemetry, máy đã bị cắm key. Fingerprint của key kẻ tấn công được công bố là SHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk — bạn có thể đối chiếu thêm bằng lệnh ssh-keygen -lf ~/.ssh/authorized_keys. Trên Windows, kiểm tra cả file C:\ProgramData\ssh\administrators_authorized_keys bên cạnh file authorized_keys của user.

Bước 3: Kiểm tra persistence và tiến trình lạ

Tìm các file/script bám trụ mà mã độc để lại:

ls -la ~/.config/.smt*
ls ~/Library/LaunchAgents/
crontab -l | grep -i reboot
ps aux | grep -E "autossh|ssh -R" | grep -v grep

Trên macOS, LaunchAgent tên com.apple.sysmond.plist là hàng giả. Trên Linux, hãy để ý dòng cron @reboot trỏ tới script lạ trong ~/.config. Trên Windows, mở Task Scheduler tìm task tên SysMon và kiểm tra thư mục Startup xem có file sysmon.cmd hay không. Tiến trình ssh/autossh nào đang giữ reverse tunnel tới địa chỉ lạ cũng là dấu hiệu đỏ.

Để bạn hình dung output khi máy “có vấn đề” trông như thế nào, mình đã dựng một thư mục home giả lập với file authorized_keys chứa sẵn key mẫu svc-telemetry, rồi chạy thật các lệnh kiểm tra ở trên trong môi trường giả lập đó:

Ảnh chụp terminal thật: lệnh grep tìm thấy key svc-telemetry ở dòng 3 của authorized_keys, lệnh ls thấy hai file .smt và .smtk, thư mục LaunchAgents chứa com.apple.sysmond.plist

Kết quả chạy thật trong môi trường giả lập: grep báo key lạ nằm ở dòng 3, hai file .smt/.smtk tồn tại trong ~/.config, và LaunchAgent giả danh Apple xuất hiện. Trên máy thật của bạn, nếu các lệnh này “im lặng” thì đó mới là tin tốt.

Bước 4: Kiểm tra log đăng nhập SSH

Nếu máy từng bật SSH, hãy rà log xác thực để xem có phiên đăng nhập lạ từ chính localhost (đặc trưng của đường hầm ngược) hay không. Trên Linux: sudo grep -i "accepted" /var/log/auth.log (hoặc /var/log/secure trên họ RHEL), tìm các dòng đăng nhập bằng key svc-telemetry hoặc vào giờ giấc bất thường. Trên macOS, Phorion cũng gợi ý kiểm tra log SSH tương tự.

6. Dính rồi thì xử lý thế nào?

Nếu phát hiện key svc-telemetry hoặc bất kỳ dấu hiệu nào ở mục 5, hãy xử lý theo thứ tự sau — và nhớ là gỡ extension không thôi là chưa đủ, vì các script bám trụ được thả ra độc lập và vẫn tiếp tục chạy:

  1. Cách ly máy: ngắt mạng hoặc ít nhất chặn kết nối tới 134.209.82.225 (cổng 22 và 8099) trong lúc xử lý.
  2. Dùng script khắc phục chính thức của Cursor: remediate-macos.sh cho macOS (chạy bằng chính user bị ảnh hưởng, không chạy bằng root) và remediate-windows.ps1 cho Windows (chạy trong PowerShell với quyền admin). Các script này gỡ extension độc, xoá persistence, tắt tiến trình tunnel và gỡ key lạ; chúng trả về mã lỗi khác 0 nếu vẫn còn sót thứ gì đó.
  3. Nếu tự làm thủ công: xoá dòng key svc-telemetry khỏi authorized_keys; xoá các file ~/.config/.smt, ~/.config/.smtk (và smt.cmd/smtk trên Windows); xoá LaunchAgent com.apple.sysmond.plist hoặc dòng cron @reboot lạ hoặc task SysMon; kill tiến trình ssh/autossh giữ tunnel.
  4. Cập nhật lên bản sạch 2.1.314 từ kênh phân phối chính thức, hoặc cài lại extension từ đầu, thay vì tiếp tục dùng bản 2.1.313 đã bị sửa.
  5. Xoay vòng credential từ một máy sạch: đổi các token, key API, credential cloud và phiên đăng nhập mà máy dính độc có thể chạm tới. Hãy thực hiện việc này từ thiết bị khác đáng tin — đừng đổi mật khẩu ngay trên máy đang nghi bị kiểm soát.
  6. Cân nhắc dựng lại máy (rebuild): nếu máy giữ nhiều credential quan trọng hoặc bạn không chắc đã dọn sạch, dựng lại hệ điều hành là lựa chọn an toàn nhất theo khuyến nghị của chính Cursor. Server điều khiển của kẻ tấn công đã bị đánh sập, nhưng điều đó không xoá được những gì đã cài trên máy bạn.

Bảng dưới đây tóm tắt các dấu hiệu nhận biết (IoC) chính đã được công bố, tiện cho bạn hoặc đội IT mang đi đối chiếu:

Loại dấu hiệu Giá trị
Extension độc anthropic.claude-code phiên bản 2.1.313
Comment của key lạ svc-telemetry
Fingerprint key lạ SHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk
Server điều khiển (C2) 134.209.82.225 (SSH cổng 22, beacon HTTP cổng 8099)
File bám trụ Unix ~/.config/.smt, ~/.config/.smtk, file tạm .stk_*
Persistence macOS LaunchAgent com.apple.sysmond.plist
Persistence Linux Dòng cron @reboot lạ
Persistence Windows Scheduled task SysMon, script sysmon.cmd ở Startup
SHA-256 của extension.js độc ecb58cb29078d9646ad1dcdbe51526f2d9cfea06be5fb2ab183e8ecc3ab6bf15

7. Bài học supply-chain cho dev dùng AI tools

Sự cố này không phải lần đầu chuỗi cung ứng phần mềm cho dev bị đánh — trước đó không lâu là vụ Nx Console và loạt extension trên Open VSX bị lợi dụng. Nhưng vụ Claude Code 2.1.313 khiến nhiều người giật mình ở một điểm: không có extension giả mạo nào để mà cảnh giác. Bản độc mang đúng tên, đúng nhà phát hành thật — thói quen kiểm tra “publisher” hoàn toàn vô tác dụng. Cái cần theo dõi là hành vi của phần mềm: một extension hỗ trợ viết code không có lý do gì lại đi ghi SSH key vào máy bạn.

Vài thói quen đáng áp dụng ngay cho bất kỳ ai dùng AI coding tools và extension nói chung:

  • Đừng để auto-update chạy mù quáng với extension nhạy cảm. Với các extension có quyền chạy lệnh trên máy (AI agent, terminal tích hợp…), cân nhắc tắt tự cập nhật và chỉ nâng cấp sau khi bản mới “nguội” vài ngày — đủ lâu để cộng đồng phát hiện bất thường nếu có.
  • Định kỳ rà ~/.ssh/authorized_keys. File này ngắn và hiếm khi thay đổi; một dòng key lạ là tín hiệu đỏ rõ ràng nhất, và thói quen kiểm tra mỗi tháng một lần rẻ hơn mọi giải pháp bảo mật.
  • Tách môi trường chứa secret. Đừng dùng chính máy/cấu hình chứa credential production để thử extension mới — container, VM hoặc user riêng giúp giới hạn thiệt hại khi có sự cố.
  • Theo dõi kênh thông báo bảo mật của công cụ bạn dùng mỗi ngày. Cursor công bố sự cố khá nhanh kèm script khắc phục — nhưng thông tin đó chỉ hữu ích nếu bạn đọc được trong những ngày đầu.

Minh họa 3D isometric: chuỗi cung ứng phần mềm với các hộp package chạy trên băng chuyền, được bao phủ bởi vòm khiên bảo vệ phát sáng, kỹ sư đang quét kiểm tra từng gói hàng

Chuỗi cung ứng phần mềm hiện đại chạy qua marketplace và cơ chế tự cập nhật: chỉ cần một mắt xích bị cài cắm, mã độc đến được hàng nghìn máy dev trong vài giờ.

8. FAQ

Tôi dùng Claude Code trên terminal (CLI) thì có sao không?

Không. Sự cố này chỉ liên quan tới bản extension cho editor (Cursor Marketplace). Bản CLI cài qua npm và các kênh phân phối chính thức khác không nằm trong diện bị ảnh hưởng được công bố.

Tôi dùng Cursor nhưng không nhớ đã cập nhật hôm 29/10. Kiểm tra thế nào nhanh nhất?

Chạy lệnh grep -n "svc-telemetry" ~/.ssh/authorized_keys. Có key lạ là dấu hiệu chắc chắn nhất cần xử lý; đồng thời xem phiên bản extension theo Bước 1 ở mục 5 để biết máy có từng ở bản 2.1.313 hay không.

Gỡ extension 2.1.313 đi là xong đúng không?

Không. Mã độc thả các script bám trụ độc lập bên ngoài thư mục extension, và key SSH lạ nằm trong file của hệ điều hành chứ không thuộc extension. Gỡ extension xong vẫn phải xoá key, persistence và tiến trình tunnel như mục 6.

Server của kẻ tấn công đã bị đánh sập thì có còn nguy hiểm không?

Kênh điều khiển đã ngừng hoạt động giúp giảm rủi ro tức thời, nhưng key lạ và persistence trên máy bạn vẫn còn đó, và không ai đảm bảo kẻ tấn công không dựng server mới hay đã kịp ghi nhận thông tin máy của bạn. Hãy cứ làm đủ các bước khắc phục.

Tôi nên cập nhật lên phiên bản nào?

Bản sạch 2.1.314 do Anthropic phát hành ngày 30/10 trên Open VSX và Microsoft VS Code Marketplace. Hãy cập nhật từ kênh chính thức và kiểm tra lại máy theo mục 5 sau khi cập nhật.

9. Kết luận

Vụ extension Claude Code 2.1.313 là lời nhắc rõ ràng rằng máy dev chính là “mặt trận” mới của tấn công chuỗi cung ứng: chỉ một bản cập nhật bị cài cắm trong 11 giờ đã chạm tới tối đa 5.000 lập trình viên, cắm sẵn chìa khoá SSH và cơ chế bám trụ trên máy họ. May mắn là dấu hiệu nhận biết của vụ này rất cụ thể — một dòng key với comment svc-telemetry — và chỉ cần vài lệnh kiểm tra là bạn biết máy mình có sạch hay không. Hãy dành 5 phút chạy qua mục 5 ngay hôm nay, cập nhật lên bản 2.1.314, và biến việc rà soát authorized_keys thành thói quen.

Nguồn tham khảo

Chuyên mục:Cybersecurity

Bình luận (0)

+ =
Zalo