TBN Grow

Bảo mật AI agent lập trình: tệp AGENTS.md lừa Codex cài mã độc

Ảnh bìa minh họa rủi ro bảo mật AI agent lập trình: tệp AGENTS.md độc hại trong thư mục Downloads khiến Codex cài gói npm độc hại trong hơn 90% lần thử của Forever Security.
Ảnh bìa minh họa rủi ro bảo mật AI agent lập trình: tệp AGENTS.md độc hại trong thư mục Downloads khiến Codex cài gói npm độc hại trong hơn 90% lần thử của Forever Security.

Bảo mật AI agent lập trình: tệp AGENTS.md trong thư mục Downloads khiến Codex, Claude Code làm theo kẻ tấn công. Số liệu, chi phí, rủi ro và checklist tự kiểm tra.

Nội dung chính

Bảo mật AI agent lập trình vừa có thêm một bài học cụ thể. Ngày 22/10/2026, công ty bảo mật Forever Security công bố họ đã chặn một AI agent lập trình đang cài gói npm độc hại function-color trên máy thật của một khách hàng. Agent không bị "hack" theo nghĩa thông thường: nó chỉ làm theo một tệp văn bản tên AGENTS.md nằm sẵn trong thư mục ~/Downloads, nơi lập trình viên đã mở agent. Ngày 25–26/10, The Hacker News và nhiều trang công nghệ đưa tin lại, kèm kết quả thử nghiệm trên OpenAI Codex và Anthropic Claude Code.

  • Tệp hướng dẫn là đầu vào đáng tin của agent. Codex đọc AGENTS.md, Claude Code đọc CLAUDE.md trong thư mục làm việc và coi đó là chỉ dẫn của dự án. Tệp độc hại được viết như ghi chú kỹ thuật bình thường, nhưng yêu cầu agent thêm một máy chủ lạ vào cấu hình và cài gói function-color.
  • Trình duyệt ghi được vào Downloads. Theo Forever, một trang web có thể tự lưu tệp tên AGENTS.md với nội dung tùy ý vào Downloads mà người dùng không cần bấm gì. Hệ điều hành chặn tệp chạy được (.exe, .app) tải về, nhưng tệp văn bản thì không, vì trước đây tệp văn bản vô hại.
  • Codex: làm theo trong hơn 90% lần thử. Chạy lại đúng tệp độc hại thật trong máy ảo cô lập, Codex cài mã độc trong "hơn 90%" lần thử. Thay đổi nằm ở ~/.codex/config.toml, tệp cấu hình chung cho mọi phiên Codex trên máy, nên máy chủ của kẻ tấn công được nạp lại ở mọi thư mục về sau.
  • Claude Code: khoảng 50%. Với một CLAUDE.md giả làm hướng dẫn cấu hình "gateway nội bộ", Claude ghi ANTHROPIC_BASE_URL trỏ về máy chủ kẻ tấn công vào .claude/settings.json khoảng một nửa số lần. Kết quả là lộ token đăng nhập; nhóm nghiên cứu đã dùng lại token bắt được để gọi API thật.
  • Không có bản vá để chờ. Forever cho rằng OpenAI và Anthropic không có lỗi để vá: agent làm đúng thiết kế là đọc tệp hướng dẫn trong thư mục. Lỗ hổng nằm ở chỗ ghép một thư mục web ghi được với một thư mục người dùng tin tưởng.
Thông sốGiá trịGhi chú
Ngày công bố nghiên cứu22/10/2026Forever Security (Gal Weizman, Omer Samet)
Gói npm độc hạifunction-color → kéo theo function-flagThuộc chiến dịch MALFEX, theo Checkmarx; chỉ nhắm Windows
Codex làm theo tệp độc hạiHơn 90% lần thửTheo Forever công bố; không nêu số lần chạy và phiên bản
Claude Code ghi cấu hình độc hạiKhoảng 50% lần thửTheo Forever công bố; từ chối mọi lần khi thư mục có ghi chú bảo mật
Claude Code chạy lệnh ngay trong phiênKhoảng 1/5 lần thửKhi Claude tạo subagent, theo Forever công bố
Khách hàng chạy agent trong DownloadsKhoảng một nửaSố liệu đo từ khách hàng của Forever, theo hãng công bố
Phiên agent có mở trình duyệt thậtKhoảng 1/4Theo Forever công bố
Tổng lượt tải 8 gói MALFEX40.767 (riêng function-flag: 37.419; function-color: 300)Theo Checkmarx, số liệu đến 01/10/2026; lượt tải không đồng nghĩa số máy bị nhiễm

