Lỗ hổng GhostApproval Symlink cho phép các kho mã nguồn độc hại chiếm quyền trợ lý AI

Các nhà nghiên cứu tại Wiz đã phát hiện một lỗ hổng trong sáu trợ lý lập trình AI phổ biến, cho phép một dự án mã nguồn bị gài bẫy âm thầm chiếm quyền điều khiển máy tính của lập trình viên thông qua kỹ thuật symlink. Các công cụ bị ảnh hưởng bao gồm Amazon Q Developer, Anthropic's Claude Code, Augment, Cursor, Google Antigravity và Windsurf.
Lỗ hổng GhostApproval trong trợ lý AI
Các nhà nghiên cứu Wiz phát hiện lỗ hổng GhostApproval ảnh hưởng đến nhiều trợ lý lập trình AI phổ biến.

Các nhà nghiên cứu tại Wiz đã phát hiện một lỗ hổng trong sáu trợ lý lập trình AI phổ biến, cho phép một dự án mã nguồn bị gài bẫy âm thầm chiếm quyền điều khiển máy tính của lập trình viên. Trợ lý AI sẽ yêu cầu quyền chỉnh sửa một tệp tin có vẻ vô hại, nhưng thao tác ghi thực chất lại nhắm vào một tệp tin nhạy cảm của hệ thống.

Các công cụ bị ảnh hưởng bao gồm Amazon Q Developer, Anthropic's Claude Code, Augment, Cursor, Google Antigravity và Windsurf. Wiz gọi mô hình tấn công này là GhostApproval và đã công bố thông tin vào ngày 8 tháng 7.

Ba trong số sáu công cụ đã tung ra bản vá, hai công cụ chưa có, và Anthropic đang tranh chấp rằng đây không phải là một lỗi bảo mật. Những công cụ nguy hiểm nhất là những công cụ tự động thay đổi tệp tin trước khi người dùng kịp xem xét.

Cách thức cuộc tấn công diễn ra

Cuộc tấn công lợi dụng một tính năng cũ của Unix gọi là symbolic link (liên kết biểu tượng), hay symlink, mà các trợ lý AI đã bỏ qua không kiểm tra. Một symlink âm thầm trỏ đến một tệp tin khác ở vị trí khác trên ổ đĩa, vì vậy việc ghi dữ liệu vào symlink thực chất là ghi vào tệp tin đích.

Wiz đã xây dựng một kho lưu trữ (repository) độc hại với một symlink tên là project_settings.json, nhưng thực tế nó trỏ đến tệp đăng nhập SSH của nạn nhân: ~/.ssh/authorized_keys. Tệp README của kho lưu trữ này yêu cầu trợ lý AI thêm "một dòng mã" vào project_settings.json, và dòng đó chính là mã khóa SSH của kẻ tấn công được ngụy trang dưới dạng một thiết lập vô hại.

Quy trình tấn công GhostApproval
Sơ đồ minh họa cách GhostApproval lợi dụng symlink để chiếm quyền điều khiển.

Nếu người dùng yêu cầu AI "thiết lập không gian làm việc" hoặc "làm theo hướng dẫn README", nó sẽ ghi thẳng mã khóa vào tệp đăng nhập thông qua symlink. Từ đó, nếu máy tính đang chạy dịch vụ SSH mà kẻ tấn công có thể truy cập, chúng có thể đăng nhập mà không cần mật khẩu.

Một phiên bản khác của kỹ thuật này là ghi vào tệp khởi động shell của bạn (~/.zshrc), tệp này sẽ được thực thi vào lần tới khi bạn mở terminal, do đó không cần đến SSH. Hiện chưa có dấu hiệu cho thấy kỹ thuật này được sử dụng trong thực tế; Wiz trình bày đây như một nghiên cứu.

Hộp thoại phê duyệt hiển thị sai thông tin

