Claude Code làm lộ 2539 thông tin xác thực trên GitHub

Các nhà nghiên cứu của công ty bảo mật Apiiro đã rà soát các kho mã công khai trên GitHub, gồm tệp cài đặt cục bộ của Claude Code, lịch sử Git và nhật ký hội thoại của tác tử, và tìm thấy tổng cộng 2539 thông tin xác thực thật. Chúng nằm rải rác trong 1994 kho mã, liên quan đến 63 tổ chức. Những thứ bị lộ gồm mật khẩu cơ sở dữ liệu Azure, token môi trường production của Square, thông tin đăng nhập SSH root, và cả mật khẩu chủ sở hữu của một cơ sở dữ liệu hồ sơ y tế.

Nguyên nhân nằm ở một nút bấm mà rất nhiều người nhấn mỗi ngày.

Illustration: a key-marked note slips from a laptop, symbolizing secrets leaked through Claude Code settings

Điều gì được ghi lại khi bạn chọn “không hỏi lại”

Trước khi chạy một lệnh shell, Claude Code sẽ xin phép người dùng. Khi người dùng chọn “Có, và không hỏi lại”, quy tắc đó được ghi vào tệp .claude/settings.local.json trong thư mục dự án, và các lệnh cùng loại sau này sẽ không hiện hộp thoại nữa. Rắc rối là thứ được ghi lại thường chính là nguyên văn câu lệnh: nếu trong lệnh có sẵn chuỗi kết nối cơ sở dữ liệu, token API hay khóa bí mật, chúng cũng được lưu nguyên xi vào tệp này.

Theo tài liệu của Anthropic, khi tạo tệp này Claude Code sẽ cấu hình để Git bỏ qua nó. Thống kê của Apiiro cho thấy lớp bảo vệ ấy đã thất bại trong khá nhiều tình huống: dự án được sao chép sang máy khác, thư mục thường mới được khởi tạo thành kho Git về sau, hoặc tệp bị ép đưa vào quản lý phiên bản. Trong các trường hợp đó, settings.local.json đều có thể bị đẩy lên cùng.

Một số con số do Apiiro đưa ra:

  • Trên GitHub công khai có 104185 tệp settings.local.json, phân bố trong 103617 kho mã;
  • Trong đó 1122 tệp (khoảng 1,1%) chứa bí mật thật, sau khi loại trùng còn 1379 bí mật;
  • Trong 1105 kho mã truy vết được, có 539 kho từng xuất hiện commit có chữ ký của Claude làm đồng tác giả và sửa tệp này.

Tệp càng lớn thì rủi ro càng cao. Trong các tệp lớn hơn 8KB, cứ khoảng mười tệp lại có một tệp giấu khóa thật; với tệp nhỏ hơn 500 byte, tỷ lệ này chưa tới một phần năm trăm. Các quy tắc cấp quyền được cộng dồn từng dòng một: người dùng bấm “không hỏi lại” càng lâu thì thứ tích tụ trong tệp càng nhiều.

Apiiro không kiểm tra xem các thông tin xác thực này hiện còn hiệu lực hay không. Ngay cả khi chủ kho mã xóa tệp, khóa vẫn có thể còn trong lịch sử Git và trong các bản fork hiện có.

Vấn đề này đã có người báo từ lâu

Vào ngày 11 tháng 8 năm 2025, đã có người dùng báo cáo trên trình theo dõi lỗi của Claude Code rằng các lệnh được duyệt, kèm cả khóa API và token bên trong, bị lưu nguyên văn từng chữ vào settings.local.json. Báo cáo này sau đó bị tự động đóng vì 60 ngày không có hoạt động, và lỗi không được sửa.

Hơn một năm sau, cơ chế đó được quét ra một cách có hệ thống. Boris Cherny, người phụ trách Claude Code, trả lời trên Hacker News rằng tệp cài đặt vốn không nên được đưa vào quản lý phiên bản, nhóm đang nghiên cứu cách phòng ngừa và cân nhắc tích hợp trực tiếp tính năng quét khóa bí mật vào Claude Code; trước đó, ông khuyến nghị người dùng tự chạy công cụ quét khóa để dọn dẹp. Anthropic chưa đưa ra thời điểm phát hành bản sửa lỗi.

Đây cũng không phải lần đầu trong tháng này Claude Code bị chỉ ra vấn đề về xử lý dữ liệu cục bộ. Đầu tháng, công cụ này bị phát hiện đính kèm email của người dùng trong một số yêu cầu mạng; khi đó cách xử lý cũng là đưa ra biện pháp giảm thiểu trước, bản chính thức theo sau. Điểm chung của hai sự việc là các công cụ tác tử, để làm phiền người dùng ít hơn, đã lưu thông tin xuống đĩa hoặc gửi ra ngoài, và nhà phát triển rất khó nhận ra nó thực sự ghi lại những gì.

Nhà phát triển có thể làm gì ngay bây giờ

Nếu đã dùng Claude Code, trước hết hãy tìm trong kho cục bộ và kho từ xa các tệp .claude/settings.local.json và .claude/settings.json, xem có lệnh nào chứa thông tin xác thực dạng văn bản thuần hay không. Với những khóa đã xác nhận bị lộ, cần thu hồi và cấp lại ngay; chỉ xóa tệp là chưa đủ.

Thói quen an toàn hơn là đừng đưa khóa bí mật vào tham số dòng lệnh, mà tham chiếu chúng qua biến môi trường hoặc công cụ quản lý khóa; đồng thời bật tính năng quét bí mật của GitHub hoặc kiểm tra tương tự trước khi commit, để các tệp như vậy bị chặn trước khi được đẩy lên.

Nguồn tham khảo: ITHome, báo cáo nghiên cứu của Apiiro, CocoLoop, Ars Technica, The Hacker News; đã đối chiếu số lượng tệp cài đặt, tỷ lệ tệp chứa khóa, tổng số thông tin xác thực và số tổ chức bị ảnh hưởng.