Bảo mật & quyền riêng tư

Cuộc tấn công CI trên GitHub quy mô lớn đánh cắp bí mật từ hàng nghìn kho lưu trữ

Tin tặc đã sử dụng 4.837 tài khoản GitHub bị xâm nhập để chèn mã độc đánh cắp bí mật vào hơn 1.800 kho lưu trữ, nhắm mục tiêu vào các quy trình làm việc CI và thông tin đăng nhập đám mây.

Giá đỡ máy chủ với đèn cảnh báo màu đỏ và biểu tượng ổ khóa nổi đại diện cho các mối đe dọa bảo mật
Ảnh minh họa tạo riêng cho bài viết

Bài được dịch tự động từ bản gốc tiếng Anh.

Bắt đầu từ thứ Ba, một cuộc tấn công mạng phối hợp đã khai thác thông tin đăng nhập bị đánh cắp từ 4.837 tài khoản GitHub để thâm nhập vào chuỗi cung ứng phần mềm. Tin tặc cài đặt mã độc được thiết kế để đánh cắp bí mật và thông tin đăng nhập đám mây từ các quy trình làm việc Continuous Integration (CI) trong ít nhất 1.806 kho lưu trữ. Chiến dịch này nhấn mạnh những rủi ro nghiêm trọng liên quan đến danh tính nhà phát triển bị xâm phạm và các đường ống xây dựng tự động.

Chuyện gì đã xảy ra

Cuộc tấn công bắt đầu khi tin tặc mở các yêu cầu kéo (pull request) thử nghiệm có tiêu đề "docs: dependency audit notes" từ các nhánh có tên "wfx-docs". Các bài kiểm tra này được triển khai trên 61.764 kho lưu trữ để xác minh quyền ghi. Tại những kho lưu trữ mà quyền truy cập được cấp, tin tặc đã chèn một công cụ đánh cắp bí mật vào cấu hình CI. Theo Aikido Security, công cụ này được thiết kế để thu thập bí mật, thông tin đăng nhập đám mây và token thời gian chạy có thể truy cập được trong môi trường quy trình làm việc. Các nhà nghiên cứu của SafeDep đã xác định 8.093 kho lưu trữ nhận được các commit độc hại giữa 12:46 UTC thứ Ba và 04:36 UTC ngày hôm sau, lưu ý rằng con số thực tế có thể cao hơn vì phân tích của họ chỉ bao gồm các nhánh mặc định công khai.

Sau khi công cụ đánh cắp bí mật được thực thi, nó thường truyền dữ liệu ra ngoài qua HTTP POST tới các địa chỉ IP cụ thể hoặc thông qua các cuộc trò chuyện Telegram. Tin tặc thường hoàn tác các thay đổi trong vòng vài phút và xóa nhật ký chạy quy trình làm việc để che giấu bằng chứng. Tuy nhiên, thiệt hại đã xảy ra trong nhiều trường hợp. Công cụ này nhắm mục tiêu vào nhiều loại thông tin đăng nhập, bao gồm bí mật GitHub Actions, token OIDC và khóa cho AWS, Azure, GCP và Kubernetes. Trong một số trường hợp, mã độc được đưa vào thông qua các hook postinstall của npm, nghĩa là bất kỳ nhà phát triển nào chạy "npm install" trên commit bị ảnh hưởng đều có khả năng làm máy cục bộ của họ bị xâm phạm.

Chi tiết chính

  • Quy mô: 4.837 tài khoản GitHub bị xâm nhập, với các yêu cầu kéo thử nghiệm được gửi tới 61.764 kho lưu trữ.
  • Tác động: Công cụ đánh cắp bí mật đã chạy trong ít nhất 1.806 kho lưu trữ, với các commit độc hại được tìm thấy trong hơn 8.093 kho lưu trữ.
  • Phương pháp: Các cuộc tấn công bắt đầu bằng các yêu cầu kéo có tiêu đề "docs: dependency audit notes" từ các nhánh "wfx-docs".
  • Tính bền vững: Mã độc tạo ra các cửa hậu (backdoor) trong AWS và Azure tồn tại ngay cả sau khi xoay vòng thông tin đăng nhập, chẳng hạn như viết lại các chính sách tin cậy.
  • Dấu hiệu: Tìm kiếm các nhánh như "wfx-docs", "chore/[a-z0-9]{8}" hoặc các thông báo commit như "ci: refresh build cache".
  • Gói bị ảnh hưởng: Các phiên bản độc hại được tìm thấy trong gói Packagist digitalelvis/neuronai-studio v3.14.3 và một số module Go.

Bối cảnh

