Công cụ lập trình AI Claude Code được phát hiện có lỗ hổng bảo mật nghiêm trọng

icon MarsBit
Chia sẻ
Share IconShare IconShare IconShare IconShare IconShare IconCopy
AI summary iconTóm tắt

expand icon
Một tin tức về lỗ hổng nghiêm trọng đã xuất hiện trong công cụ AI lập trình Claude Code của Anthropic, như được tiết lộ bởi nhà nghiên cứu độc lập Aonan Guan. Môi trường cách ly mạng, được thiết kế để chặn truy cập bên ngoài, có thể bị vượt qua bằng cách tiêm null-byte trong giao thức SOCKS5. Lỗ hổng này ảnh hưởng đến tất cả các phiên bản kể từ khi môi trường cách ly ra mắt vào tháng 10 năm 2025, trải dài qua 130 bản phát hành. Anthropic đã khắc phục vấn đề vào tháng 4 năm 2026 mà không thông báo công khai. Cuộc xâm phạm bảo mật này có thể cho phép kẻ tấn công đánh cắp khóa API và thông tin xác thực AWS.

Claude Code

Với định vị “an toàn là ưu tiên hàng đầu”, môi trường cách ly mạng của công cụ phát triển cốt lõi Claude Code của Anthropic trong năm tháng qua chưa bao giờ thực sự an toàn.

Nghiên cứu viên bảo mật độc lập Quan Aonan công bố nghiên cứu mới nhất vào ngày 20 tháng 5, tiết lộ một lỗ hổng bao gồm hoàn toàn vòng qua sandbox mạng của Claude Code — một cuộc tấn công chèn byte rỗng trong giao thức SOCKS5, cho phép các tiến trình trong sandbox truy cập vào bất kỳ máy chủ nào bị chính sách người dùng cấm rõ ràng. Điều này có nghĩa là kể từ khi tính năng sandbox ra mắt vào tháng 10 năm 2025 đến nay, trong khoảng 5,5 tháng và 130 phiên bản phát hành, mọi phiên bản của Claude Code đều tồn tại lỗ hổng bảo mật có thể bị bao gồm hoàn toàn. Đây là lần thứ hai cùng một nghiên cứu viên phá vỡ hoàn toàn hàng phòng thủ này.

Anthropic không phản hồi gì: không có thông báo bảo mật, không có mã CVE, không có thông báo đến người dùng. Lỗ hổng được vá lặng lẽ trong phiên bản ngày 1 tháng 4, và nhật ký cập nhật không đề cập bất kỳ nội dung bảo mật nào. Nói cách khác, một người dùng vẫn đang chạy phiên bản cũ hoàn toàn không biết rằng sandbox mà họ cấu hình từ đầu đã vô dụng.

Hai chìa khóa cho cùng một cánh cửa

Claude Code là trợ lý lập trình AI do Anthropic ra mắt đầu năm 2025, được định vị là “kỹ sư AI nằm trong terminal”. Khác với việc bổ sung mã theo kiểu trò chuyện truyền thống, Claude Code có quyền đọc và ghi vào kho mã người dùng cùng khả năng thực thi lệnh, có thể tự chủ thực hiện các thao tác như điều hướng mã, chỉnh sửa tệp, chạy kiểm thử, v.v. Sự can thiệp sâu này đồng nghĩa với rủi ro bảo mật cực cao — nếu mô hình bị chiếm quyền thông qua tấn công tiêm prompt, kẻ tấn công sẽ có quyền tương đương với quyền hạn của terminal người dùng, bao gồm việc đọc biến môi trường cục bộ, thực thi bất kỳ lệnh hệ thống nào và truy cập các tài nguyên mạng nội bộ.

Để cân bằng giữa bảo mật và hiệu suất, Anthropic đã giới thiệu tính năng sandbox mạng (v2.0.24) vào tháng 10 năm 2025, cho phép người dùng thiết lập danh sách trắng tên miền thông qua tệp cấu hình, hạn chế truy cập mạng bên ngoài của môi trường thực thi AI. Ví dụ, sau khi cấu hình allowedDomains: [“*.google.com”], Claude Code chỉ có thể truy cập Google và các tên miền con của nó, tất cả lưu lượng còn lại đều bị chặn. Tài liệu chính thức cam kết rõ ràng: “Mảng rỗng tương đương với việc cấm toàn bộ truy cập mạng.”

