Một chiến dịch tấn công tinh vi mang tên prt-scan đang nhắm mục tiêu vào các kho mã nguồn mở trên GitHub bằng cách ngụy trang mã độc dưới dạng các bản cập nhật cấu hình build CI hoàn toàn thông thường. Kẻ tấn công khai thác lỗ hổng trong GitHub Actions workflow trigger nhằm đánh cắp sensitive tokens, credentials và cloud secrets từ các developer vô tình kích hoạt các pull request (PR) giả mạo.
Chiến dịch lần đầu xuất hiện vào ngày 11/03/2026 thông qua tài khoản testedbefore. Trong những tuần tiếp theo, threat actor này đã luân phiên sử dụng sáu tài khoản GitHub khác nhau để mở hơn 500 malicious PRs với tiêu đề vô hại “ci: update build configuration”. Đến ngày 02/04/2026, chiến dịch bùng nổ mạnh mẽ khi tài khoản ezmtebo gửi hơn 475 PR chỉ trong vòng 26 giờ. Đội ngũ analyst tại Wiz Research đã truy vết và xác định có tổng cộng sáu đợt hoạt động riêng biệt từ cùng một nguồn tấn công trước khi sự việc được chuyên gia Charlie Eriksen công khai.
Các nhà nghiên cứu bao gồm Rami McCarthy, Hila Ramati, Scott Piper và Benjamin Read xác nhận kẻ tấn công đã xâm nhập thành công ít nhất hai npm package là @codfish/eslint-config và @codfish/actions trên 106 phiên bản. Mặc dù các tổ chức lớn như Sentry, OpenSearch và NixOS đã chặn đứng cuộc tấn công nhờ cơ chế phê duyệt người dùng nghiêm ngặt, nhưng việc đánh cắp các AWS keys, Cloudflare API tokens và Netlify authentication tokens vẫn được ghi nhận ở nhiều nơi khác.
Điểm đáng chú ý của chiến dịch này nằm ở khả năng tự động hóa linh hoạt theo từng mục tiêu cụ thể. Thay vì tấn công dàn trải, bộ công cụ của kẻ tấn công có khả năng tự động fork repository và phân tích ngăn xếp công nghệ (tech stack) của dự án. Từ đó, mã độc được chèn chính xác vào các tệp tin đặc thù của từng ngôn ngữ lập trình: tệp test cho Go, conftest.py cho các dự án Python và các script trong package.json đối với Node.js.
Nhờ quy trình tự động hoá linh hoạt, ức độ thích ứng của cuộc tấn công không còn phụ thuộc vào kỹ năng thủ công, cho phép tin tặc triển khai các chiến dịch chuỗi cung ứng quy mô lớn với tốc độ máy móc và khả năng tùy biến cao đối với từng nạn nhân. Với hơn 450 nỗ lực khai thác đã được phân tích, dù tỷ lệ thành công duy trì ở mức dưới 10%, chiến dịch vẫn dẫn đến hàng chục vụ xâm nhập thực tế
Hầu hết các lần tấn công thành công đều tập trung vào small hobbyist projects, chủ yếu temporary GitHub workflow tokens. Tuy nhiên, với hơn 500 attempts, ngay cả tỷ lệ thành công khiêm tốn cũng có thể dẫn đến hàng chục real compromises. Đáng chú ý, kẻ xâm nhập vẫn liên tục học hỏi, refine payloads và cải thiện kĩ thuật né tránh qua từng wave mới.
Cơ chế hoạt động của cuộc tấn công
Chiến dịch lạm dụng trigger pull_request_target trong GitHub Actions. Khác biệt căn bản so với trigger pull_request tiêu chuẩn, pull_request_target chạy hoàn toàn trong context của base repository thay vì fork, từ đó cấp full access đến các kho lưu trữ bí mật ngay cả khi PR xuất phát từ tài khoản fork bên ngoài không đáng tin cậy.
Các repository không hạn chế trigger này chỉ dành cho người dùng đã được xác minh sẽ trực tiếp bị phơi bày trước loại tấn công này. Khi vulnerable workflow được kích hoạt trên malicious PR, payload lập tức khởi động gồm 5 giai đoạn.
Giai đoạn đầu tiên trích xuất GITHUB_TOKEN từ git configuration, compress dữ liệu, sau đó write base64-encoded output vào workflow logs để attacker thu thập sau này.
Giai đoạn thứ hai sử dụng stolen token để gọi GitHub API,lập bản đồ tên bí danh, deployment environments và workflow files đồng thời probe cloud metadata endpoints tìm kiếm AWS, Azure và Google Cloud credentials.
Một tiến trình daemon chạy nền sau đó monitor Linux /proc filesystem mỗi hai giây trong suốt mười phút, catch bất kỳ secrets nào được load bởi các job steps sau, và post captured data trực tiếp vào PR comments – nơi dữ liệu vẫn tồn tại ngay cả sau khi workflow logs bị xóa.
Khuyến cáo từ chuyên gia bảo mật
Trước diễn biến phức tạp của chiến dịch prt-scan đang khai thác thực tế pull_request_target để exfiltrate secrets, các tổ chức và developer cần triển khai ngay các biện pháp phòng vệ chủ động và quyết liệt:
- Audit khẩn cấp repository: Kiểm tra ngay các branches theo pattern prt-scan-[12-character-hex], PRs mang title “ci: update build configuration”, và các marker trong workflow logs như ==PRT_EXFIL_START_[nonce]==.
- Hạn chế trigger pull_request_target: Chỉ cho phép trigger này chạy với approved contributors, đồng thời áp dụng actor-restricted hoặc path-based workflow trigger conditions để tăng cường kiểm soát.
- Enforce strict first-time contributor approval: Kích hoạt cơ chế phê duyệt nghiêm ngặt cho mọi first-time contributor nhằm ngăn chặn malicious PR từ các tài khoản mới.
- Rotate credentials khẩn cấp: Tất cả exposed secrets bao gồm AWS keys, NPM tokens, Cloudflare API tokens, Netlify tokens và GitHub workflow tokens cần được rotate ngay lập tức.
- Giám sát và hardening workflow: Triển khai security scanning cho GitHub Actions, tuân thủ nguyên tắc least-privilege và tránh chạy workflow từ untrusted PRs trong context của base repository.
Việc áp dụng kịp thời và triệt để các khuyến nghị trên sẽ giúp giảm thiểu đáng kể rủi ro bị compromise trong bối cảnh các supply chain attack ngày càng tinh vi và được hỗ trợ bởi AI.