Các hệ thống Continuous Integration (CI) như GitHub Actions tự động hóa quá trình xây dựng, kiểm thử và triển khai mã. Để hoạt động, các quy trình làm việc này thường yêu cầu quyền truy cập vào các thông tin đăng nhập nhạy cảm, chẳng hạn như khóa nhà cung cấp đám mây hoặc mật khẩu cơ sở dữ liệu. Những bí mật này được lưu trữ trong cài đặt kho lưu trữ và được tiêm vào môi trường runner trong quá trình thực thi. Nếu tin tặc có quyền ghi vào một kho lưu trữ, chúng có thể sửa đổi các tệp quy trình làm việc để bao gồm các bước độc hại in ra hoặc gửi những bí mật này tới một máy chủ bên ngoài.

Cuộc tấn công này đặc biệt khai thác các token OpenID Connect (OIDC), cho phép các runner CI xác thực với các nhà cung cấp đám mây mà không cần lưu trữ các bí mật dài hạn. Bằng cách đánh cắp các token ngắn hạn này, tin tặc có thể yêu cầu các phiên mới từ các nhà cung cấp đám mây. Nguy hiểm hơn, công cụ đánh cắp bí mật bao gồm logic để tạo ra các cửa hậu bền vững, chẳng hạn như thêm thông tin đăng nhập danh tính liên kết (federated identity credentials) trong Azure hoặc tạo các khóa truy cập dài hạn trong AWS. Điều này đảm bảo tin tặc duy trì quyền truy cập ngay cả sau khi các token ban đầu bị xâm phạm được xoay vòng.

Tại sao điều này quan trọng

Đối với các nhóm vận hành phần mềm riêng hoặc quản lý hạ tầng tự chủ (self-hosted), sự cố này nhấn mạnh tầm quan trọng then chốt của việc bảo mật các đường ống CI/CD. Nhiều tổ chức giả định rằng vì mã nguồn của họ là riêng tư hoặc các runner của họ là tự chủ, nên họ miễn nhiễm với các cuộc tấn công như vậy. Tuy nhiên, công cụ đánh cắp bí mật được thiết kế để nhắm mục tiêu vào các kho lưu trữ riêng tư và runner tự chủ, trích xuất thông tin đăng nhập từ siêu dữ liệu instance và trạng thái container Docker. Nếu đường ống CI của bạn có quyền hạn rộng, một commit bị xâm phạm duy nhất có thể dẫn đến việc chiếm toàn bộ tài khoản đám mây.

Các cơ chế bền vững được tin tặc sử dụng khiến việc khắc phục trở nên khó khăn. Chỉ đơn thuần xoay vòng bí mật là không đủ nếu tin tặc đã sửa đổi các chính sách danh tính đám mây. Các nhóm phải kiểm toán cấu hình đám mây của họ để tìm các thông tin đăng nhập liên kết trái phép hoặc các thay đổi chính sách tin cậy. Hơn nữa, việc sử dụng các hook postinstall của npm có nghĩa là mối đe dọa vượt ra ngoài môi trường CI và lan sang các máy trạm của nhà phát triển. Bất kỳ thành viên nào trong nhóm đã tải về mã độc có thể vô tình cài đặt phần mềm độc hại, đòi hỏi nỗ lực phản ứng sự cố rộng hơn.

Bạn có thể làm gì

  • Kiểm toán kho lưu trữ: Tìm kiếm các nhánh có tên "wfx-docs", "chore/[a-z0-9]{8}" hoặc các yêu cầu kéo có tiêu đề "docs: dependency audit notes".
  • Xoay vòng thông tin đăng nhập: Ngay lập tức xoay vòng tất cả các bí mật, biến và token trong các kho lưu trữ bị ảnh hưởng. Thu hồi quyền cấp cho ứng dụng OAuth và khóa SSH cho các tài khoản bị xâm nhập.
  • Kiểm tra nhật ký đám mây: Tìm kiếm các hoạt động bất thường trong AWS CloudTrail, Azure Entra ID và nhật ký GCP, đặc biệt là cho "AssumeRoleWithWebIdentity" hoặc các thông tin đăng nhập liên kết có tiền tố "wfx-ci-".
  • Kiểm tra máy cục bộ: Nếu bạn đã chạy "npm install" trên một commit có khả năng bị ảnh hưởng, hãy coi máy của bạn là đã bị xâm phạm và xoay vòng các khóa cục bộ.
  • Chặn các gói độc hại: Ghim (pin) digitalelvis/neuronai-studio ở phiên bản v3.14.2 hoặc cũ hơn và loại bỏ các phiên bản bị ảnh hưởng của github.com/onuragtas/docker-env và github.com/vkuznet/gocurl.
  • Kích hoạt 2FA: Đảm bảo xác thực hai yếu tố được bật cho tất cả các tài khoản GitHub để ngăn chặn các cuộc tấn công nhồi thông tin đăng nhập (credential stuffing).

Tin khác

Tất cả tin