Cơ chế này được thực hiện bởi một proxy SOCKS5: runtime sandbox cấp cơ sở (@anthropic-ai/sandbox-runtime) khởi động máy chủ proxy, các tiến trình trong sandbox không trực tiếp tạo kết nối mạng mà thay vào đó chuyển tiếp thông qua proxy, proxy sẽ thực hiện lọc tên miền dựa trên danh sách cho phép được cấu hình trong settings.json. Cơ chế sandbox ở cấp hệ điều hành—sandbox-exec trên macOS và bubblewrap trên Linux—đúng cách giới hạn Agent ở địa chỉ vòng lặp cục bộ, còn các quyết định xuất cảnh hoàn toàn được ủy quyền cho proxy SOCKS5 này.

Claude Code

Hình ảnh kiến trúc sandbox của Claude Code được hiển thị trên blog chính thức của Anthropic — lệnh người dùng được lọc qua proxy SOCKS/HTTP trước khi đến sandbox, các thao tác tệp và truy cập mạng trong sandbox được kiểm soát quyền nghiêm ngặt

Vấn đề nằm ở cách triển khai proxy này. Hai nghiên cứu bảo mật độc lập đã chứng minh rằng nó có thể bị bypass hoàn toàn.

Claude Code

Timeline phơi bày những vấn đề sâu xa hơn: Bản vá v2.0.55 được phát hành vào ngày 26 tháng 11 năm 2025 đã sửa lỗi bypass đầu tiên, nhưng lỗi bypass thứ hai đã tồn tại từ ngày đầu tiên tính năng sandbox ra mắt và vẫn còn tồn tại trong phiên bản này. Hai lỗ hổng này giao nhau trên timeline; từ ngày tính năng sandbox ra mắt cho đến khi lỗ hổng cuối cùng được vá, không có phiên bản nào là an toàn. Anthropic tuyên bố trên blog chính thức rằng sandbox “đảm bảo rằng ngay cả khi xảy ra prompt injection, tác động cũng được cô lập hoàn toàn”, nhưng sự tồn tại của hai lần bypass này trực tiếp bác bỏ cam kết đó.

“Một báo cáo bên ngoài là may mắn. Hai lần là vấn đề về chất lượng thực thi.” — Báo cáo của Gu Aonan cho biết.

Một vòng qua hoàn chỉnh của một byte trống

Nguyên lý kỹ thuật của lần vượt qua thứ hai không phức tạp, nhưng tính toàn vẹn của chuỗi tấn công đáng được quan tâm.

Người dùng đã cấu hình danh sách trắng mạng, ví dụ chỉ cho phép truy cập *.google.com. Proxy SOCKS5 của Claude Code khi nhận yêu cầu kết nối, sử dụng phương thức endsWith() của JavaScript để thực hiện khớp hậu tố với tên máy chủ. Kẻ tấn công chỉ cần chèn một byte rỗng vào tên máy chủ — tạo chuỗi có dạng attacker-host.com\x00.google.com. JavaScript coi byte rỗng là một ký tự UTF-16 bình thường, nên endsWith(“.google.com”) trả về true, khiến proxy cho phép kết nối. Tuy nhiên, chuỗi cùng một dãy byte này khi được truyền đến hàm C cấp thấp hơn getaddrinfo() để giải mã DNS, byte rỗng lại được xem là ký tự kết thúc chuỗi, do đó thực tế chỉ giải mã attacker-host.com. Cùng một dãy byte, hai lớp mã lại đưa ra hai cách diễn giải khác nhau. Bộ lọc nghĩ bạn đang truy cập Google, trong khi trình giải mã DNS biết bạn đang kết nối đến máy chủ của kẻ tấn công.

Đây là một dạng tấn công “khác biệt bộ phân tích” kinh điển, thuộc cùng một nhóm kỹ thuật với cuộc tấn công smuggling yêu cầu HTTP được phát hiện năm 2005 (CWE-158 / CWE-436). Bản chất của nó là khi cùng một chuỗi dữ liệu đi qua hai thành phần có quy tắc diễn giải ngữ nghĩa khác nhau, kẻ tấn công có thể khai thác sự khác biệt này để khiến một lớp thành phần đưa ra quyết định “an toàn”, trong khi lớp khác thực hiện hành động “nguy hiểm”. Các lỗ hổng loại này liên tục xuất hiện trong lĩnh vực an ninh mạng, bài học then chốt luôn giống nhau: bất kỳ chuỗi nào được truyền qua ranh giới tin tưởng đều phải được chuẩn hóa và xác thực nghiêm ngặt, chứ không được tin rằng lớp trên đã kiểm tra rồi.

