Công nghệ

Claude Code lưu mật khẩu dạng văn bản thường, 1.122 tệp bị lộ công khai trên GitHub

Susan Hill
Thêm chúng tôi trên Google

Anthropic’s Claude Code thường yêu cầu cấp quyền trước khi chạy hầu hết lệnh shell, trong đó có lựa chọn “Yes, and don’t ask again” (Có, và đừng hỏi lại). Nếu chọn tùy chọn này cho một lệnh có chứa mật khẩu, chẳng hạn thông tin đăng nhập cơ sở dữ liệu, Claude Code có thể ghi toàn bộ lệnh — cả mật khẩu — vào một tệp cài đặt dạng văn bản thuần trong dự án. Các nhà nghiên cứu bảo mật vừa phát hiện hàng nghìn mật khẩu và khóa như vậy nằm trong những kho mã công khai trên GitHub, nơi bất kỳ ai cũng có thể đọc được.

Nếu sử dụng Claude Code, bạn cần tìm tệp có tên settings.local.json. Tệp nằm trong thư mục ẩn .claude ở thư mục gốc của kho mã, và sẽ đi theo dự án đến bất cứ đâu nếu bạn không ngăn việc đó. Cách hoạt động này giống nhau ở mọi quốc gia có công cụ này. Thay đổi thói quen chỉ mất một phút, trong khi xử lý hậu quả của mật khẩu bị lộ mất nhiều thời gian hơn hẳn, bởi xóa tệp không đồng nghĩa với xóa nó khỏi lịch sử git hay các bản fork của người khác.

Công ty bảo mật phần mềm Apiiro đã tìm kiếm trên GitHub công khai và phát hiện 104.185 bản sao của tệp này trong 103.617 kho mã, theo nghiên cứu do The Hacker News đưa tin. Khoảng 1,1%, tương đương 1.122 bản sao, chứa ít nhất một bí mật, với tổng cộng 1.379 thông tin xác thực khác nhau. Hơn một phần ba số bí mật có thể mở quyền truy cập trực tiếp vào cơ sở dữ liệu, trong đó có 379 mật khẩu cơ sở dữ liệu. Danh sách còn gồm 43 thông tin đăng nhập SSH vào các máy chủ công khai, 42 token dành cho GitHub, GitLab và npm, cùng 23 khóa Amazon Web Services.

Những người sở hữu các tệp này không chỉ là dân lập trình nghiệp dư. Apiiro lần ra dấu vết của chúng đến 63 tổ chức, phần lớn là các công ty phần mềm thuộc đủ quy mô. Trong những trường hợp nghiêm trọng nhất, có khóa đám mây mang quyền quản trị cấp cao của chính một nhà cung cấp cơ sở dữ liệu và mật khẩu chủ sở hữu của một cơ sở dữ liệu hồ sơ y tế. Các phiên bản cũ hơn của tệp trong lịch sử git chứa thêm 734 bí mật ở 509 kho mã, còn 211 bản fork của 74 kho mã giữ lại chính những bí mật có trong bản gốc. Nếu tính cả tệp cài đặt dùng chung mà các nhóm chủ động đưa vào kho mã và nhật ký trò chuyện đã lưu của tác nhân AI, tổng số tăng lên 2.539 bí mật trong 1.994 kho mã.

Claude Code có cố gắng ngăn tệp này bị đưa vào hệ thống quản lý phiên bản. Tài liệu cài đặt của Anthropic cho biết lần đầu công cụ ghi tệp, nó sẽ thêm một quy tắc vào danh sách loại trừ git toàn cục của người dùng, nhờ đó git bỏ qua tệp trên máy tính đó. Quy tắc này không đi theo dự án sang máy tính của đồng nghiệp, máy chủ dựng bản hay một máy mới; nó cũng không có tác dụng với tệp đã được đưa vào kho mã. Trong 539 trên tổng số 1.105 kho mã mà các nhà nghiên cứu lần dấu, một commit ghi Claude là đồng tác giả đã thay đổi tệp — dấu hiệu cho thấy tác nhân thường tự đưa tệp vào commit. Trong số 16 tác nhân lập trình mà Apiiro đối chiếu tài liệu, Claude Code là công cụ duy nhất được xác nhận mặc định lưu toàn bộ lệnh đã được phê duyệt vào một tệp trong dự án.

