Hook:
Bạn có tin rằng một lỗi crash đơn giản trong ứng dụng của bạn có thể biến AI coding agent của bạn thành công cụ đánh cắp chìa khóa AWS? Tại DEF CON 34, một nhóm nghiên cứu đã chứng minh điều đó. Với tôi, một người đã chứng kiến DeFi Summer bùng nổ và sụp đổ, đây không chỉ là một bài thuyết trình học thuật. Đây là một hồi chuông cảnh tỉnh cho toàn bộ ngành công nghiệp đang quá phụ thuộc vào AI mà quên mất những lớp bảo vệ cơ bản nhất.
Context:
Cuộc tấn công, được đặt tên là "Agentjacking", khai thác một điểm yếu trong kiến trúc của các AI coding agent hiện đại như Cursor và Claude Code. Các agent này thường được tích hợp với các dịch vụ giám sát lỗi (error monitoring) như Sentry thông qua giao thức MCP (Model Context Protocol). Khi một nhà phát triển yêu cầu agent debug một lỗi từ Sentry, agent sẽ đọc nội dung của issue đó, bao gồm cả stack trace, logs, và đặc biệt là các gợi ý sửa lỗi. Vấn đề nằm ở chỗ: Sentry cho phép bất kỳ ai có DSN (Data Source Name) hợp lệ đều có thể POST dữ liệu lỗi, và những dữ liệu đó có thể chứa mã độc dưới dạng markdown. Khi agent đọc issue này, nó sẽ coi nội dung đó là hướng dẫn hợp lệ và thực thi, mở đường cho kẻ tấn công chiếm quyền kiểm soát máy tính của nhà phát triển.
Core:
Đây không phải là một khai thác zero-day phức tạp. Đó là một "combo attack" - sự kết hợp chết người giữa hai thiết kế hợp lý riêng lẻ, nhưng khi kết hợp lại tạo ra một lỗ hổng nghiêm trọng.
Tôi đã từng tự xây dựng bot giao dịch quyền chọn cho Uniswap v3 vào năm 2020, và tôi học được một bài học đắt giá: thị trường không quan tâm đến ý định của bạn, nó chỉ quan tâm đến kết quả. Tương tự, ở đây, Sentry không cố ý tạo ra lỗ hổng, nhưng thiết kế "chấp nhận mọi thứ" của nó, kết hợp với sự tin tưởng mù quáng của AI agent, đã tạo ra một bề mặt tấn công khổng lồ.
Hãy nhìn vào chuỗi tấn công:
- Phát hiện mục tiêu: Kẻ tấn công quét internet để tìm các DSN công khai của Sentry. Kết quả: 2,388 tổ chức bị lộ, bao gồm 71 trang web trong top 1 triệu của Tranco, và khoảng 27% các công ty trong Fortune 1000 có thể bị ảnh hưởng nếu họ sử dụng Cloudflare MCP.
- Gửi mồi nhử: Kẻ tấn công gửi một POST request đến Sentry với một event lỗi giả mạo. Event này chứa một stack trace giả và một gợi ý sửa lỗi dạng markdown, yêu cầu agent chạy lệnh
npm installđể cài đặt một package độc hại.
- Kích hoạt agent: Khi nhà phát triển mở Sentry để xem lỗi đó và yêu cầu AI agent của mình (ví dụ: Claude Code) phân tích và sửa lỗi, agent sẽ đọc issue đó.
- Thực thi mã độc: Agent tin tưởng nội dung từ Sentry và thực thi lệnh
npm install. Kết quả: package độc hại được cài đặt, chiếm quyền kiểm soát máy, và đánh cắp các thông tin xác thực nhạy cảm như AWS keys, GitHub tokens, OAuth tokens.
Tôi đã từng bị mất 50 ETH vào một ICO năm 2017 chỉ vì tin vào whitepaper hào nhoáng. Từ đó, tôi học được rằng: không bao giờ tin tưởng bất kỳ thứ gì mà không kiểm tra code. Và ở đây, vấn đề cũng tương tự: AI agent tin tưởng hoàn toàn vào dữ liệu từ Sentry, mà không có bất kỳ cơ chế nào để kiểm tra tính xác thực của nó.
Điều này dẫn đến một vấn đề cốt lõi: kiến trúc hiện tại của AI agent không thể phân biệt giữa dữ liệu và hướng dẫn (instruction) ở cấp độ ngữ nghĩa. MCP đưa dữ liệu từ Sentry vào context của agent, và agent không có cơ chế nào để nhận biết rằng "gợi ý sửa lỗi" này thực chất là một lệnh tấn công.

Các biện pháp giảm thiểu hiện tại, như content filter của Sentry (chặn các payload cụ thể) và agent-jackstop của Tenet (chặn mạng, yêu cầu phê duyệt lệnh), chỉ là giải pháp tạm thời. Chúng không giải quyết được gốc rễ vấn đề: MCP server cần phải chứng thực nguồn dữ liệu và đánh dấu rõ ràng đâu là dữ liệu, đâu là hướng dẫn.

Contrarian:
Hầu hết mọi người, kể cả các chuyên gia bảo mật, sẽ nghĩ rằng đây là lỗi của Sentry hoặc của AI agent. Nhưng tôi cho rằng, gốc rễ của vấn đề nằm ở sự lười biếng trong tư duy của chúng ta. Chúng ta đã quá quen với việc tin tưởng vào các dịch vụ tập trung (Sentry, Cloudflare) và các công cụ AI mạnh mẽ (Cursor, Claude Code), mà quên mất rằng chúng chỉ là những hộp đen. Chúng ta không kiểm tra, không audit, và không đặt câu hỏi về giới hạn tin cậy của chúng.
Năm 2021, khi tôi bị cười nhạo vì đề xuất short floor price của Bored Apes bằng quyền chọn, tôi đã tự build mô hình Black-Scholes điều chỉnh cho blockchain. Kết quả: tôi kiếm được 8 ETH. Bài học ở đây là: không nên tin tưởng vào bất kỳ công cụ nào cho đến khi bạn hiểu được giới hạn của nó. Và với AI agent, giới hạn đó là sự tin tưởng mù quáng vào dữ liệu đầu vào.
Nhiều người cho rằng, việc thêm một lớp bảo mật cho MCP (MCP Security Extensions) sẽ giải quyết vấn đề. Nhưng tôi nghi ngờ điều đó. MCP là một giao thức mở, và việc thêm các lớp bảo mật phức tạp sẽ làm giảm tính linh hoạt và khả năng áp dụng của nó. Hơn nữa, ai sẽ chịu trách nhiệm cho việc triển khai các lớp bảo mật này? Sentry? Anthropic? Hay các nhà phát triển? Câu trả lời hiện tại là: không ai cả.
Takeaway:
Lỗ hổng Agentjacking không phải là một lỗi kỹ thuật đơn thuần. Đó là một lời nhắc nhở rằng, trong thế giới blockchain và AI, sự tin tưởng mù quáng là kẻ thù lớn nhất. Nếu bạn đang sử dụng AI coding agent, hãy tự hỏi: bạn có thực sự kiểm soát được những gì agent của bạn đang đọc? Hay bạn đang để nó tin tưởng vào một nguồn dữ liệu không đáng tin cậy, như tôi đã từng tin tưởng vào whitepaper của một ICO? Hãy nhớ: mỗi lần bị gọi là "con gái không hiểu rủi ro phái sinh", tôi lại mua thêm một hợp đồng quyền chọn. Và mỗi lần bạn bỏ qua một lớp bảo mật cơ bản, bạn đang mua thêm một hợp đồng rủi ro cho tương lai của mình.