Các trợ lý lập trình AI đã không còn là những tiện ích tự động hoàn thành (autocomplete) đơn thuần từ lâu rồi. Chúng lập chỉ mục các kho lưu trữ (repositories) của bạn, đọc các biến môi trường, gợi ý các lệnh shell và thì thầm các bản sửa lỗi vào terminal của bạn. Chúng tồn tại trong cùng một không gian bộ nhớ với mã nguồn, các token cục bộ, cấu hình cloud CLI và các khóa SSH của bạn. Sự gần gũi đó khiến chúng trở thành một phần trong bề mặt tấn công (attack surface) của bạn một cách trực tiếp, chứ không phải chỉ là lý thuyết.
Hầu hết các nhóm đã áp dụng các công cụ này một cách vội vã. Một lập trình viên cài đặt một tiện ích mở rộng, xác thực bằng một mã thông báo truy cập cá nhân (personal access token) và bắt đầu chấp nhận các gợi ý do AI tạo ra. Các quy trình đánh giá bảo mật hiếm khi theo kịp tốc độ này. Hai mối đe dọa gần đây, Djinn Stealer và ChocoPoC, cho thấy chính xác tại sao khoảng cách đó lại nguy hiểm.
Người hàng xóm mà bạn quên kiểm tra
Hãy nghĩ về nơi mà trợ lý của bạn thực sự hiện diện. Nếu bạn sử dụng GitHub Copilot, Cursor, Continue, hoặc bất kỳ công cụ tương tự nào, nó có khả năng có quyền đọc các tệp đang mở, cấu trúc dự án và đôi khi là toàn bộ hệ thống tệp cục bộ của bạn. Nó lưu trữ các mã thông báo xác thực (authentication tokens) tại các vị trí có thể dự đoán được trên đĩa. Nó chạy bên trong IDE của bạn, bản thân IDE đó lại chạy với quyền người dùng của bạn. Điều đó có nghĩa là một phần mềm độc hại xâm nhập vào máy trạm của bạn không cần phải đi tìm thông tin xác thực một cách mù quáng. Trợ lý AI đã thu thập sẵn các khóa quan trọng vào một nơi thuận tiện.
Đây không phải là một lỗi kiến trúc mang tính giả thuyết. Djinn Stealer được xây dựng để khai thác chính bố cục này. Nó nhắm mục tiêu cụ thể vào thông tin xác thực của lập trình viên và các phiên làm việc (sessions) của công cụ AI. Thay vì quét mọi ngóc ngách của hệ thống tệp, nó săn tìm các token cung cấp sức mạnh cho quy trình lập trình của bạn. Nếu trợ lý của bạn đã được xác thực với GitHub, GitLab hoặc một nhà cung cấp đám mây, việc đánh cắp phiên đó sẽ mang lại cho kẻ tấn công nhiều hơn là chỉ mã nguồn. Nó mang lại cho chúng danh tính của bạn. Chúng có thể đẩy các bản commit dưới tên bạn, đọc các kho lưu trữ riêng tư và thăm dò chính các API mà bạn sử dụng hàng ngày.
Djinn Stealer: Săn tìm những chiếc chìa khóa vương quốc của bạn
Khi Djinn Stealer xâm nhập vào một máy tính, nó hoạt động giống như một tên trộm thông minh biết rõ ngăn kéo nào chứa chìa khóa dự phòng. Nó tìm kiếm các thư mục cấu hình của công cụ AI, kho lưu trữ phiên trình duyệt và các tệp thông tin xác thực mà lập trình viên tích lũy qua nhiều tháng làm việc. Kẻ trộm biết rằng các môi trường phát triển hiện đại tập trung hóa quyền truy cập. Một mã thông báo OAuth cho trợ lý AI của bạn có thể trùng lặp với quyền truy cập vào các kho lưu trữ gói (package registries), kho lưu trữ container và các API hạ tầng.
Rủi ro nhân lên gấp bội khi các lập trình viên kiểm tra mã nguồn proof-of-concept (PoC) tại máy cục bộ. Bạn nhân bản (clone) một kho lưu trữ thú vị từ một nhà nghiên cứu bảo mật, chạy một tập lệnh để xem nó hoạt động như thế nào, và tập lệnh đó âm thầm thực thi một trình thu thập thông tin xác thực ở chế độ nền. Vì các token của trợ lý AI nằm trong các đường dẫn tiêu chuẩn dưới thư mục home của bạn, kẻ trộm có thể đánh cắp chúng trước khi bạn kịp đọc xong tệp README. Điều tồi tệ nhất là các token này thường vượt qua được SSO của doanh nghiệp vì chúng được tạo ra cho các công cụ năng suất, chứ không phải cho các hệ thống sản xuất (production).
ChocoPoC: Khi các phụ thuộc (dependencies) nói dối
Trong khi Djinn Stealer đột nhập vào nhà, ChocoPoC lại lẻn vào qua khe cửa thư. Mối đe dọa này ẩn giấu các đường dẫn độc hại bên trong các phụ thuộc Python, cụ thể là các gói có tên là frint và skytext. Payload không nằm trong tập lệnh hiển thị mà một cuộc kiểm tra thông thường có thể phát hiện được. Thay vào đó, nó chôn vùi mình sâu hơn,