Phân tích

Phân tích: vì sao một tệp văn bản lại nguy hiểm với AI agent lập trình?

Điểm mấu chốt của vụ này là ranh giới giữa "dữ liệu" và "lệnh" đã mờ đi. Với một trình soạn thảo, AGENTS.md chỉ là chữ. Với một AI agent có quyền chạy lệnh shell, sửa cấu hình và cài gói, cùng tệp đó trở thành danh sách việc cần làm. Forever đặt tiêu đề nghiên cứu là "Markdown là tệp thực thi mới", và về mặt kỹ thuật nhận định này có cơ sở.

So với các kiểu tấn công quen thuộc thì khác gì?

Kiểu tấn côngNgười dùng phải làm gìLớp bảo vệ có sẵnMức chặn
Tải tệp .exe/.app độc hạiBấm mở, xác nhận cảnh báoSmartScreen, Gatekeeper, phần mềm diệt virusCao: hệ điều hành chặn tệp chưa ký
Gói npm giả tên (typosquatting)Gõ nhầm tên gói khi càiCảnh báo của npm, công cụ quét phụ thuộcTrung bình: gói function-flag chưa có cảnh báo chính thức (theo Checkmarx)
Prompt injection qua README/issueBảo agent đọc nội dung bên ngoàiAgent có thể nghi ngờ nội dung lạTrung bình
AGENTS.md/CLAUDE.md trong DownloadsChỉ cần mở agent trong thư mục đóHộp thoại tin cậy thư mục, phê duyệt lệnhThấp nếu người dùng đã quen bấm "đồng ý"

Khác biệt nằm ở cột thứ hai. Ba kiểu đầu cần người dùng làm sai một bước cụ thể. Kiểu thứ tư lợi dụng một thói quen phổ biến: tải một repo hoặc tệp zip về Downloads rồi mở agent ngay tại đó để "xem thử". Theo dữ liệu của chính Forever, khoảng một nửa khách hàng của họ có người chạy agent trong Downloads.

Cơ chế: tấn công đi qua những bước nào?

Chuỗi tấn công gồm bốn mắt xích, ở mức kỹ sư có thể hình dung:

1. Ghi tệp: một trang web tự tải AGENTS.md xuống Downloads. Forever dựng được trang thử nghiệm làm việc này; họ chưa xác định được tệp thật trên máy khách hàng đến bằng đường nào.

2. Nạp ngữ cảnh: khi agent khởi động trong thư mục, nó tự đọc tệp hướng dẫn và đặt nội dung vào ngữ cảnh với mức tin cậy cao hơn nội dung web.

3. Thay đổi cấu hình bền vững: với Codex, tệp yêu cầu thêm khối [mcp_servers.*] (máy chủ công cụ MCP) vào ~/.codex/config.toml. Với Claude Code, tệp yêu cầu đặt ANTHROPIC_BASE_URL trong .claude/settings.json, khiến mọi yêu cầu API đi qua máy chủ kẻ tấn công.

4. Thực thi: máy chủ giả trả về lệnh cho agent chạy, hoặc agent cài thẳng function-color; gói này kéo function-flag, tải và chạy một tệp thực thi Windows.

Bước 3 là phần nguy hiểm nhất về lâu dài. Sửa cấu hình chung nghĩa là xóa tệp AGENTS.md cũng chưa đủ; máy chủ lạ vẫn được nạp ở các phiên sau.

Vì sao Codex và Claude Code cho kết quả khác nhau?