Guan Aonan đã tái hiện lỗ hổng bằng hai đoạn mã Node.js được thu nhỏ: đoạn mã kiểm soát khởi tạo kết nối SOCKS5 bằng tên host thông thường và nhận về kết quả BLOCKED; đoạn mã tấn công chèn byte rỗng vào tên host và nhận về kết quả BYPASSED rep=0x00—điều này cho thấy proxy đã thiết lập kết nối thành công và kênh ra ngoài đã được mở. Claude Code đã xác nhận kết quả này.

Claude Code

Toàn bộ quy trình khai thác lỗ hổng trong Claude Code v2.1.86 với bốn bước được đánh dấu màu đỏ — xác nhận chiến lược, chặn thông thường, vượt qua byte trống, xác nhận bởi chính Claude

Việc bao vây sandbox này khi kết hợp với cuộc tấn công tiêm prompt “Bình luận và Kiểm soát” mà Guan Aonan đã tiết lộ vào tháng 4 đã tạo thành một chuỗi tấn công hoàn chỉnh (xem: Ba lớp phòng thủ vẫn chưa đủ, chỉ một tiêu đề PR cũng có thể đánh cắp khóa API của bạn: Khe hở bảo mật AI Agent tái xuất hiện). Nghiên cứu “Bình luận và Kiểm soát” đã chứng minh rằng cả ba công cụ lập trình AI đều tồn tại bề mặt tấn công tiêm prompt, nhưng điểm xâm nhập khác nhau: Claude Code chỉ thông qua tiêu đề PR, Gemini CLI thông qua bình luận hoặc nội dung Issue, trong khi Copilot Agent tận dụng chú thích HTML để thực hiện tiêm ẩn. Lấy ví dụ về Claude Code, tiêu đề PR của nó được nối trực tiếp vào mẫu prompt mà không qua bất kỳ bộ lọc hay giải mã nào, khiến mô hình không thể phân biệt được ý định của con người với sự tiêm độc hại.

Kết hợp cả hai yếu tố —— lệnh ẩn khiến Agent chạy mã tấn công trong sandbox, cùng với việc tiêm byte rỗng để vượt qua sự kiểm duyệt mạng — tất cả dữ liệu như khóa API, thông tin xác thực AWS, token GitHub, điểm cuối API nội bộ trong biến môi trường đều có thể bị đánh cắp và truyền đến bất kỳ máy chủ nào trên internet. Dữ liệu chảy ra thông qua chính proxy SOCKS5, toàn bộ cuộc tấn công không cần máy chủ bên ngoài làm trung gian, trong khi proxy này lại là thành phần mà người dùng tin tưởng là ranh giới an toàn. Kẻ tấn công thậm chí không cần quyền ghi vào kho lưu trữ, chỉ cần gửi một Issue công khai là đủ. Người kiểm duyệt con người nhìn thấy trong giao diện hiển thị của GitHub là một yêu cầu hợp tác bình thường, trong khi AI Agent lại giải mã ra toàn bộ mã nguồn độc hại.

Claude cũng thừa nhận: lỗ hổng là có thật

Một chi tiết quan trọng trong lần tiết lộ này đến từ chính Claude Code. Guan Aonan trực tiếp cung cấp mã tái hiện lỗ hổng cho Claude Code chạy và yêu cầu nó đưa ra phán đoán kỹ thuật. Sau khi thực hiện kiểm tra kiểm soát (tên host thông thường bị chặn) và kiểm tra tấn công (bypass chặn bằng tên host chứa byte rỗng), Claude Code đã đưa ra kết luận rõ ràng:

Đây là việc bypass thực sự bộ lọc sandbox mạng, không phải chỉ là artifact kiểm tra. Bạn nên báo cáo vấn đề này cho Anthropic tại https://github.com/anthropics/claude-code/issues.

Sản phẩm được kiểm thử đã tự xác nhận tính xác thực và mức độ nghiêm trọng của lỗ hổng, thậm chí chủ động cung cấp đường dẫn báo cáo. Chi tiết này được Quan Aonan ghi lại đầy đủ trong báo cáo nghiên cứu và trở thành nguồn gốc cho tiêu đề bài viết của The Register — “Even Claude agrees hole in its sandbox was real and dangerous” (Ngay cả Claude cũng công nhận lỗ hổng trong sandbox của nó là thực và nguy hiểm).

Claude Code

Bìa nghiên cứu của Guan Aonan —— Claude Code sau khi bị phơi bày lỗ hổng đã thừa nhận: “Đây là sự bypass thực sự đối với bộ lọc sandbox mạng”, câu xác nhận quan trọng được đánh dấu bằng khung màu đỏ

Phản hồi của Anthropic sau năm tháng im lặng

