Công nghệ

Megalodon biến GitHub Actions thành cửa hậu vào 5.561 kho mã

Susan Hill

Một chiến dịch tự động đã đẩy 5.718 commit vào 5.561 kho mã GitHub trong sáu tiếng vào một sáng thứ Hai của tháng Năm. Các commit trông như công việc bảo trì CI thông thường (“ci: add build optimization step”, “build: improve ci performance”, “chore: optimize pipeline runtime”) và đến từ những tác giả mang tên vô hại: build-bot, auto-ci, pipeline-bot. Khi buổi sáng ngày 18 tháng Năm kết thúc, mỗi kho mã trong số đó đều có một tệp workflow chứa một payload bash mã hóa base64 nằm bên trong.

Chiến dịch có tên Megalodon. Đội nghiên cứu của SafeDep công bố vào ngày 21 tháng Năm, sau khi tháo rời các commit và lần theo dấu vết artefact tới một máy chủ chỉ huy và điều khiển duy nhất tại 216.126.225.129:8443. Điều đáng chú ý không phải là GitHub bị tấn công. Điều đáng chú ý là kẻ tấn công hoàn toàn không cần phải xâm nhập GitHub. Họ dùng chính GitHub Actions, hệ thống CI/CD được thiết kế để bảo đảm tính toàn vẹn của mã, làm phương tiện chuyển cửa hậu.

Hai workflow: một hàng loạt, một ngủ yên

Megalodon chạy ở hai chế độ. Biến thể hàng loạt thêm một tệp workflow mới có tên SysDiag, kích hoạt ở mỗi push và mỗi pull request, thu thập mọi thứ chạy qua nó. Biến thể có chủ đích, Optimize-Build, kiên nhẫn hơn: nó thay thế một workflow đang tồn tại bằng một trình kích hoạt workflow_dispatch, vốn nằm im cho đến khi có người gọi thủ công. Một cửa hậu đang ngủ trong thư mục CI của một dự án khó nhận ra hơn nhiều so với một workflow mới mang tên SysDiag, vì đa số maintainer không kiểm toán một tệp do chính họ từng viết.

Khi workflow chạy, payload đọc mọi thứ nó với tới trong môi trường CI. Các biến môi trường CI. Khóa truy cập, khóa bí mật và token phiên của AWS. Token truy cập GCP. Khóa SSH riêng. Thông tin đăng nhập .npmrc. Cấu hình Docker. Cấu hình Kubernetes. Token OIDC của GitHub Actions, cho phép kẻ tấn công giả danh chính workflow trước bất kỳ tài khoản đám mây nào mà nó được ủy quyền. Trước khi thoát, payload grep mã nguồn kho mã để tìm hơn ba mươi mẫu bí mật khác nhau (khóa API, mật khẩu, mảnh chứng chỉ) phòng khi có ai đó vô tình dán vào. Các điểm cuối metadata của AWS IMDSv2, GCP và Azure cũng được truy vấn để lấy danh tính máy đám mây.

Một pipeline tự chuyển cửa hậu của mình

Nạn nhân nghiêm trọng nhất tới giờ là Tiledesk, một nền tảng tương tác khách hàng mã nguồn mở có chín kho mã GitHub bị trúng đòn. Từ 19 đến 21 tháng Năm, Tiledesk đã đưa gói tiledesk-server lên npm với cửa hậu đã được biên dịch sẵn. Các phiên bản 2.18.6 đến 2.18.12 của @tiledesk/tiledesk-server nay mang theo mã payload, được cài đặt bởi mọi lập trình viên đã chạy npm install trong cửa sổ đó. Đó là đòn bẩy mà Megalodon được dựng lên: cài cửa hậu vào một dự án mã nguồn mở để pipeline phát hành của nó cài cửa hậu vào hàng trăm dự án phụ thuộc.

Black-Iron-Project mất tám kho mã. Hàng trăm dự án nhỏ hơn (tài khoản lập trình viên cá nhân, cụm máy trường đại học, sandbox bỏ hoang) bị một hoặc hai mỗi nơi. Kẻ tấn công có vẻ không chọn lọc. Khuôn mẫu là phủ rộng hơn là chính xác: các tài khoản dùng một lần với tên ngẫu nhiên tám ký tự đẩy các thông điệp commit giống hệt nhau, phút này qua phút khác. Máy chủ C2 lặng lẽ ghi lại những gì quay về.

Vì sao các tệp CI sống sót qua đợt kiểm toán

Cuộc tấn công này thành công vì cùng một lý do khiến nó sẽ lặp lại trong phần còn lại của năm 2026. Các pipeline CI/CD được xây dựng trên niềm tin theo thiết kế. Một lập trình viên nghi ngờ một binary lạ trong gói tải về vẫn chạy không do dự một tệp workflow xuất hiện trong kho mã của mình tuần trước, vì đó chính là bản chất của các tệp workflow: mã mà nền tảng phải chạy. Nhật ký kiểm toán tồn tại, nhưng ít đội đọc. Các commit mới đến với những cái tên kiểu build-bot và ci-bot. Diff nhỏ. Chuỗi base64 ở cuối workflow được làm khó hiểu một cách có chủ ý.

Cuốn sách phòng thủ thì đơn giản và ít làm hài lòng. Xoay vòng mọi bí mật từng chạm vào một kho mã từ 18 tháng Năm đến nay. Kiểm toán thư mục .github/workflows của mọi dự án thuộc quyền quản lý. Soi các commit có email tác giả không khớp với bất kỳ thành viên đội nào đã biết. Coi mọi blob base64 bên trong một tệp Actions là có tội cho đến khi được giải mã. Các tổ chức dùng Tiledesk nên quay lại 2.18.5 hoặc chờ một bản phát hành sạch. Bất cứ ai có quan hệ tin cậy OIDC giữa Actions và một nhà cung cấp đám mây nên thu hồi và phát hành lại quan hệ tin cậy đó.

Megalodon là chiến dịch đầu tiên ở quy mô này coi chính workflow CI là mục tiêu mềm. Sẽ không phải chiến dịch cuối. Bài học mà cuộc tấn công để lại là một bài học các lập trình viên đã từng nghe, nhỏ hơn: phần của pipeline mà bạn không đọc là phần kẻ tấn công viết hộ bạn.

Thảo luận

Có 0 bình luận.