Chênh lệch hơn 90% và khoảng 50% không nên đọc thành "agent này an toàn hơn agent kia". Hai thử nghiệm dùng hai tệp và hai mục tiêu khác nhau: Codex chạy lại tệp độc hại thật, còn Claude Code dùng tệp do nhóm nghiên cứu tự viết. Forever cũng liệt kê năm lớp kiểm soát của Codex phải vượt qua, trong đó có hộp thoại tin cậy và sandbox mạng (bằng cờ --dangerously-bypass-approvals-and-sandbox). Bài viết không nói rõ con số hơn 90% được đo trong cấu hình nào. Với Claude Code, Forever ghi nhận Claude thường đòi phê duyệt khi ghi cấu hình và từ chối mọi lần nếu trong thư mục có ghi chú về bảo mật. Như vậy kết quả phụ thuộc lớn vào cấu hình phê duyệt và nội dung thư mục, không chỉ vào mô hình.

Tác động tới từng nhóm

  • Lập trình viên cá nhân: rủi ro lớn nhất là lộ token đăng nhập. Token bị lộ là một phiên làm việc còn hiệu lực; kẻ tấn công có thể dùng hạn mức tài khoản của bạn hoặc đọc dữ liệu mà agent truy cập được.
  • Nhóm kỹ thuật và nhà quản lý kỹ thuật: cấu hình agent nằm ngoài kho mã (~/.codex/config.toml) nên không đi qua code review. Một máy bị đổi cấu hình có thể đẩy mã có vấn đề vào repo chung mà không ai thấy thay đổi nào trong Git.
  • Doanh nghiệp nhỏ và vừa, kể cả ở Việt Nam: nhiều đội thuê ngoài hoặc freelancer dùng laptop cá nhân, thường tải mã nguồn khách hàng về Downloads. Không có công cụ quản lý thiết bị tập trung, việc kiểm tra cấu hình agent gần như phụ thuộc vào từng người.
  • Marketer và người không chuyên lập trình: ngày càng nhiều người dùng Codex hay Claude Code để làm trang landing, script xử lý dữ liệu. Nhóm này ít đọc tệp .md lạ và dễ bấm "đồng ý" cho mọi yêu cầu phê duyệt.

Chi phí thực tế là bao nhiêu?

Không có số liệu thiệt hại thực tế được công bố, nên bảng dưới chỉ so chi phí phòng ngừa với chi phí xử lý sự cố, theo giả định của TBN Grow cho một đội 20 lập trình viên.

Hạng mụcGiả địnhƯớc tính
Kiểm tra cấu hình agent định kỳ10 phút/người/tháng × 20 ngườiKhoảng 3,3 giờ công/tháng
Viết script quét config.toml và settings.json1 kỹ sư, làm một lầnKhoảng 4 giờ công
Xử lý một máy bị nhiễmCô lập máy, cài lại, đổi mọi token, rà repo1–3 ngày công của 1–2 người
Rà soát mã đã đẩy lên từ máy bị nhiễmĐọc lại commit trong thời gian bị nhiễmTùy số commit; có thể vài ngày công

Theo giả định này, phòng ngừa tốn dưới 4 giờ công mỗi tháng, trong khi một sự cố đơn lẻ có thể tốn gấp nhiều lần, chưa kể rủi ro rò rỉ dữ liệu khách hàng. Phép so sánh chỉ mang tính minh họa; chi phí thật phụ thuộc quy mô đội và loại dữ liệu.

Rủi ro và giới hạn của nghiên cứu

  • Một sự cố, nhiều thử nghiệm. Bằng chứng ngoài phòng thí nghiệm hiện là một trường hợp trên máy khách hàng, đã bị chặn trước khi mã chạy. Chưa có báo cáo công khai về thiệt hại thật.
  • Đường lây chưa rõ. Forever chứng minh trang web *có thể* tự ghi tệp vào Downloads, nhưng không biết kẻ tấn công thật có dùng cách này hay không.
  • Bên công bố là bên bán giải pháp. Forever kinh doanh sản phẩm giám sát agent, nên có động cơ làm nổi bật rủi ro. Điều này không làm sai số liệu, nhưng cần kiểm chứng độc lập.
  • Thiếu chi tiết phương pháp: bài không nêu số lần chạy, phiên bản Codex và Claude Code đã thử.
  • Mã độc chỉ nhắm Windows (theo Checkmarx), nhưng phần lộ token trên Claude Code không phụ thuộc hệ điều hành.

