Công Nghệ AI
Claude Code "Don't Ask Again" Lộ Mật Khẩu: 1.122 Tệp Trên GitHub, Bốn Báo Lỗi Đều Bị Đóng
Ban Biên Tập Locaith ·

Bấm "Yes, and don't ask again" khi Claude Code xin chạy một lệnh có mật khẩu, và nguyên lệnh đó, mật khẩu đi kèm, được ghi vào tệp .claude/settings.local.json trong thư mục dự án. Nghiên cứu của công ty bảo mật Apiiro công bố ngày 5/11/2026 đếm được 104.185 bản tệp này công khai trên GitHub, trong đó 1.122 tệp chứa khoá hoặc mật khẩu thật. Locaith đã cộng lại các con số của Apiiro, đối chiếu với tài liệu của Claude Code và mở bốn báo lỗi họ dẫn: cả bốn đều đã đóng, không có câu trả lời nào từ Anthropic, và báo lỗi cuối cùng bị bot tự đóng đúng ngày bài nghiên cứu ra.
Cơ chế: một nút bấm tiện lợi ghi nguyên văn lệnh vào tệp
Tài liệu cài đặt của Claude Code xác nhận phần cơ chế: khi bạn chọn "Yes, and don't ask again" cho một lệnh Bash, Claude Code lưu sự cho phép đó thành một quy tắc allow trong .claude/settings.local.json, ở gốc kho mã. Apiiro chỉ ra chỗ quan trọng: quy tắc chính là chuỗi lệnh. Nếu lệnh là PGPASSWORD=... psql -h máy-chủ-công-khai, hay sshpass -p ... ssh root@..., hay curl kèm tiêu đề Authorization: Bearer, thì bí mật nằm luôn trong quy tắc. Apiiro nói đã tái hiện hành vi này với Opus 5.5 và Fable 5.1, và đây là hành vi của công cụ chứ không phải của mô hình.
Tệp này vốn được thiết kế để ở lại trên máy. Tài liệu viết Claude Code thêm nó vào danh sách bỏ qua toàn cục của git (global git excludes) lần đầu ghi tệp; nếu bạn tự tạo tệp thì phải tự thêm vào .gitignore. Apiiro nêu các trường hợp lọt lưới: thư mục chỉ trở thành kho git sau đó, bản sao trên máy khác, hoặc tệp đã lỡ commit từ trước. Quy tắc bỏ qua không nằm trong .gitignore của chính kho, nên không đi theo dự án.
Các con số, và Locaith cộng lại thế nào
Apiiro thu dữ liệu bằng tìm kiếm mã và commit chỉ đọc trên GitHub từ 1 đến 3/11/2026, chia truy vấn theo kích thước tệp để vượt trần 1.000 kết quả, rồi tải về từng tệp. Bảng dưới là số của Apiiro; cột cuối là phép kiểm của Locaith.
| Chỉ số (Apiiro công bố) | Giá trị | Locaith kiểm |
|---|---|---|
| Bản .claude/settings.local.json công khai | 104.185 tệp trong 103.617 kho | Cộng sáu nhóm kích thước trong biểu đồ của Apiiro ra đúng 104.185 |
| Tệp chứa bí mật thật | 1.122 (1,1%) | 1.122 / 104.185 = 1,08%; nhân tỉ lệ từng nhóm kích thước ra khoảng 1.120, khớp |
| Bí mật khác nhau trong các tệp đó | 1.379 (636 khoá đúng định dạng nhà cung cấp + 743 mật khẩu/token kèm máy chủ công khai) | 636 + 743 = 1.379. Nhưng 11 cột trong biểu đồ theo loại cộng ra 1.384, lệch 5; Apiiro không giải thích |
| Mở thẳng cơ sở dữ liệu | 379 mật khẩu CSDL + 122 khoá service-role Supabase | 501 / 1.379 = 36,3%, khớp câu "hơn một phần ba" |
| Tổng mọi nguồn (thêm lịch sử git, settings.json dùng chung, bản ghi hội thoại…) | 2.539 bí mật trong 1.994 kho | 2.539 − 1.379 = 1.160, khớp câu "thêm 1.160" |
| gitleaks / TruffleHog bắt được | 564 / 643 trên 1.122 tệp; 215 tệp cả hai đều bỏ sót | 50,3% / 57,3%; 215 / 1.122 = 19,2%, khớp "một phần năm" |
| Kho mà commit đồng tác giả Claude đã sửa tệp này | 539 trên 1.105 kho truy được | 48,8% |
- Tệp càng to càng dễ lộ: theo biểu đồ của Apiiro, 0,17% tệp dưới 500 byte (55.453 tệp) chứa bí mật, so với 9,9% tệp trên 8 KB (2.755 tệp). Ai bấm "đừng hỏi lại" càng lâu thì danh sách càng dài.
- Không mới và không tự biến mất: mọi tệp vẫn nằm trên nhánh mặc định ngày 2/11; ở kho trung vị, tệp được commit lần đầu 217 ngày trước đó, 118 kho quá một năm. 211 bản fork của 74 kho mang cùng bí mật. Lịch sử git giữ thêm 734 bí mật trong 509 kho không còn trong bản hiện tại, thường vì tệp đã bị xoá.
- Không chỉ một tệp: trong 76.011 tệp settings.json dùng chung có 298 tệp chứa bí mật; 120 tệp bản ghi hội thoại tác tử trong 87 kho; 9 kho có tệp trí nhớ (MEMORY.md và tương tự); 33 ghi chú bàn giao; 9 kho có cài đặt tự duyệt của Copilot trong VS Code. Ngoài GitHub: 126 trên 31.053 Hugging Face Spaces có tệp này, 1 có bí mật; 2 trên 69 bản trên GitLab.com.
- Ai bị ảnh hưởng: 63 tổ chức, phần lớn là công ty phần mềm; trường hợp nặng nhất gồm khoá đám mây quyền quản trị của một hãng cơ sở dữ liệu, mật khẩu Postgres trên Azure đang chạy thật, token Square production, mật khẩu chủ cơ sở dữ liệu của một ứng dụng hồ sơ y tế. Apiiro báo cho từng tổ chức ngày 2 và 3/11; một công ty xác nhận khoá còn hiệu lực.
Bốn báo lỗi, không câu trả lời nào
Apiiro viết rằng người dùng đã báo cơ chế này từ tháng 8/2025, không báo lỗi nào được Anthropic trả lời, và ba cái đã bị đóng tự động. Locaith đọc cả bốn qua API GitHub ngày 08/11/2026; đến lúc đó cả bốn đều đã đóng, và mọi bình luận đều của người dùng hoặc bot.
| Báo lỗi | Mở | Đóng | Cách đóng |
|---|---|---|---|
| #5544 | 11/8/2025 | 3/1/2026 | Bot đóng vì 60 ngày không hoạt động ("not planned"); tiêu đề nói đúng cơ chế: lệnh đã duyệt chứa thông tin đăng nhập được lưu nguyên văn |
| #11982 | 19/11/2025 | 5/3/2026 | Bot đóng vì không hoạt động, dù ba bình luận (12/2025 đến 2/2026) nói lỗi vẫn còn; nội dung: Claude Code không còn thêm tệp vào .gitignore khi tạo |
| #13106 | 4/12/2025 | 8/12/2025 | Bot đóng như bản trùng của #11982 |
| #91270 | 1/9/2026 | 5/11/2026, 10:14 UTC | Bot đóng vì không hoạt động, đúng ngày Apiiro đăng bài; nội dung: tiện ích VS Code ghi quyền "always allow" vào settings.json được commit thay vì tệp local |
Nhật ký thay đổi của Claude Code đến bản 2.1.319 (commit ngày 6/11/2026) có một dòng sửa việc runner tự lưu trữ commit nhầm .claude/settings.local.json do phiên trước để lại, nhưng không có dòng nào đổi cách "don't ask again" ghi lệnh. Locaith không thấy bài đăng hay phản hồi chính thức nào của Anthropic về nghiên cứu này tính đến ngày 08/11/2026.
Nhận xét của Locaith: việc nên làm ngay nếu đội bạn dùng Claude Code
Đây là ý kiến của Ban Biên Tập, dựa trên khuyến nghị của Apiiro và tài liệu Claude Code; Locaith chưa thử nghiệm. (1) Tìm trong mọi kho của tổ chức, kể cả kho riêng, tệp .claude/settings.local.json và .claude/settings.json; kho riêng hôm nay có thể thành công khai ngày mai. (2) Nếu tệp từng được commit, gỡ theo dõi bằng git rm --cached rồi thêm vào .gitignore của chính kho, và đổi mọi mật khẩu, khoá mà tệp từng chứa: xoá tệp không xoá lịch sử, bản fork hay bản sao. (3) Mở tệp trên máy từng lập trình viên và xoá quy tắc nào có bí mật, kể cả khi chưa bao giờ commit, vì mã độc đánh cắp thông tin đăng nhập quét đúng loại tệp này. (4) Đừng gõ bí mật vào lệnh; dùng biến môi trường như $DB_URL để quy tắc chỉ ghi tên biến. (5) Duyệt theo mẫu, ví dụ Bash(npm run:*), thay vì duyệt nguyên một lệnh. (6) Bổ sung thư mục .claude/, .cursor/, .gemini/ vào quét bí mật trước commit và trong CI, và chọn công cụ quét bắt được mật khẩu đứng sau PGPASSWORD=, sshpass -p, mysql -p, vì đó chính là chỗ gitleaks và TruffleHog bỏ sót.
Giới hạn và điều chưa kiểm chứng
Mọi con số về tệp, bí mật và tổ chức là của Apiiro, một công ty bán giải pháp bảo mật cho phát triển phần mềm, nên có lợi ích thương mại trong chủ đề này. Locaith không lặp lại tìm kiếm trên GitHub (API tìm kiếm mã cần đăng nhập), không xem bất kỳ tệp bị lộ nào và không thử khoá nào. Theo phương pháp của chính Apiiro, "bí mật thật" nghĩa là khớp định dạng nhà cung cấp hoặc trỏ tới máy chủ công khai, không phải đã xác nhận còn dùng được; bước rà soát cuối do một mô hình ngôn ngữ làm theo tiêu chí viết sẵn. Câu "Claude Code là công cụ duy nhất trong 16 tác tử ghi nguyên lệnh vào tệp dự án theo mặc định" là so sánh dựa trên tài liệu của Apiiro, Locaith chưa kiểm. Locaith đã kiểm: phép cộng các con số công bố, mô tả cơ chế trong tài liệu Claude Code, trạng thái và bình luận của bốn báo lỗi, và nhật ký thay đổi đến bản 2.1.319.
Nguồn:
- Apiiro — Coding Agents Copy Your Secrets to a Hidden File. Thousands Are on GitHub (Shmulik Cohen, Matan Giladi, 5/11/2026)
- Anthropic — Tài liệu cài đặt Claude Code (settings): mục project local và "Yes, and don't ask again"
- GitHub — báo lỗi #5544, #11982, #13106, #91270 của anthropics/claude-code (trạng thái và bình luận qua API, 08/11/2026)
- GitHub — CHANGELOG.md của Claude Code (đến bản 2.1.319)
- Hacker News — bài nghiên cứu lên trang nhất ngày 08/11/2026
Locaith đã đọc trực tiếp các trang trên ngày 08/11/2026. Ảnh bìa là phần minh hoạ cắt từ ảnh bìa bài nghiên cứu của Apiiro; Locaith cắt bỏ dòng tiêu đề và tên tác giả, giữ nhãn nhỏ thuộc hình vẽ. Hai ảnh trong bài là hình của Apiiro. Các phép cộng, tỉ lệ và bảng báo lỗi là của Locaith. Bài do Ban Biên Tập Locaith viết và phân tích ngày 08/11/2026.