Nghiên cứu của Apiiro công bố ngày 05/11/2026: một thao tác quen thuộc trong Claude Code — bấm "Yes, and don't ask again" — có thể đưa mật khẩu và API key của bạn lên GitHub công khai.

Chuyện gì xảy ra

Khi Claude Code hỏi quyền chạy một lệnh shell và bạn chọn "Yes, and don't ask again", nó lưu lệnh đó nguyên văn — kể cả secret nằm trong lệnh — thành một allow rule trong file .claude/settings.local.json của project. File này vốn chỉ nên ở trên máy bạn: Claude Code có tự thêm nó vào global git excludes khi tạo file trong repo. Nhưng cơ chế đó không cứu được các trường hợp: thư mục thành repo sau, clone trên máy khác, hoặc file đã bị commit từ trước.

Apiiro quét GitHub công khai (thu thập 01–03/11) và tìm thấy:

  • 104.185 bản copy công khai của settings.local.json, trong đó 1.122 file (1,1%) chứa secret thật — tổng 1.379 secret riêng biệt.
  • Tính cả lịch sử git, file settings dùng chung và log chat của agent: 2.539 secret trên 1.994 repo.
  • Trong đó có 379 mật khẩu database, 122 Supabase service-role key, 43 SSH login cho server công khai, 42 token GitHub/GitLab/npm, 23 AWS key.
  • 63 tổ chức bị ảnh hưởng, phần lớn là công ty phần mềm — gồm key cloud cấp admin của một hãng database, mật khẩu Azure PostgreSQL production, token Square production, mật khẩu owner của database hồ sơ y tế. Một công ty được Apiiro thông báo đã xác nhận key của họ vẫn đang live.

Điểm cần nói rõ

  • Apiiro không thử các credential, nên đây là rủi ro lộ đã chứng minh, chưa phải vụ xâm nhập đã chứng minh — trừ một key đã được xác nhận là live.
  • Quét sạch không đồng nghĩa an toàn: trong 1.122 file có secret, gitleaks chỉ bắt được 564, TruffleHog 643, và 215 file cả hai đều bỏ sót.
  • Xóa file khỏi repo cũng không xong: phiên bản cũ vẫn nằm trong lịch sử git và trong các fork. Tính đến thứ Hai, mọi file có secret vẫn còn trên branch mặc định của repo, và một nửa trong số đó đã nằm đó ít nhất 217 ngày.
  • Đây là hành vi của chính Claude Code, không phải của model: Apiiro tái hiện được với Opus 5.5 và Fable 5.1; trong 16 coding agent được so sánh, Claude Code là agent duy nhất được xác nhận ghi toàn bộ lệnh đã duyệt vào file trong project theo mặc định.
  • Lỗi này đã được báo từ tháng 8/2025 (4 báo cáo trên GitHub của Claude Code), tới nay chưa có bản vá từ Anthropic — cách sửa là ở phía người dùng.

Cần làm gì ngay

  1. Kiểm tra repo của mình: tìm .claude/settings.local.json (và cả .claude/settings.json dùng chung — Apiiro tìm thấy secret trong 298/76.011 bản copy của file này) trên GitHub, kể cả lịch sử git.
  2. Nếu đã lộ: rotate secret ngay — xóa file không đủ, vì lịch sử git vẫn còn.
  3. Đưa .claude/settings.local.json vào .gitignore của project, đừng chỉ trông vào global excludes.
  4. Đừng bao giờ gõ secret trực tiếp vào lệnh shell — dùng biến môi trường hoặc secret manager.

Nguồn