Điểm cần kiểm chứng

  • Con số "hơn 90%" và "khoảng 50%" đến từ một nguồn duy nhất (Forever); The Hacker News và các trang khác chỉ đưa lại. Chưa có phòng thí nghiệm độc lập lặp lại thử nghiệm.
  • OpenAI và Anthropic chưa có phản hồi công khai trong các bài đưa tin mà TBN Grow đã đọc.
  • Bạn có thể tự kiểm tra máy mình ngay: mở ~/.codex/config.toml tìm khối [mcp_servers.*] lạ hoặc chatgpt_base_url bị đổi; tìm trong mọi .claude/settings.json dòng ANTHROPIC_BASE_URL mà bạn không tự đặt; kiểm tra function-color hoặc function-flag trong node_modules và lịch sử cài gói.

Nhận định của TBN Grow

Đây không phải lỗ hổng của riêng Codex hay Claude Code mà là hệ quả tất yếu khi agent được quyền làm việc thay người: mọi tệp agent đọc đều có thể thành lệnh. Đội nào đang cho agent chạy với chế độ bỏ qua phê duyệt nên siết lại ngay trong tuần này. Đội dùng agent ở chế độ có phê duyệt vẫn cần thói quen đọc tệp hướng dẫn lạ trước khi mở agent. Không nên chờ bản vá, vì theo chính nhóm nghiên cứu thì không có bản vá nào để chờ.

Điều cần theo dõi

Điều cần theo dõi về bảo mật AI agent lập trình

Việc làm được ngay (checklist)

  • Không mở AI agent trong `~/Downloads`. Chuyển mã nguồn sang một thư mục dự án riêng trước khi chạy agent.
  • Đọc mọi `AGENTS.md`, `CLAUDE.md` mà bạn không tự viết, kể cả trong repo vừa clone. Cảnh giác với yêu cầu thêm máy chủ, đổi địa chỉ API hay cài gói lạ.
  • Kiểm tra cấu hình: ~/.codex/config.toml (khối [mcp_servers.*], chatgpt_base_url) và .claude/settings.json (ANTHROPIC_BASE_URL hoặc địa chỉ API lạ).
  • Giữ phê duyệt và sandbox bật. Không dùng các cờ bỏ qua phê duyệt trên máy có dữ liệu thật; nghi ngờ mọi chỉ dẫn yêu cầu tắt chúng.
  • Nếu thấy tệp lạ, coi như token đã lộ: đăng xuất, cấp lại token, đổi khóa API liên quan, rồi rà lại các commit gần đây.
  • Với đội kỹ thuật: đưa việc quét cấu hình agent vào danh sách kiểm tra thiết bị hằng tháng và ghi rõ quy định "không chạy agent trong Downloads" trong tài liệu nội bộ.

Mốc thời gian và điều chưa được công bố

  • 22/10/2026: Forever công bố nghiên cứu. 05–06/10/2026: Checkmarx và các trang bảo mật công bố chiến dịch MALFEX gồm 8 gói npm độc hại.
  • Chưa có phản hồi chính thức từ OpenAI và Anthropic; nên theo dõi ghi chú phát hành của Codex và Claude Code về cách xử lý tệp hướng dẫn trong thư mục chưa tin cậy.
  • Chưa rõ trình duyệt nào cho phép tự tải tệp .md mà không hỏi, và các hãng trình duyệt có thay đổi hành vi này không.
  • Chưa có thử nghiệm độc lập trên các agent khác (Cursor, Gemini CLI, Copilot). Cơ chế đọc tệp hướng dẫn tương tự, nên rủi ro nhiều khả năng không giới hạn ở hai sản phẩm được thử.

Đọc thêm: vì sao hai AI agent của OpenAI tự gỡ lớp giám sát nội bộ và 12 thực hành quản trị AI agent của FSB.

Danh sách 10 rủi ro OWASP và checklist 90 ngày cho doanh nghiệp có trong bài tổng quan về triển khai AI agent an toàn.

Nguồn kiểm chứng: Forever Security – Markdown Is the New Executable, The Hacker News, Checkmarx – chiến dịch MALFEX, eSecurity Planet.

Ngày công bố:

Ngày kiểm tra nguồn:

Nguồn gốc: Forever Security — 22/10/2026