Các thủ thuật symlink đã tồn tại hàng thập kỷ. Symlink chỉ là phương thức vận chuyển; thất bại thực sự nằm ở hộp thoại phê duyệt. Trong GhostApproval, hộp thoại đó đã "nói dối".

Khi thử nghiệm Claude Code, Wiz nhận thấy trợ lý AI thực tế đã phát hiện ra mục tiêu thật trong phần suy luận của nó, ghi chú rằng project_settings.json thực chất là "một tệp cấu hình zsh". Tuy nhiên, hộp thoại hiển thị cho lập trình viên vẫn chỉ nêu tên tệp vô hại.

Bạn nhấn Accept vì tin rằng mình đang chỉnh sửa một tệp cấu hình cục bộ, nhưng thao tác ghi lại nhắm trúng tệp khởi động shell hoặc khóa SSH của bạn. Wiz gọi đây là informed-consent bypass (vượt qua sự đồng thuận sau khi được thông báo): con người vẫn nằm trong quy trình (Human in the loop), nhưng quy trình đó đang hiển thị sai thông tin.

Một số công cụ thậm chí còn tệ hơn: chúng bỏ qua hoàn toàn bước xác nhận, khiến người dùng không có cơ hội can thiệp. Windsurf ghi tệp vào đĩa trước khi các nút Accept và Reject xuất hiện, vì vậy lời nhắc lúc đó chỉ đóng vai trò là một nút hoàn tác (undo), trong khi mã độc đã nằm sẵn trong hệ thống.

Augment không hiển thị bất kỳ hộp thoại nào, và Wiz đã trình diễn khả năng nó âm thầm đọc tệp thông tin xác thực AWS nằm bên ngoài dự án. Những công cụ vẫn hiển thị lời nhắc cũng không an toàn hơn; lời nhắc đó chỉ đơn giản là gọi tên sai tệp tin.

Các công cụ bị ảnh hưởng

Wiz đã báo cáo vấn đề cho cả sáu nhà cung cấp. Dưới đây là tình trạng của từng công cụ tại thời điểm công bố:

Công cụ Trạng thái Hành động cần thiết
Amazon Q Developer Đã sửa trong Language Server 1.69.0 (CVE-2026-12958) Cập nhật. Nó tự động cài đặt cho hầu hết người dùng khi tải lại IDE.
Cursor Đã sửa trong v3.0 (CVE-2026-50549) Cập nhật từ trình quản lý tiện ích mở rộng.
Google Antigravity Đã sửa (đang chờ cấp CVE) Cập nhật lên phiên bản hiện tại.
Augment Đã xác nhận; chưa có bản sửa lỗi Không sử dụng với các kho lưu trữ mà bạn không tin tưởng.
Windsurf Đã xác nhận; chưa có bản sửa lỗi Không sử dụng với các kho lưu trữ mà bạn không tin tưởng.
Anthropic Claude Code Bị tranh chấp; phiên bản hiện tại có cảnh báo Cập nhật và đọc kỹ cảnh báo symlink trước khi chấp nhận.

Anthropic đã phản đối phân loại này, nói với Wiz rằng kịch bản này nằm "ngoài mô hình đe dọa của chúng tôi": lập trình viên đã chọn tin tưởng thư mục khi bắt đầu phiên làm việc và sau đó phê duyệt việc chỉnh sửa, vì vậy đó là quyết định của họ.

Họ cũng cho biết cảnh báo symlink của Claude Code đã được tung ra từ đầu tháng 2, trước báo cáo riêng của Wiz, như một biện pháp tăng cường bảo mật định kỳ chứ không phải là một bản sửa lỗi.

Trong số sáu nhà cung cấp, Anthropic là bên duy nhất khẳng định đây không phải là lỗi; ba bên đã tung bản vá và hai bên đang thực hiện. Câu hỏi đặt ra là: một trợ lý lập trình nên đi bao xa để bảo vệ một lập trình viên đã lỡ tin tưởng một kho lưu trữ độc hại?

