Công ty bảo mật phần mềm Apiiro cho biết mật khẩu và khoá API mà lập trình viên gõ vào các lệnh được phê duyệt trong Claude Code, trợ lý lập trình AI của Anthropic, đang nằm trong các kho mã GitHub công khai. Theo The Hacker News, khi người dùng chọn "Yes, and don't ask again", công cụ có thể lưu nguyên văn câu lệnh, kể cả bí mật đi kèm, vào tệp .claude/settings.local.json trong thư mục dự án. Apiiro tìm thấy 1.122 bản sao công khai của tệp này chứa ít nhất một bí mật, dù chưa kiểm tra bí mật nào còn dùng được. Một công ty được thông báo đã xác nhận khoá của họ vẫn đang hoạt động.
Bí mật lọt vào tệp như thế nào
Mặc định, Claude Code hỏi trước khi chạy phần lớn lệnh shell. Nếu người dùng chọn không hỏi lại, công cụ lưu một quy tắc cho phép vào tệp settings.local.json. Quy tắc này đôi khi là một mẫu chung, đôi khi là đúng một câu lệnh cụ thể. Trong trường hợp sau, mật khẩu hay token nằm trong câu lệnh cũng được lưu ở dạng văn bản thô. Nhóm nghiên cứu cho biết đã tái hiện hành vi này với các mô hình mới nhất.
Claude Code có cơ chế giữ tệp ngoài git: lần đầu ghi tệp, nó thêm tệp vào danh sách loại trừ git toàn cục của người dùng. Nhưng lớp bảo vệ này chỉ nằm trên một máy tính, không đi theo dự án và không có tác dụng với tệp đã được commit trước đó. Trong 539 trên 1.105 kho mã được truy vết, có commit ghi Claude là đồng tác giả đã sửa tệp này, nên nhóm nghiên cứu cho rằng chính công cụ thường tự commit tệp.
Quy mô phát hiện
Apiiro tìm thấy 104.185 bản sao tệp trong 103.617 kho mã công khai, khoảng 1,1% chứa bí mật, với tổng cộng 1.379 bí mật khác nhau. Hơn một phần ba mở thẳng vào cơ sở dữ liệu, gồm 379 mật khẩu database, ngoài ra có 43 thông tin đăng nhập SSH vào máy chủ công khai, 42 token GitHub, GitLab và npm, cùng 23 khoá AWS. Chủ sở hữu bao gồm 63 tổ chức, chủ yếu là công ty phần mềm. Nếu tính cả lịch sử git, các bản fork, tệp settings.json dùng chung và nhật ký hội thoại của agent, tổng số lên tới 2.539 bí mật trên 1.994 kho mã.
Đáng lo hơn, các công cụ quét bí mật phổ biến bỏ sót nhiều trường hợp. Trên 1.122 tệp chứa bí mật, gitleaks phát hiện 564, TruffleHog phát hiện 643, và 215 tệp không công cụ nào phát hiện. Lý do là phần lớn bí mật bị sót là mật khẩu gõ trong câu lệnh, chẳng hạn sau PGPASSWORD= hay mysql -p, trông giống một từ bình thường chứ không theo định dạng khoá đã biết.
Khuyến nghị xử lý
- Tìm tệp .claude/settings.local.json và .claude/settings.json trong toàn bộ tổ chức GitHub, kể cả trong lịch sử git nơi tệp đã bị xoá.
- Đổi ngay mọi mật khẩu, token và khoá từng xuất hiện trong tệp, sau đó mới dọn dẹp. Xoá tệp không xoá được bí mật khỏi lịch sử và các bản fork.
- Ngừng theo dõi tệp bằng git rm --cached và thêm vào .gitignore của chính dự án.
- Không gõ bí mật trực tiếp vào lệnh, dùng biến môi trường từ trình quản lý bí mật, và phê duyệt theo mẫu thay vì từng lệnh.
- Coi các thư mục của agent AI như .claude/, .cursor/, .gemini/ là nơi chứa bí mật giống tệp .env, đưa vào quét bí mật ở pre-commit và CI.
Góc nhìn NTEK
Trợ lý lập trình AI đang được các đội phát triển phần mềm ở Việt Nam dùng ngày càng nhiều, nhưng quy trình bảo mật thường chưa theo kịp. Vụ việc cho thấy rủi ro không nằm ở mô hình AI mà ở những tệp cấu hình và nhật ký mà công cụ sinh ra trong thư mục dự án. Doanh nghiệp và cơ quan có đội ngũ phát triển nội bộ hoặc thuê ngoài nên bổ sung quy định dùng công cụ AI vào chính sách phát triển an toàn, cập nhật mẫu .gitignore, kiểm tra kho mã đang công khai và yêu cầu nhà thầu xác nhận không có bí mật trong mã bàn giao.
Nguồn: The Hacker News