GitHub Actions được hỗ trợ bởi AI có thể bị chiếm quyền điều khiển chỉ bằng một bình luận duy nhất, làm rò rỉ các khóa API, token đám mây và các bí mật khác. Một nhà nghiên cứu bảo mật đã phát hiện ra 22 kho lưu trữ mã nguồn mở, nơi mà một trình kích hoạt công khai, một công cụ AI chạy với cờ “skip prompts” và các bí mật bị lộ đã tạo ra một con đường trích xuất dữ liệu trực tiếp.

Cách thức lỗ hổng hoạt động

Các dự án hiện đang tích hợp các tác nhân AI (AI agents)—như Claude Code, GitHub Copilot CLI và các công cụ tương tự—trực tiếp vào các luồng CI (CI pipelines). Một bước trong workflow sẽ chạy một lệnh shell và thường thêm một cờ để yêu cầu công cụ bỏ qua các yêu cầu cấp quyền tương tác. Khi workflow bắt đầu từ bất kỳ đầu vào công khai nào—một issue, một bình luận, hoặc tiêu đề của một pull-request—kẻ tấn công chỉ cần đăng một dòng văn bản mà AI sẽ coi đó là một câu lệnh.

AI, vốn đã được cấp quyền truy cập shell không giới hạn thông qua cờ “skip prompts”, có thể đọc bất kỳ biến môi trường hoặc tệp nào mà workflow để lộ ra. Nếu công việc (job) đó cũng tải các bí mật—như khóa API, token dịch vụ đám mây hoặc thông tin xác thực tài khoản dịch vụ đầy đủ—AI sẽ chuyển các giá trị đó đến một máy chủ do kẻ tấn công kiểm soát. Không cần thay đổi mã nguồn, không cần thêm phụ thuộc (dependency) mới, chỉ cần một bình luận trông có vẻ vô hại.

Các ví dụ thực tế

Nhà nghiên cứu đã xác nhận ba kho lưu trữ dễ bị tổn thương đã được vá lỗi:

  • pymc-labs/pymc-marketing – một issue công khai có thể được sử dụng để lấy khóa Anthropic API thông qua tấn công chèn câu lệnh (prompt injection).
  • MadAppGang/dingo – workflow đã cấp cho Claude Code toàn quyền truy cập Bash và để lộ hai bí mật trong cùng một job.
  • MadAppGang/claudish – sử dụng lại cùng một mẫu dễ bị tổn thương như dự án dingo.

Một phát hiện liên quan đến một khóa tài khoản dịch vụ đám mây đang hoạt động, điều mà nhà nghiên cứu đã báo cáo trực tiếp cho đội ngũ bảo mật của một nhà cung cấp AI lớn. Mười hai báo cáo bổ sung đang chờ xử lý với những người duy trì (maintainers); tên của họ sẽ được giữ kín cho đến khi các bản sửa lỗi được triển khai chính thức.

Những rủi ro tiềm ẩn

Khi kẻ tấn công trích xuất được một bí mật, thiệt hại có thể xảy ra ngay lập tức và rất tốn kém. Một khóa tài khoản dịch vụ đám mây cho phép truy cập không giới hạn vào các tài nguyên tính toán, các storage bucket và các dịch vụ trả phí khác. Một khóa API của nhà cung cấp mô hình ngôn ngữ lớn có thể thực hiện các truy vấn không giới hạn, có khả năng làm phát sinh hàng ngàn đô la chi phí. Vì lỗ hổng khai thác diễn ra bên trong môi trường CI, sự xâm nhập có thể lan rộng xuống phía dưới: bất kỳ thành phẩm (artifact) nào được xây dựng trên runner bị xâm nhập đều có thể mang mã độc, biến một kho lưu trữ duy nhất thành một vector tấn công chuỗi cung ứng.

Đối với các đội ngũ dựa vào CI hỗ trợ bởi AI, sự đánh đổi là rất rõ rệt. Sự tiện lợi của việc tự động tạo mã, linting hoặc tài liệu phải được cân nhắc kỹ với rủi ro rằng một bình luận công khai có thể trở thành một cửa sau (backdoor) ngầm.

Tại sao lỗ hổng này dễ bị bỏ qua