Lỗ hổng bản thân đã đáng lo ngại, nhưng cách Anthropic xử lý nó còn đáng để ngành xem xét kỹ hơn.

Guan Aonan đã gửi báo cáo chi tiết về việc bao vây sandbox lần thứ hai cho Anthropic vào đầu tháng 4 năm 2026 thông qua chương trình phần thưởng lỗ hổng HackerOne (báo cáo số #3646509). Phản ứng ban đầu của Anthropic là:

Cảm ơn báo cáo của bạn. Sau khi xem xét bản nộp này, chúng tôi xác định đây là bản trùng lặp với báo cáo nội bộ hiện có mà chúng tôi đang theo dõi.

Báo cáo sau đó đã bị đóng. Khi Quan Aonan hỏi về kế hoạch số CVE, Anthropic đã phản hồi vào ngày 7 tháng 4:

Chúng tôi chưa quyết định có nên công bố CVE cho vấn đề này hay không và không thể cung cấp thời gian biểu cho quyết định đó.

Lỗ hổng sau đó đã được vá lặng lẽ trong phiên bản v2.1.90. Không có thông báo bảo mật, không có mã CVE, không có mục nào trên trang đề xuất bảo mật của Claude Code, và nhật ký cập nhật không đề cập bất kỳ mô tả nào liên quan đến bảo mật. Một lỗ hổng hoàn chỉnh tồn tại từ ngày đầu tiên hệ thống sandbox ra mắt, kéo dài 5,5 tháng và ảnh hưởng đến khoảng 130 phiên bản, đối với người dùng dường như chưa bao giờ xảy ra.

Mô hình xử lý này không phải lần đầu tiên xuất hiện. Cách ứng phó với lỗ hổng đầu tiên (CVE-2025-66479) gần như hoàn toàn giống nhau: Anthropic chỉ gán CVE cho thư viện nền tảng @anthropic-ai/sandbox-runtime (điểm CVSS chỉ 1.8, “Thấp”), chứ không phải sản phẩm dành cho người dùng là Claude Code; trong nhật ký cập nhật chỉ ghi “Fixed proxy DNS resolution” (sửa lỗi giải quyết DNS proxy), không đề cập đến lỗ hổng bảo mật. Quan Aonan viết trong báo cáo nghiên cứu: “Khi có lỗ hổng nghiêm trọng trong React Server Components, React và Next.js đều nhận được CVE riêng biệt, Meta và Vercel đều phát hành thông báo bảo mật, và cả hai cộng đồng đều được thông báo đầy đủ. Anthropic đã chọn một cách tiếp cận khác.” Tính đến nay, tìm kiếm “Claude Code Sandbox CVE” vẫn không tìm thấy bất kỳ thông báo bảo mật chính thức nào.

Khi đối phó với vấn đề đánh cắp chứng chỉ, Anthropic chọn cách vô hiệu hóa lệnh ps, nhưng tư duy danh sách đen vốn có hạn chế bẩm sinh—vô hiệu hóa một lệnh, kẻ tấn công vẫn có vô số đường thay thế. Cách làm đúng đắn là rõ ràng xác định Agent chỉ cần những công cụ nào. Trong nghiên cứu “Bình luận và Kiểm soát”, Anthropic đã nâng mức độ lỗ hổng lên CVSS 9.4 (cấp độ Critical) và chuyển sang chương trình thưởng riêng tư, nhưng người phát ngôn lại cho biết “công cụ này được thiết kế không nhằm tăng cường chống tiêm prompt”. Các nhà sản xuất mặc định tin vào khả năng bảo mật của mô hình riêng, nhưng lại thiếu phòng vệ sâu trong kiến trúc hệ thống; khi lỗ hổng phơi bày sự thiếu sót này, “hạn chế thiết kế” trở thành một phân loại tiện lợi—nó vừa thừa nhận vấn đề, vừa phần nào miễn trừ nghĩa vụ công bố thông báo bảo mật.

Bối cảnh ngành rộng hơn cho thấy vấn đề này không chỉ giới hạn ở Anthropic. Nghiên cứu “Bình luận và Kiểm soát” được công bố vào tháng Tư đã xác minh rằng Gemini CLI của Google và Copilot Agent của Microsoft GitHub đều có cùng lỗ hổng bảo mật; cả ba công ty đều xác nhận và sửa chữa, nhưng không công bố thông báo bảo mật hay mã CVE nào. Anthropic trả 100 đô la tiền thưởng, Google trả 1337 đô la, GitHub ban đầu đóng báo cáo với lý do “vấn đề đã biết, không thể tái hiện”, nhưng sau khi nhận bằng chứng reverse engineering đã đóng lại với nhãn “thông tin” và thưởng 500 đô la. Tổng cộng 1937 đô la—và ba sản phẩm này được sử dụng bởi phần lớn các doanh nghiệp trong danh sách Fortune 100.

Cảm giác an toàn giả tạo còn nguy hiểm hơn cả việc không có biện pháp bảo mật. Người dùng không có sandbox biết rằng họ không có ranh giới; người dùng có sandbox bị hỏng lại nghĩ rằng họ có. Một nhóm chạy Claude Code và cấu hình danh sách trắng tên miền đã hoàn toàn không nhận thức được rủi ro trong 5,5 tháng, và sau khi nâng cấp, khi xem nhật ký cập nhật, họ chỉ kết luận rằng sandbox đã hoạt động bình thường. Ngoài ra, khi lỗ hổng được công bố, việc không có thông báo bảo mật có nghĩa là người dùng không thể xác định liệu họ có từng bị ảnh hưởng hay không, cũng như thiếu cơ sở để thực hiện kiểm toán ngược.

Trước thực trạng này, cộng đồng bảo mật bắt đầu đạt được sự đồng thuận: không nên đặt niềm tin một cách tập trung vào việc triển khai sandbox của nhà sản xuất. Proxy SOCKS5 của Claude Code được xây dựng trên một gói npm bên thứ ba chỉ có 10 GitHub Star và lần cập nhật cuối cùng là vào tháng 6 năm 2024, ranh giới bảo mật trải dài giữa hai runtime JavaScript và C, nhưng lại thiếu các xử lý chuẩn hóa cơ bản tại điểm giao nhau của niềm tin. Hàm isValidHost() được thêm vào trong bản vá sửa lỗi — có nhiệm vụ từ chối các ký tự bất hợp pháp như byte trống, mã hóa phần trăm, CRLF — lẽ ra đã phải tồn tại ngay từ ngày đầu tiên sandbox được triển khai. Guan Aonan đã đề xuất một khung phòng thủ thực tế — coi AI Agent như một nhân viên cấp cao cần tuân thủ nguyên tắc quyền tối thiểu, trọng tâm nằm ở phòng thủ đa lớp:

Claude Code

Uy tín an toàn được xây dựng dựa trên sự minh bạch của từng lần tiết lộ và từng bản vá, chứ không phải qua các câu chuyện thương hiệu. Khi người dùng giao thông tin xác thực cho Agent xử lý dựa trên niềm tin, nhà sản xuất có nghĩa vụ đảm bảo hàng rào bảo vệ hiệu quả và cũng có nghĩa vụ thông báo kịp thời khi nó thất bại. Cả hai điểm này, Anthropic đều không thực hiện được trên sandbox Claude Code.

“The worst outcome of a sandbox is not that it blocks something, but that it gives people a false sense of security. Releasing a vulnerable sandbox is worse than not releasing a sandbox at all,” said Guan Aonan.

(Bài viết này được đăng lần đầu trên ứng dụng Titanium Media, tác giả | Silicon Valley Tech_news, biên tập | Giao Yên)

Tài liệu tham khảo:

1. oddguan.com — Lần thứ hai, cùng một sandbox: Một lỗ hổng khác trong sandbox mạng Claude Code của Anthropic cho phép đánh cắp dữ liệu (Aonan Guan, 2026.05.20)

2. The Register — Ngay cả Claude cũng đồng ý rằng lỗ hổng trong sandbox của nó là có thật và nguy hiểm (2026.05.20)

Tuyên bố miễn trừ trách nhiệm: Thông tin trên trang này có thể được lấy từ bên thứ ba và không nhất thiết phản ánh quan điểm hoặc ý kiến của KuCoin. Nội dung này chỉ được cung cấp cho mục đích thông tin chung, không có bất kỳ đại diện hay bảo đảm nào dưới bất kỳ hình thức nào và cũng không được hiểu là lời khuyên tài chính hay đầu tư. KuCoin sẽ không chịu trách nhiệm về bất kỳ sai sót hoặc thiếu sót nào hoặc về bất kỳ kết quả nào phát sinh từ việc sử dụng thông tin này. Việc đầu tư vào tài sản kỹ thuật số có thể tiềm ẩn nhiều rủi ro. Vui lòng đánh giá cẩn thận rủi ro của sản phẩm và khả năng chấp nhận rủi ro của bạn dựa trên hoàn cảnh tài chính của chính bạn. Để biết thêm thông tin, vui lòng tham khảo Điều khoản sử dụngTiết lộ rủi ro của chúng tôi.