Các trợ lý mã nguồn AI có thể bị chiếm quyền điều khiển bởi một mục .git/config độc hại nhằm khai thác tính năng core.fsmonitor của Git, cho phép một kho lưu trữ (repository) không đáng tin cậy chạy các lệnh trên máy của nhà phát triển ngay khi trợ lý bắt đầu quét các tệp tin.
Lỗ hổng này đã xuất hiện trong một số agent phổ biến—Claude Code, Cursor, OpenAI Codex, Goose, Qwen Code, Grok Build và Hermes. Ở các agent đã được vá lỗi, lỗ hổng này không còn hoạt động; những agent còn lại vẫn đang gặp nguy hiểm. Không cần thêm bất kỳ cú nhấp chuột hay thông báo xác nhận nào, và mã độc sẽ chạy với quyền hạn của chính người dùng, nằm ngoài bất kỳ môi trường sandbox nào mà agent AI có thể cung cấp.
Cách thức cuộc tấn công tiếp cận nhà phát triển
- Một nhà thầu nén dự án thành tệp zip và gửi qua email.
- Một đồng nghiệp chia sẻ một thư mục trên ổ đĩa mạng.
- Một chiếc USB chứa mã nguồn được bàn giao.
Trong mỗi trường hợp, kho lưu trữ được gửi đến dưới dạng một thư mục đã chứa sẵn thư mục .git. Khi một trợ lý AI mở thư mục này, nó thường chạy lệnh git status ngầm để xây dựng chế độ xem mã nguồn. Git tăng tốc thao tác đó bằng thiết lập core.fsmonitor, lệnh này yêu cầu Git gọi một chương trình bên ngoài để theo dõi các thay đổi của hệ thống tệp. Nếu tệp .git/config của kho lưu trữ định nghĩa một lệnh độc hại cho core.fsmonitor, Git sẽ tự động thực thi nó mà không cần hỏi ý kiến người dùng.
Vì lệnh được khởi chạy bởi chính Git, nó sẽ kế thừa quyền hạn của người dùng và vượt qua mọi sandbox mà công cụ AI có thể đã thiết lập. Lỗ hổng này không kích hoạt trong quá trình git clone, git fetch hoặc git pull thông thường; nó chỉ kích hoạt khi kho lưu trữ được giải nén với các siêu dữ liệu (metadata) .git đã có sẵn.
Tại sao vấn đề này lại quan trọng
Các nhà phát triển ngày càng phụ thuộc vào các trợ lý AI để gợi ý hoàn thiện mã, tái cấu trúc mã hoặc tạo toàn bộ các module. Những công cụ này cần một bản chụp nhanh (snapshot) nhanh chóng về cây thư mục của dự án, vì vậy chúng gọi các lệnh Git một cách âm thầm. Nếu một kho lưu trữ độc hại có thể thực thi mã tại thời điểm đó, kẻ tấn công sẽ chiếm được chỗ đứng trên máy trạm của nhà phát triển mà không có bất kỳ cảnh báo hiển thị nào. Các payload tiềm năng trải dài từ đánh cắp thông tin xác thực đến cài đặt các cửa hậu (backdoor) tồn tại lâu dài, tất cả diễn ra trong khi người dùng tin rằng họ chỉ đang "kiểm tra" mã nguồn với một trợ lý AI.
Cách phát hiện một repo bị đầu độc
Trước khi đưa một kho lưu trữ cho trợ lý AI, hãy chạy:
git config --get core.fsmonitor
Kết quả trả về không trống có nghĩa là một chương trình đã được thiết lập để chạy tự động. Để kiểm tra rộng hơn, hãy liệt kê bất kỳ thiết lập Git khả nghi nào:
git config --local --list | grep -Ei 'fsmonitor|hooksPath|sshCommand|pager|editor|filter\.'
Nếu bạn phát hiện các mục mà mình không thêm vào, hãy xóa chúng bằng:
git config --local --unset core.fsmonitor
Lưu ý rằng việc thiết lập git config --global core.fsmonitor false không bảo vệ bạn. Các thiết lập trong kho lưu trữ cục bộ luôn ghi đè lên các thiết lập toàn cục, vì vậy một repo độc hại có thể đơn giản là bỏ qua quy tắc toàn cục đó.
Tình hình vá lỗi hiện tại
- Claude Code – đã vá (fsmonitor)
- Cursor – đã vá
- OpenAI Codex – đã vá
- Goose – đã vá
- Qwen Code – chưa vá
- Grok Build – chưa vá
- Hermes – chưa vá
Các nhà phát triển đang sử dụng các agent chưa được vá lỗi nên coi bất kỳ kho lưu trữ nào được gửi đến là có khả năng nguy hiểm cho đến khi họ chuyển đổi công cụ hoặc áp dụng các chính sách Git cục bộ nghiêm ngặt hơn.
Quan điểm phản biện từ cộng đồng Git
core.fsmonitor của Git là một tính năng hiệu suất hợp lệ, không phải là một lỗi. Những người duy trì Git lập luận rằng trách nhiệm thuộc về bên gọi (các ứng dụng gọi lệnh Git) trong việc xác thực nội dung kho lưu trữ trước khi thực hiện các lệnh Git. Vô hiệu hóa tính năng này trên phạm vi toàn cục là một biện pháp giảm thiểu trực tiếp, nhưng như đã lưu ý, các thiết lập ghi đè cục bộ có thể vô hiệu hóa sự bảo vệ đó. Cuộc thảo luận rộng hơn hiện đang tập trung vào việc liệu các trợ lý AI có nên sandbox tất cả các lần gọi Git bên ngoài hoặc từ chối xử lý các kho lưu trữ có chứa các hook fsmonitor tùy chỉnh hay không.
Những điều cần theo dõi tiếp theo
- Các bản cập nhật từ các agent AI chưa được vá lỗi—đặc biệt là bất kỳ tuyên bố nào về việc sandbox các lệnh gọi Git.
- Những thay đổi tiềm năng trong cách xử lý mặc định của Git đối với
core.fsmonitorcho các thư mục không đáng tin cậy. - Các công cụ bên thứ ba có thể làm sạch (sanitize) tệp
.git/configcủa một kho lưu trữ trước khi nó đến tay trợ lý AI.
Bài học rút ra
Một dòng duy nhất trong tệp cấu hình ẩn có thể biến một tiện ích được hỗ trợ bởi AI thành một vector thực thi mã từ xa (remote-code-execution). Cho đến khi các agent dễ bị tổn thương được khắc phục, phương pháp an toàn nhất là kiểm tra (audit) mọi kho lưu trữ được gửi đến ngoài quy trình clone tiêu chuẩn và loại bỏ bất kỳ hook core.fsmonitor hoặc các hook tương tự nào trước khi để trợ lý AI chạm vào mã nguồn.