Ban đầu, nhà nghiên cứu đã gửi sáu báo cáo nhưng sau đó đã rút lại. Việc rút lại này xuất phát từ các giả định về việc kiểm tra quyền của GitHub Actions, chứ không phải từ việc xem xét từng dòng mã nguồn của Action đó. Tài liệu hướng dẫn và trực giác có thể gây nhầm lẫn; cách duy nhất đáng tin cậy để xác nhận trạng thái bảo mật của một bước được hỗ trợ bởi AI là kiểm tra mã nguồn chạy công cụ đó và tệp workflow YAML kết nối chúng lại với nhau.

Danh sách kiểm tra giảm thiểu rủi ro

Nếu bạn chạy một AI CLI hoặc công cụ tương tự bên trong một workflow GitHub Actions, hãy trả lời hai câu hỏi này trước khi merge:

  1. Ai có thể kích hoạt workflow? Giới hạn các trình kích hoạt cho các sự kiện đáng tin cậy (ví dụ: push vào các nhánh được bảo vệ) hoặc yêu cầu phê duyệt rõ ràng cho các lần chạy được bắt đầu bởi những người đóng góp bên ngoài. Tránh sử dụng on: issue_comment hoặc on: issues mà không có các bước kiểm soát bổ sung.

  2. Những bí mật nào được tải trong cùng một job? Tuyệt đối không để lộ các khóa API, token đám mây hoặc thông tin xác thực tài khoản dịch vụ trong một job cũng chạy một tác nhân AI với quyền truy cập shell không giới hạn. Hãy tách các bước chứa nhiều bí mật thành các job hoặc runner riêng biệt mà không gọi các công cụ AI.

Các bước tăng cường bảo mật bổ sung:

  • Loại bỏ cờ bỏ qua các yêu cầu cấp quyền, buộc công cụ AI phải yêu cầu xác nhận rõ ràng trước khi thực thi các lệnh shell.
  • Thêm một bước để làm sạch hoặc ẩn đi bất kỳ biến môi trường nào mà công cụ AI có thể đọc được.
  • Sử dụng các runner tự lưu trữ (self-hosted runners) với các kiểm soát lưu lượng mạng đi ra (network egress controls) để chặn việc trích xuất dữ liệu đến các điểm cuối tùy ý.

Quan điểm đối lập: Tiện ích của AI trong CI

Những người ủng hộ lập luận rằng lợi ích về năng suất sẽ lớn hơn rủi ro. Các gợi ý mã tự động giúp giảm thời gian xem xét (review), và việc kiểm thử do AI điều khiển giúp phát hiện lỗi sớm hơn. Tuy nhiên, chính sự tiện lợi này lại mở rộng bề mặt tấn công. Chìa khóa không phải là từ bỏ AI mà là phải coi bất kỳ công cụ nào có đặc quyền ở cấp độ shell là một vector tấn công tiềm năng.

Những điều cần theo dõi tiếp theo

Những phát hiện này đã khơi dậy các cuộc thảo luận trên các diễn đàn bảo mật của GitHub về việc thắt chặt các quyền mặc định cho các Actions được hỗ trợ bởi AI. Các bản cập nhật nền tảng trong tương lai có thể bao gồm:

  • Một flag buộc các công cụ AI phải chạy trong môi trường sandboxed mà không có quyền truy cập shell trực tiếp.
  • Tính năng phát hiện tích hợp sẵn các mẫu prompt-injection trong nội dung issue hoặc bình luận.
  • Cảnh báo tự động khi một workflow kết hợp các trigger công khai với các job chứa secret.

Hiện tại, trách nhiệm vẫn thuộc về những người duy trì repository. 22 repository được xác định cho thấy vấn đề này không phải là cá biệt; bất kỳ dự án nào có mô hình workflow tương tự đều có nguy cơ bị tấn công. Một cuộc kiểm tra nhanh các cấu hình CI có thể phát hiện ra vấn đề trước khi kẻ tấn công thực hiện.

Điểm mấu chốt: Chỉ một dòng văn bản trong một GitHub issue công khai có thể trao cho một AI agent toàn quyền kiểm soát môi trường CI của bạn và đánh cắp các secret mà bạn lưu trữ tại đó. Hãy xác minh ai có thể khởi chạy các workflow của bạn, giữ các secret tránh xa các bước do AI điều khiển, và xem xét kỹ lưỡng mọi flag cấp quyền không được kiểm soát. Chi phí của một vụ vi phạm sẽ lớn hơn rất nhiều so với nỗ lực của một cuộc kiểm tra có kỷ luật.