Cảnh báo của Claude Code
Claude Code hiện đã hiển thị cảnh báo khi phát hiện thao tác ghi qua symlink.

Ngoài việc cập nhật bản vá, một vài thói quen có thể giúp giảm thiểu rủi ro: Chạy trợ lý AI với quyền truy cập tệp hạn chế, hoặc bên trong sandbox/container. Kiểm tra kỹ tệp README và các tệp cấu hình ẩn trước khi để AI "thiết lập".

Sau khi làm việc trong một kho lưu trữ lạ, hãy kiểm tra các tệp mục tiêu của cuộc tấn công vốn nằm ngoài dự án (nên không hiện trong git status): tệp khởi động shell, khóa SSH và cấu hình của chính công cụ AI. Kiểm tra mốc thời gian thay đổi của chúng bằng lệnh ls -la ~/.zshrc ~/.ssh/authorized_keys để xem có gì thay đổi trong khi AI đang chạy hay không.

Lời khuyên của Wiz dành cho các nhà sản xuất công cụ rất ngắn gọn: hãy phân giải symlink và hiển thị đích đến thực sự trước khi hỏi, gắn cờ bất kỳ thao tác ghi nào nằm ngoài thư mục dự án và tuyệt đối không chạm vào đĩa cho đến khi người dùng thực sự phê duyệt.

Một khiếm khuyết chung, không phải sai sót của riêng ai

Vào tháng 5, Adversa AI đã công bố SymJack, một mô hình symlink-và-phê duyệt tương tự chống lại sáu trợ lý lập trình khác, bao gồm Claude Code, Cursor, GitHub Copilot và Grok Build.

Việc hai nhóm độc lập cùng tìm thấy vấn đề này cho thấy một điểm yếu thiết kế chung: các trợ lý này tuân theo symlink bằng các thao tác tệp thông thường, sau đó yêu cầu phê duyệt dựa trên đường dẫn được cung cấp, chứ không phải đường dẫn mà dữ liệu thực sự được ghi vào.

Sự trùng lặp thậm chí còn xuất hiện trong các mã lỗi CVE. Bản tin bảo mật của Cursor cho lỗi symlink đã ghi nhận cả Wiz và Cato AI Labs (nhóm nghiên cứu đứng sau kỹ thuật DuneSlide).

Các tệp tin mà trợ lý AI tin tưởng giờ đây không chỉ là mã nguồn. Đối với các trợ lý này, chúng vừa là hướng dẫn để thực hiện, vừa là đường dẫn để hành động. Bản tin của AWS cũng đề cập đến một lỗi Amazon Q riêng biệt (CVE-2026-12957), nơi một kho lưu trữ bị nhiễm độc có thể tự động tải tệp cấu hình và chạy lệnh để đánh cắp khóa AWS của lập trình viên.

Kỹ thuật GhostApproval vẫn đang được nghiên cứu thêm, nhưng mô hình rộng hơn của nó đã xuất hiện ngoài thực tế: các kho lưu trữ mang theo các tệp tin điều hướng trợ lý AI vào các hành vi không an toàn.

Như báo cáo vào tháng 6, sâu Miasma worm đã cài đặt các tệp cấu hình trợ lý AI trong một kho lưu trữ Microsoft Azure để mã độc thực thi ngay khi lập trình viên mở dự án trong Claude Code, Cursor hoặc Gemini. GitHub sau đó đã vô hiệu hóa 73 kho lưu trữ của Microsoft bị ảnh hưởng.

"Con người tham gia vào quy trình" (Human in the loop) chỉ bảo vệ bạn nếu quy trình đó nói sự thật. Khi các trợ lý này ngày càng có nhiều quyền tự do đọc và ghi tệp, một hộp thoại phê duyệt hiển thị sai đích đến không còn là một biện pháp bảo vệ mà là một mối nguy hại.