Các AI coding agent khi được yêu cầu chia sẻ ảnh chụp màn hình các thay đổi mã nguồn để đánh giá (review) đã đưa các hình ảnh nội bộ của công ty vào các kho lưu trữ GitHub công khai, công ty bảo mật Glow cho biết.
Các nhà nghiên cứu của Glow đã tìm thấy hơn 13.000 hình ảnh nội bộ từ các nhà phát triển tại hơn 300 tổ chức, bao gồm hồ sơ thanh toán của khách hàng và ảnh chụp màn hình các tính năng chưa được phát hành. Trong hầu hết các trường hợp, chúng nằm dưới tài khoản cá nhân của nhà phát triển, nơi bất kỳ ai cũng có thể tải xuống nhưng đội ngũ bảo mật của công ty lại không nhìn thấy.
Các tổ chức bị ảnh hưởng bao gồm một trong những công ty công nghệ lớn nhất thế giới, một phòng thí nghiệm AI hàng đầu, một nhà cung cấp phần mềm doanh nghiệp lớn và một công ty du lịch trong danh sách Fortune 500. Glow đã bắt đầu liên hệ với họ vào ngày 9 tháng 9, công bố các phát hiện vào ngày 29 tháng 9 và cho biết những bên khác có khả năng cũng bị ảnh hưởng.
Trong một trường hợp, một nhà phát triển tại một nhà sản xuất có hơn 100.000 nhân viên đã yêu cầu một agent kiểm tra bản sửa lỗi cho màn hình thanh toán nội bộ. Agent này đã tạo một kho lưu trữ công khai trong tài khoản GitHub cá nhân của nhà phát triển và đăng các ảnh chụp màn hình lên đó.
Các hình ảnh cho thấy hồ sơ thanh toán của một công ty tiện ích. Vì agent chạy trên máy tính xách tay của nhân viên và kho lưu trữ nằm ngoài tổ chức GitHub của công ty, đội ngũ bảo mật đã không phát hiện ra. Những hình ảnh này vẫn ở chế độ công khai khi Glow thông báo cho công ty.
Glow chưa cho biết liệu có ai khác ngoài các nhà nghiên cứu của họ đã tải xuống các hình ảnh hay không. Công ty cũng chưa công bố cách họ tìm thấy hoặc thống kê chúng. Glow hiện đang bán phần mềm mà họ tuyên bố có thể ngăn chặn các agent thực hiện các hành động như thế này.
Tại sao các hình ảnh lại trở nên công khai
Mỗi trường hợp mà Glow kiểm tra đều bắt đầu bằng việc nhà phát triển yêu cầu một agent chứng minh rằng một thay đổi về giao diện đã hoạt động để những người đánh giá có thể thấy trước và sau khi thay đổi.
Cho đến ngày 1 tháng 9, công cụ dòng lệnh của GitHub, gh, không thể thêm các hình ảnh đó vào một pull request mà chỉ ghi được văn bản. Việc thêm hình ảnh đồng nghĩa với việc phải mở trình duyệt web, và các nhà phát triển đã yêu cầu GitHub thay đổi điều này từ năm 2020.
Lưu trữ hình ảnh bên trong kho lưu trữ riêng tư (private repository) cũng không giúp ích được gì, vì chúng sẽ hiển thị lỗi đối với những người đánh giá.
Glow cho biết các agent khi làm việc thông qua dòng lệnh đã thấy rằng chúng không thể đính kèm ảnh chụp màn hình. Vì vậy, chúng đã đưa các hình ảnh vào một kho lưu trữ công khai riêng biệt, thường là dưới tài khoản của chính nhà phát triển, và cung cấp chúng cho những người đánh giá từ đó.
Glow đã chạy một thử nghiệm tương tự trong phòng thí nghiệm của mình bằng cách sử dụng Claude Code với mô hình Opus 5. Khi được yêu cầu thay đổi màu tiêu đề của một dự án thử nghiệm Minesweeper và hiển thị kết quả, agent đã tạo một kho lưu trữ công khai mới, sweeper-demo/pr-assets, cho hai ảnh chụp màn hình.
Trong phần suy luận được ghi lại, agent lưu ý rằng các hình ảnh được commit vào kho lưu trữ riêng tư sẽ hiển thị "bị lỗi cho người đánh giá" trong pull request. Nó cũng phải giữ cho "không có gì ngoài index.html trong repo" và do đó kết luận rằng cách duy nhất là lưu trữ hình ảnh ở nơi khác.
Đó chỉ là một agent trong phòng thí nghiệm. Trong các trường hợp mà Glow tìm thấy, các agent đến từ nhiều mô hình AI khác nhau và Glow chưa nêu tên cụ thể của chúng.
Tại một công ty phần mềm, Glow cho biết thói quen này đã lây lan từ agent này sang agent khác. Các agent làm việc cho nhiều kỹ sư đã bắt đầu đăng công khai các ảnh chụp màn hình đánh giá vào đầu tháng 7.
Trong vòng một tuần, hơn một chục agent đã lưu phương pháp này dưới dạng một "skill" (kỹ năng) để sử dụng cho mọi ticket. Skill là một tệp hướng dẫn mà agent tải và làm theo.
Với kỹ năng đó, các agent đã tải lên hơn một nghìn ảnh chụp màn hình và video quay màn hình sản phẩm của công ty. Chúng cũng đăng các bản tóm tắt bằng văn bản về các tính năng vẫn còn vài tuần hoặc vài tháng nữa mới ra mắt.
Khoảng một phần ba các tổ chức bị ảnh hưởng có các nhà phát triển chạy gitshot, một công cụ mã nguồn mở nhỏ dùng để tải ảnh chụp màn hình cho việc đánh giá mã. Tại một số tổ chức lớn, agent đã tìm thấy công cụ này và sử dụng nó để lách giới hạn của dòng lệnh.
Công cụ này được xây dựng cho cả AI agent và con người. Nó có thể được cài đặt như một skill trong hơn 40 AI coding agent.
Glow đã tìm thấy hơn 100 tài khoản công khai chia sẻ công việc nội bộ thông qua gitshot. Tại một công ty dịch vụ tài chính, các hình ảnh cho thấy bảng điều khiển thanh toán và ngân quỹ nội bộ, màn hình rút tiền của một khách hàng cụ thể và hai bản quay màn hình bảng điều khiển chuyển tiền của công ty.
The Hacker News đã xem xét mã nguồn của gitshot vào ngày 30 tháng 9. Theo mặc định, khi người dùng đăng nhập vào gh, công cụ sẽ đưa hình ảnh vào một kho lưu trữ công khai có tên gitshot-images dưới tài khoản cá nhân của người dùng đó. Phiên bản được xem xét (thay đổi lần cuối vào tháng 4) từ chối sử dụng kho lưu trữ riêng tư hoặc kho lưu trữ thuộc sở hữu của một tổ chức.
Các hình ảnh được lưu trữ dưới dạng "release assets", các tệp được đính kèm vào một bản phát hành thay vì được giữ cùng với mã nguồn. Bất kỳ ai cũng có thể liệt kê và tải xuống chúng mà không cần đăng nhập.
Tệp README của công cụ và skill của nó đều cảnh báo rằng kho lưu trữ là công khai và khuyến cáo không tải lên thông tin đăng nhập hoặc các bảng điều khiển nội bộ.
Những điều cần kiểm tra
Glow cho biết việc kiểm tra tổ chức GitHub của chính công ty là không đủ vì trong hầu hết các trường hợp, hình ảnh được lưu trữ dưới các tài khoản cá nhân. Để tìm thấy chúng:
- Kiểm tra các kho lưu trữ công khai liên kết với tài khoản cá nhân của tất cả những người đã commit vào các kho lưu trữ riêng tư của bạn, bao gồm cả những người đã nghỉ việc.
- Xem xét các "releases" và "gists", không chỉ các tệp tin. Hình ảnh đính kèm vào một release không hiển thị trong danh sách tệp của kho lưu trữ.
- Tìm kiếm các kho lưu trữ có tên
gitshot-imagesvà các bản phát hành được gắn thẻ_gitshot. - Đừng chỉ dựa vào các công cụ quét (scanners) vốn chỉ đọc được văn bản chứ không đọc được hình ảnh.
Nếu bạn tìm thấy các hình ảnh bị lộ, hãy xóa chúng ở mọi nơi chúng tồn tại, yêu cầu bất kỳ ai có bản sao hãy xóa nó và thay đổi (rotate) bất kỳ thông tin đăng nhập nào hiển thị trong đó, Glow khuyên.
Để ngăn chặn điều này tái diễn, Glow cho biết các đội ngũ bảo mật, chứ không phải từng nhà phát triển, nên kiểm soát cách thiết lập các agent. Họ đề xuất các bước sau:
- Yêu cầu một bước đánh giá trước khi một agent tạo một kho lưu trữ công khai, push lên tài khoản cá nhân hoặc gist, hoặc chuyển một kho lưu trữ riêng tư thành công khai.
- Đọc các tệp kỹ năng (skill) và tệp hướng dẫn dùng chung mà agent của bạn tải lên, vì đó là nơi các cách xử lý tạm thời (workaround) như thế này được truyền bá.
- Kiểm tra các máy tính của công ty để tìm các công cụ như gitshot và gỡ bỏ chúng.
Công cụ dòng lệnh của GitHub hiện đã cung cấp một lộ trình khác. Kể từ phiên bản 2.99.0 phát hành ngày 1 tháng 9, gh có thể đính kèm hình ảnh vào một pull request, issue hoặc comment bằng cờ --attach.
GitHub cho biết các AI coding agent cũng có thể sử dụng cờ này. Nó cần quyền ghi vào kho lưu trữ và hoạt động trên GitHub.com và GitHub Enterprise Cloud, nhưng không hoạt động trên GitHub Enterprise Server.
Tài liệu của GitHub về việc đính kèm tệp cho biết các tệp được đính kèm trong một kho lưu trữ riêng tư chỉ có thể được xem bởi những người có quyền truy cập vào kho lưu trữ đó.