Lỗ hổng Claude Code GitHub Action cho phép chiếm quyền điều khiển kho lưu trữ qua GitHub Issue

Một nhà nghiên cứu bảo mật đã phát hiện lỗ hổng trong Claude Code GitHub Action của Anthropic, cho phép kẻ tấn công chiếm quyền điều khiển các kho lưu trữ công khai chỉ bằng một GitHub Issue. Do kho lưu trữ của chính Anthropic cũng sử dụng quy trình tương tự, một cuộc tấn công có thể đã chèn mã độc vào chính hành động này và gây ảnh hưởng đến các dự án hạ nguồn.
Lỗ hổng Claude Code GitHub Action

Một nhà nghiên cứu bảo mật đã phát hiện một lỗ hổng trong Claude Code GitHub Action của Anthropic, cho phép kẻ tấn công chiếm quyền điều khiển các kho lưu trữ công khai đang chạy công cụ này chỉ bằng cách mở một GitHub Issue. Do chính kho lưu trữ Action của Anthropic cũng sử dụng quy trình làm việc tương tự, một cuộc tấn công thực tế có thể đã chèn mã độc vào chính Action đó và ảnh hưởng đến các dự án hạ nguồn sử dụng nó.

RyotaK từ GMO Flatt Security đã báo cáo lỗi vượt qua kiểm soát cốt lõi cho Anthropic vào tháng 1 và Anthropic đã khắc phục trong vòng bốn ngày, cùng với việc tăng cường bảo mật thêm trong suốt mùa xuân. Các bản sửa lỗi đã được cập nhật trong phiên bản claude-code-action v1.0.94.

Anthropic đánh giá mức độ nghiêm trọng của lỗ hổng này là 7.8 theo thang CVSS v4.0 và đã trả tiền thưởng lỗi. Bản báo cáo không trích dẫn mã CVE cụ thể.

Cơ chế hoạt động và rủi ro từ quyền truy cập rộng

Claude Code GitHub Actions đưa Claude vào các luồng CI/CD để phân loại Issue, dán nhãn, đánh giá Pull Request hoặc thực hiện các lệnh slash. Theo mặc định, quy trình làm việc này có quyền đọc và ghi vào mã nguồn, Issue, Pull Request, thảo luận và các tệp workflow của kho lưu trữ. Do các quyền này rất rộng, Action này đáng lẽ phải rất khắt khe về việc ai có thể kích hoạt nó: chỉ những người dùng có quyền ghi (write access).

Tuy nhiên, quá trình kiểm tra trình kích hoạt đã tồn tại một sơ hở. Nó chấp nhận bất kỳ thực thể nào có tên kết thúc bằng [bot], dựa trên giả định rằng các GitHub Apps là những thực thể tin cậy do quản trị viên cài đặt. Vấn đề là bất kỳ ai cũng có thể đăng ký một GitHub App, cài đặt nó trên một kho lưu trữ do họ sở hữu và sử dụng token của nó để mở Issue hoặc Pull Request trên bất kỳ kho lưu trữ công khai nào. Action này chỉ nhìn thấy "một bot" và cho phép nội dung của kẻ tấn công đi qua. Trong khi chế độ Tag có thêm bước kiểm tra để xác nhận thực thể là người thật, thì chế độ Agent lại không có, dẫn đến việc bị khai thác.

Kỹ thuật Indirect Prompt Injection

Từ đó, kẻ tấn công sử dụng kỹ thuật indirect prompt injection (tiêm lệnh gián tiếp), một thủ thuật chèn các hướng dẫn vào bên trong nội dung mà AI đọc để mô hình tuân theo chúng thay vì nhiệm vụ thực tế. RyotaK đã viết một Issue có nội dung trông giống như một thông báo lỗi, sau đó tinh chỉnh prompt cho đến khi Claude "khôi phục" bằng cách chạy các lệnh được ẩn giấu bên trong.

Mục tiêu là tệp /proc/self/environ, một tệp Linux lưu trữ các biến môi trường của tiến trình, bao gồm cả các bí mật (secrets). Mặc dù Claude Code chặn các lần đọc thông thường, RyotaK vẫn vượt qua được lớp bảo vệ và khiến Claude ghi các giá trị này ngược lại vào Issue để kẻ tấn công có thể thu thập.

Mô phỏng tấn công Claude GitHub Action

Đầu độc chuỗi cung ứng

Giải thưởng thực sự nằm ở cặp thông tin xác thực mà GitHub Actions sử dụng để yêu cầu OIDC token, một token đã ký chứng minh danh tính của quy trình làm việc đang chạy trong kho lưu trữ. Claude Code trao đổi token đó với máy chủ của Anthropic để lấy token cài đặt Claude GitHub App có quyền ghi. Nếu đánh cắp được các thông tin xác thực này, kẻ tấn công có thể chiếm quyền ghi vào mã nguồn, Issue và workflow của mục tiêu. Nếu nhắm mục tiêu vào chính kho lưu trữ claude-code-action, kẻ tấn công có thể đầu độc Action mà các dự án khác đang sử dụng.

RyotaK cũng chỉ ra một con đường dễ dàng hơn: quy trình phân loại Issue mẫu của Anthropic đi kèm với cài đặt allowed_non_write_users: "*", cho phép bất kỳ ai cũng có thể kích hoạt nó. Tệ hơn nữa, Claude đã đăng tóm tắt nhiệm vụ lên bảng tóm tắt công khai của workflow, tạo điều kiện cho dữ liệu bị rò rỉ ra ngoài.

Khuyến nghị bảo mật

Người dùng nên cập nhật lên claude-code-action v1.0.94 hoặc mới hơn. Sau đó, hãy kiểm tra bất kỳ workflow nào cho phép người dùng không có quyền ghi hoặc bot kích hoạt Claude. Nếu nó nhận đầu vào không đáng tin cậy, đừng cung cấp cho nó bất kỳ bí mật nào ngoài Anthropic API key và GITHUB_TOKEN, đồng thời loại bỏ các công cụ và quyền hạn có thể bị lạm dụng để trích xuất dữ liệu.

Các vụ tấn công thực tế

Đây không còn là lý thuyết. Các thiết lập tương tự đã gây ra các vụ tấn công chuỗi cung ứng thực tế:

  • Vào tháng 2, một tiêu đề Issue bị chèn prompt injection nhắm vào workflow của Cline đã cho phép kẻ tấn công đánh cắp token phát hành npm và đẩy phiên bản [email protected] trái phép.
  • Bot tự trị "HackerBot-Claw" đã dành thời gian cuối tháng 2 để dò quét các cấu hình sai của GitHub Actions tại Microsoft, Datadog và các dự án CNCF.

RyotaK cho biết ông đã báo cáo khoảng 50 cách khác nhau để vượt qua hệ thống phân quyền của Claude Code và chạy lệnh. Vấn đề prompt injection vẫn chưa được giải quyết triệt để, và một Agent AI với các công cụ và token thực tế có thể bị thao túng tối đa theo phạm vi quyền hạn mà nó được cấp.