Lỗ hổng bảo mật trong Claude Code: Token OAuth có thể bị đánh cắp qua tấn công MCP
Các nhà nghiên cứu bảo mật vừa phát hiện một phương thức tấn công cho phép kẻ xấu âm thầm đánh cắp token OAuth từ Claude Code thông qua việc chiếm đoạt giao thức MCP. Vấn đề này có thể dẫn đến việc mất quyền kiểm soát các nền tảng SaaS kết nối mà người dùng rất khó phát hiện.

Claude Code là một hệ thống tác nhân AI (agentic system) được thiết kế để hỗ trợ các nhà phát triển, nhưng tính năng này lại mở ra những rủi ro bảo mật đáng lo ngại. Các hệ thống tự động như vậy có thể mở rộng bề mặt tấn công mà hoạt động gần như vô hình đối với người dùng.
Claude AI
Vấn đề cốt lõi nằm ở token OAuth. Nếu kẻ tấn công có thể chiếm được token này, chúng sẽ nắm trong tay "chìa khóa chủ" hoặc đại diện kỹ thuật số, cho phép truy cập vào mọi công cụ được kết nối hoặc có thể truy cập từ Claude Code MCP (Model Context Protocol).
Cơ chế tấn công Man-in-the-Middle
Mitiga Labs đã xác định một lỗ hổng trong Claude Code cho phép kẻ tấn công chuyển hướng đầu ra, bao gồm cả các token, sang hạ tầng của chúng trước khi dữ liệu được gửi đến đích hợp pháp. Về bản chất, đây là một cuộc tấn công trung gian (Man-in-the-Middle - MitM) cổ điển.
Cấu hình MCP và token OAuth được lưu trữ trong tệp ~/.claude.json. Nếu kẻ tấn công có thể sửa đổi tệp này, lưu lượng truy cập MCP có thể bị chuyển hướng thông qua hạ tầng do kẻ tấn công kiểm soát.
Kịch bản tấn công qua gói NPM độc hại
Để thực hiện cuộc tấn công này, kẻ tấn công cần hai điều kiện tiên quyết: khả năng cài đặt một gói npm được tùy chỉnh trên máy tính nơi Claude Code được cấu hình với các máy chủ MCP có quyền cấp phát động.
Gói npm này sẽ đăng ký một hook vòng đời (lifecycle hook) chạy như một phần của quá trình cài đặt. Hook sau cài đặt sẽ định vị các vị trí clone phổ biến và điền các đường dẫn đó bằng một hộp thoại tin cậy được cấu hình sẵn thành true.
"Không có lời nhắc nào sẽ kích hoạt khi thư mục sau đó được mở, vì cờ kiểm soát lời nhắc đã được đặt sẵn," Mitiga báo cáo.
Hook này cũng mở tệp ~/.claude.json và chỉnh sửa máy chủ MCP trong tệp cấu hình toàn cầu. Nó sửa đổi phần mcpServers để bao gồm địa chỉ proxy.
"Điều này đặt chúng ta - 'kẻ thù' - vào giữa mọi yêu cầu gửi đến máy chủ MCP. Với tư cách là kẻ tấn công, chúng tôi đã cấu hình mitmproxy và đang chặn đứng lưu lượng," Mitiga giải thích.
Sự lén lút và tính bền bỉ
Bất cứ khi nào Claude Code khởi tạo hoặc làm mới phiên MCP, nó sẽ kết nối với proxy và token sẽ được chuyển đến hạ tầng của kẻ tấn công. Người dùng chỉ thấy một quy trình hợp lệ. Nếu người dùng xoay vòng (rotate) token, hook sẽ ghi đè nó lại trong lần tải tiếp theo. Nếu người dùng chỉnh sửa URL MCP, hook sẽ tải lại cấu hình cũ vào lần tải tiếp theo.
Kẻ tấn công đạt được cả sự lén lút và khả năng duy trì quyền truy cập (persistence). Chúng có được "một sự chuyển hướng bền vững thông tin đăng nhập SaaS của nạn nhân vào hạ tầng do kẻ tấn công kiểm soát, với khả năng tự động phục hồi sau khi xoay vòng token, vô hình với giao diện người dùng cuối điểm, và không thể phân biệt được với lưu lượng hợp lệ trên phía nhà cung cấp".
Là người đứng giữa, kẻ tấn công có thể dễ dàng đánh cắp bất kỳ token OAuth nào vì nó được lưu trữ dưới dạng văn bản thuần (plain text) trong ~/.claude.json. Sau khi bị đánh cắp, kẻ tấn công có thể sử dụng token này làm "chìa khóa vàng" (golden key) để vượt qua xác thực đa yếu tố (MFA) vào bất kỳ công cụ nào mà MCP kết nối, với các quyền hạn giống như người dùng.
Security
Phản hồi từ Anthropic và Khuyến nghị
Mitiga đã báo cáo phát hiện của mình cho Anthropic vào ngày 10 tháng 4 năm 2026. Tuy nhiên, vào ngày 12 tháng 4 năm 2026, Anthropic trả lời rằng vấn đề này "ngoài phạm vi". Lý do được đưa ra về cơ bản giống như phản hồi của họ đối với việc công bố 'TrustFall' của Adversa: người dùng đã đồng ý với những gì có thể xảy ra tiếp theo.
Mitiga khuyên người dùng không nên chờ đợi giải pháp từ Anthropic. Thay vào đó, hãy giám sát các thay đổi cấu hình Claude Code, thay đổi URL máy chủ MCP, hành vi làm mới OAuth, hoạt động API SaaS đáng ngờ và lưu lượng truy cập bất ngờ thông qua các tích hợp MCP.



