Trang chủ Bài viết Bảo mật File 'Don't Ask Again' của Claude Code làm lộ mật khẩu và khóa trong 1.122 bản công khai trên GitHub
Bảo mật 08/11/2026 15 lượt xem

File 'Don't Ask Again' của Claude Code làm lộ mật khẩu và khóa trong 1.122 bản công khai trên GitHub

File 'Don't Ask Again' của Claude Code làm lộ mật khẩu và khóa trong 1.122 bản công khai trên GitHub

Các mật khẩu và API key mà lập trình viên gõ vào lệnh được phê duyệt trong Claude Code đang nằm trong các kho GitHub công khai, nơi bất kỳ ai cũng đọc được. Khi người dùng chọn "Yes, and don't ask again", trợ lý lập trình AI của Anthropic có thể lưu nguyên văn lệnh, kể cả bí mật bên trong, vào file cấu hình của dự án.

Công ty bảo mật phần mềm Apiiro cho biết đã tìm thấy 1.122 bản công khai của file này chứa ít nhất một bí mật, dù chưa kiểm tra xem chúng còn hiệu lực hay không. Một công ty được nhóm nghiên cứu thông báo trước đó xác nhận khóa của mình vẫn đang hoạt động.

Cơ chế rò rỉ

File liên quan là .claude/settings.local.json. Xóa file khỏi dự án không khắc phục được rò rỉ, vì các phiên bản cũ vẫn tồn tại trong lịch sử git và trong các bản fork. Lời khuyên của nhóm nghiên cứu là xoay vòng bí mật trước: đổi mọi mật khẩu, token và khóa mà file từng chứa, rồi mới dọn dẹp.

Mặc định Claude Code hỏi trước khi chạy hầu hết 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 file trên. Quy tắc chỉ bao phủ đúng nội dung mà lời nhắc đưa ra: có khi là một mẫu như npm test *, có khi là một lệnh chính xác. Với lệnh chính xác, mọi mật khẩu hay token gõ vào đều được lưu dưới dạng văn bản thuần.

Nhóm nghiên cứu đã tái hiện hành vi này trên các mô hình mới nhất là Opus 5.5 và Fable 5.1. Claude Code có cố gắng giữ file ngoài git bằng cách thêm nó vào danh sách loại trừ toàn cục của người dùng lần đầu ghi file trong một kho git. Tuy nhiên biện pháp này chỉ có tác dụng trên một máy tính, không giúp gì với file đã được commit, và công cụ không bao giờ thêm file vào .gitignore của chính dự án. Trong 539 trên 1.105 kho được truy vết, một commit ghi Claude là đồng tác giả đã thay đổi file, hàm ý Claude thường tự commit file này.

Những gì Apiiro phát hiện

Tìm kiếm trên GitHub công khai cho thấy 104.185 bản của file trong 103.617 kho, khoảng 1,1% tức 1.122 bản chứa ít nhất một bí mật, tổng cộng 1.379 bí mật khác nhau. Hơn một phần ba số bí mật mở trực tiếp cơ sở dữ liệu, gồm 379 mật khẩu database. Số khác gồm 43 thông tin đăng nhập SSH cho máy chủ công khai, 42 token GitHub, GitLab và npm, cùng 23 khóa AWS.

Chủ sở hữu các file này gồm 63 tổ chức, phần lớn là công ty phần mềm đủ quy mô. Tính đến thứ Hai, mọi file chứa bí mật vẫn nằm trên nhánh mặc định của kho, và một nửa trong số đó đã ở đó ít nhất 217 ngày. Các phiên bản cũ chứa thêm 734 bí mật tại 509 kho, thường do file đã bị xóa; 211 bản fork của 74 kho mang cùng bí mật như bản gốc.

Bí mật còn nằm trong 298 trên 76.011 bản của file chia sẻ .claude/settings.json mà các nhóm cố ý commit. Tính cả các phiên bản cũ và nhật ký trò chuyện của agent, tổng cộng là 2.539 bí mật tại 1.994 kho. Trong 16 agent lập trình được so sánh tài liệu, Claude Code là công cụ duy nhất được xác nhận lưu toàn bộ lệnh đã phê duyệt vào file dự án theo mặc định.

Khuyến nghị xử lý

Với lập trình viên, nhóm nghiên cứu khuyến nghị:

  • Tìm .claude/settings.local.json và .claude/settings.json trong tổ chức GitHub, kiểm tra cả lịch sử git của từng kho dù file đã biến mất.
  • Xoay vòng mọi mật khẩu, token và khóa mà file từng chứa trước khi dọn dẹp.
  • Bỏ theo dõi file cục bộ bằng git rm --cached .claude/settings.local.json và thêm nó vào .gitignore của kho.
  • Mở file trên máy, kể cả khi chưa từng commit, và xóa mọi quy tắc chứa bí mật.
  • Giữ bí mật ngoài lệnh, tham chiếu qua biến từ trình quản lý bí mật như $DB_URL để quy tắc đã lưu chỉ chứa tên biến.
  • Phê duyệt theo mẫu như Bash(npm run:*) thay vì từng lệnh cụ thể.

Theo nhóm nghiên cứu, các bản sao không lên GitHub vẫn đáng lo: file là JSON thuần trong thư mục dự án và có thể nằm trong gói npm, image Docker, file zip hoặc thư mục đồng bộ. Các công cụ quét bí mật phổ biến bỏ sót nhiều file: gitleaks đánh dấu 564 và TruffleHog 643 trong số 1.122 file, cả hai cùng bỏ sót 215 file, chủ yếu là mật khẩu gõ trong lệnh trông như từ thông thường.

Với đội bảo mật, khuyến nghị gồm coi các thư mục agent như .claude/, .cursor/, .gemini/ và .specstory/ là nơi chứa bí mật giống file .env; thêm chúng vào quét bí mật trước commit và trong CI, kể cả lịch sử git; thêm file vào mẫu .gitignore của tổ chức; và kiểm tra trước các thông tin đăng nhập gắn với máy chủ công khai.

Báo cáo trước đó

Người dùng Claude Code từng phản ánh hành vi này. Một báo cáo lỗi ngày 11/8/2025 nêu việc lệnh được phê duyệt chứa API key và token bị lưu nguyên văn trong settings.local.json. Một bot tự động đóng báo cáo với trạng thái "not planned" ngày 3/1 sau 60 ngày không hoạt động. Tính đến nay, cả bốn báo cáo liên quan mà nhóm nghiên cứu dẫn ra đều bị bot này đóng, gần nhất là hôm trước, và không báo cáo nào nhận được phản hồi từ Anthropic.

Nguồn: The Hacker News

Trích nguồn từ: The Hacker News

Chia sẻ:

Bài viết liên quan

Zalo