Các công cụ bảo vệ thông thường bỏ sót không ít trường hợp. Apiiro chạy hai công cụ quét bí mật mã nguồn mở phổ biến là gitleaks và TruffleHog trên mọi bản sao: gitleaks phát hiện 564 trong số 1.122 tệp, TruffleHog phát hiện 643 tệp, còn 215 tệp qua mặt cả hai. Phần lớn trường hợp bị bỏ sót là mật khẩu được nhập sau PGPASSWORD=, sshpass -p hoặc mysql -p; với công cụ tìm kiếm các định dạng khóa đã biết, chúng trông chẳng khác gì những từ ngữ thông thường.

Kết quả nghiên cứu cũng đi kèm một số điểm cần lưu ý. Apiiro bán công cụ bảo mật cho hoạt động phát triển phần mềm có hỗ trợ AI, nên nghiên cứu này đồng thời cũng là một lời chào hàng. Công ty không kiểm tra xem thông tin xác thực còn sử dụng được hay không, dù một công ty được họ cảnh báo đã xác nhận khóa của mình vẫn còn hiệu lực. Một giá trị được tính là bí mật nếu khớp với định dạng khóa đã biết, hoặc nếu nằm cạnh địa chỉ máy chủ công khai và được một công cụ đánh giá AI xác nhận; vì vậy vẫn có khả năng xuất hiện kết quả dương tính giả. Apiiro cũng cho biết con số về đồng tác giả không chứng minh Claude đã đưa mọi thông tin xác thực bị lộ vào tệp. GitHub cũng chỉ là phần có thể nhìn thấy: tệp này là JSON dạng văn bản thuần trong thư mục dự án, nên cũng có thể được đóng gói trong gói npm, ảnh Docker, tệp lưu trữ zip hoặc thư mục đồng bộ.

Lời khuyên đầu tiên của các nhà nghiên cứu là hãy thay mới thông tin xác thực: đổi mọi mật khẩu, token và khóa từng được lưu trong tệp trước khi dọn dẹp bất cứ thứ gì, bởi một bí mật đã công khai thì coi như không còn an toàn, dù bạn có viết lại lịch sử hay không. Tiếp đó, ngừng theo dõi tệp bằng lệnh git rm –cached, thêm tệp vào .gitignore riêng của kho mã, rồi mở /permissions bên trong Claude Code để xóa mọi quy tắc đã lưu có chứa bí mật. Dùng biến môi trường để tham chiếu thông tin xác thực sẽ khiến quy tắc đã lưu chứa tên như $DB_URL thay vì mật khẩu; còn phê duyệt các mẫu lệnh thay vì từng lệnh riêng lẻ sẽ giúp loại hoàn toàn các đối số ghi rõ giá trị khỏi tệp.

Người dùng đã cảnh báo về vấn đề này từ trước. Một báo cáo lỗi gửi ngày 11 tháng 8 năm 2025 cho biết các lệnh được phê duyệt có khóa API và token bị lưu nguyên văn trong settings.local.json; đến ngày 3 tháng 1, bot tự động đóng báo cáo với lý do “not planned” sau 60 ngày không có hoạt động. Apiiro, đơn vị công bố kết quả nghiên cứu ngày 6 tháng 11, cho biết cả bốn báo cáo liên quan mà họ dẫn lại đều bị cùng một bot đóng, trong đó báo cáo mới nhất được đóng ngày 6 tháng 11 mà không có phản hồi từ Anthropic. Tính đến ngày 2 tháng 11, mọi tệp bị lộ mà họ phát hiện vẫn còn nằm trên nhánh chính của kho mã, và một nửa trong số đó đã ở đó ít nhất 217 ngày.

Cả The Hacker News lẫn Apiiro đều không ghi nhận phản hồi từ Anthropic; hành vi được mô tả cũng chưa thay đổi: lần tới khi bạn chọn “đừng hỏi lại” cho một lệnh có nhập mật khẩu, mật khẩu đó cũng sẽ được lưu lại.

Thẻ: , , , , ,

Thêm chúng tôi trên Google

Thảo luận

Có 0 bình luận.