1.122 tệp cấu hình Claude Code của Anthropic chứa tổng cộng 1.379 thông tin xác thực được đăng trên các kho lưu trữ GitHub công khai. Các thông tin này có thể bị lưu lại sau khi nhà phát triển phê duyệt lệnh thực thi.
Apiiro cho biết trong báo cáo công bố ngày 5 rằng nhóm đã kiểm tra 104.185 tệp cấu hình tại 103.617 kho lưu trữ công khai. Cuộc khảo sát diễn ra từ ngày 1 đến ngày 3 tháng 11; thông tin xác thực được phát hiện trong 1.122 tệp, tương đương 1,1%.
Rủi ro phát sinh từ quy trình phê duyệt lệnh. Khi người dùng chọn “Đồng ý và không hỏi lại”, Claude Code lưu lệnh đã được phê duyệt thành quy tắc cho phép trong tệp .claude/settings.local.json của dự án. Nếu lệnh chứa mật khẩu hoặc khóa API, các giá trị đó cũng có thể được lưu cùng.
Tài liệu cài đặt Claude Code giải thích đây là tệp cấu hình cục bộ, chỉ áp dụng cho từng người dùng trong dự án. Nếu công cụ tạo tệp bên trong kho Git, tệp sẽ được thêm vào danh sách loại trừ toàn cục của người dùng, nhưng không tự động được thêm vào .gitignore của dự án.
Vì vậy, nếu tệp được tạo trước khi dự án trở thành kho lưu trữ hoặc được sao chép sang máy tính khác, thiết lập loại trừ toàn cục khó ngăn việc công khai những tệp Git đã theo dõi. Người dùng cũng cần tự thêm tệp vào .gitignore của dự án nếu tạo tệp thủ công.
Trong 1.379 thông tin được phát hiện, 636 thông tin là khóa xác thực khớp với định dạng của nhà cung cấp dịch vụ; 743 thông tin còn lại là mật khẩu hoặc token xuất hiện cùng dòng với máy chủ công khai. Số liệu gồm 379 mật khẩu cơ sở dữ liệu, 122 khóa vai trò dịch vụ Supabase và 43 thông tin đăng nhập SSH.
Có 63 tổ chức sở hữu các tệp cấu hình công khai chứa thông tin xác thực. Một công ty được thông báo xác nhận rằng khóa bị lộ vẫn còn hiệu lực tại thời điểm đó.
Trong các kho lưu trữ có thông tin xác thực, tệp cấu hình được ghi nhận lần đầu trong một lần commit cách thời điểm khảo sát trung vị 217 ngày. Điều này cho thấy nhiều tệp đã tồn tại trên kho công khai trong một thời gian đáng kể.
Nhóm còn tìm thấy 734 thông tin xác thực khác trong lịch sử Git, dù chúng không còn nằm trong các tệp hiện tại. Các giá trị này xuất hiện trong phiên bản cũ của tệp tại 509 kho lưu trữ; cùng nội dung cũng được sao chép vào 211 bản fork thuộc 74 kho lưu trữ.
Khi mở rộng phạm vi sang các tệp cấu hình dùng chung, lịch sử trò chuyện với tác nhân và ghi chú bàn giao, nhóm phát hiện 2.539 thông tin xác thực tại 1.994 kho lưu trữ công khai. Số 1.122 tệp ban đầu, 734 thông tin tìm thấy trong lịch sử và 1.994 kho lưu trữ là các chỉ số khác nhau.
Các công cụ phát hiện thông tin xác thực thông thường cũng bỏ sót một số tệp. Gitleaks phát hiện 564 trong số 1.122 tệp có thông tin xác thực, còn TruffleHog phát hiện 643 tệp. Cả hai công cụ đều bỏ sót 215 tệp.
Một nguyên nhân là mật khẩu có thể trông như từ ngữ thông thường bên trong lệnh. Công cụ chủ yếu tìm tiền tố khóa đặc trưng của từng dịch vụ hoặc chuỗi ký tự ngẫu nhiên có thể bỏ qua mật khẩu đặt sau mysql -p hoặc sshpass -p, vì chúng trông như một phần của lệnh thông thường.
Boris Cherny, người phụ trách Claude Code, bình luận ngày 7 trên Hacker News: “Chúng tôi đang xem xét có thể làm gì để ngăn chặn việc này”. Ông cho biết Claude Code trước đây không có tính năng lọc thông tin bí mật và các tệp được phát hiện là do người dùng tự tạo rồi đưa vào hệ thống quản lý phiên bản. Điều này cho thấy công cụ chưa có biện pháp lọc loại thông tin đó trong quá khứ.
Trong 1.105 kho lưu trữ có thông tin xác thực mà nhóm có thể truy vết, 539 kho có commit ghi Claude là đồng tác giả chỉnh sửa tệp cấu hình liên quan. Tuy nhiên, chỉ riêng dữ liệu này không chứng minh Claude là công cụ tạo tệp ban đầu hoặc đưa tệp lên kho công khai.
Apiiro khuyến nghị thay thế các thông tin xác thực bị lộ; với tệp Git đã theo dõi, cần bỏ theo dõi rồi thêm tệp vào .gitignore của dự án. Nhóm cũng đề xuất dùng biến môi trường để nạp mật khẩu thay vì ghi trực tiếp vào lệnh, đồng thời chỉ cho phép các mẫu lệnh cần thiết thay vì cho phép toàn bộ lệnh.
Nhóm khảo sát không dùng các thông tin tìm thấy để thử đăng nhập hoặc kết nối tới máy chủ. Vì vậy, báo cáo chỉ xác định các giá trị khớp định dạng khóa dịch vụ hoặc xuất hiện cùng máy chủ công khai; điều đó không có nghĩa tất cả thông tin xác thực vẫn còn hiệu lực.
Comment 0