Skip to content

Bóng Ma Trên GitHub: Phát Hiện 10.000 Repo Chứa Trojan Nhắm Vào Dev

Karify98 & Amy 🌸·
Cover Image for Bóng Ma Trên GitHub: Phát Hiện 10.000 Repo Chứa Trojan Nhắm Vào Dev

Nếu một ngày bạn tìm kiếm tên dự án mã nguồn mở của mình trên Google hoặc Bing, và thấy một kho lưu trữ (repository) giống hệt xuất hiện dưới tên một tài khoản xa lạ, bạn sẽ làm gì?

Đó không phải là một bản fork thông thường. Đó là khởi đầu của một phát hiện chấn động: hơn 10.000 kho lưu trữ trên GitHub đang bí mật phân phối Trojan malware, nhắm thẳng vào các công cụ tự động (automated agents) và các nhà phát triển thiếu cảnh giác.

Thực tế này vừa được phơi bày bởi Orchid, một lập trình viên độc lập đứng sau bài phân tích chấn động trên trang orchidfiles.com. Vụ việc không chỉ phơi bày một chiến dịch tấn công chuỗi cung ứng (supply chain attack) có quy mô cực lớn. Hơn thế, sự việc còn gióng lên hồi chuông cảnh báo về cách thức tin tặc đang "qua mặt" cả những thuật toán bảo mật của GitHub lẫn các công cụ quét mã độc phổ biến.

Kịch Bản Hoàn Hảo Để Xây Dựng "Lòng Tin"

Mọi chuyện bắt đầu khi Orchid phát hiện dự án của mình bị sao chép nguyên bản sang một tài khoản khác. Kẻ tấn công giữ nguyên toàn bộ lịch sử commit, danh sách cộng tác viên (contributor) nhằm ngụy trang hoàn hảo thành một dự án uy tín có lịch sử phát triển lâu năm.

Nhưng cứ sau vài giờ, một commit mới lại được đẩy lên để cập nhật tệp README.md — bổ sung một đường dẫn tải xuống tệp lưu trữ .zip. Để tránh bị phát hiện, kẻ tấn công liên tục xóa commit cũ và tạo một commit mới giống hệt, tạo cảm giác dự án luôn được "cập nhật liên tục".

Tệp tin nén này thường chứa các thành phần trông rất vô hại:

  • Application.cmd hoặc Launcher.cmd (script thực thi)
  • loader.exe hoặc luajit.exe (file thực thi chính)
  • Một tệp dữ liệu ngẫu nhiên chứa mã độc (như .cso hoặc .txt)
  • Thư viện liên kết động lua51.dll

Đáng chú ý, nếu bạn gửi đường dẫn tải file .zip trực tiếp lên VirusTotal, kết quả trả về sẽ là 0 cảnh báo (hoàn toàn sạch). Chỉ khi tải tệp xuống và quét trực tiếp tệp tin nén đó, các bộ quét mới nhận diện được Trojan bên trong.

10.000 Repo Mã Độc: Con Số Khổng Lồ Được Phát Hiện Thế Nào?

Để tìm ra quy mô thực sự của chiến dịch, Orchid đã sử dụng dữ liệu từ dịch vụ gharchive để phân tích 16 triệu lượt đẩy commit (push events) trong vòng 5 ngày. Kết quả lọc ban đầu cho thấy khoảng 3.000 kho lưu trữ được cập nhật liên tục nhiều lần mỗi ngày từ các tài khoản thông thường.

Sau khi điều chỉnh các bộ lọc để bắt được các repo ngụy trang kỹ hơn (chỉ cập nhật tệp README.md với tiêu đề commit cố định là "Update README.md"), công cụ quét của Orchid đã xác định được:

  • Khoảng 40.000 kho lưu trữ có hành vi cập nhật bất thường từ 1 đến 24 lần mỗi ngày.
  • Trong đó, 10.000 kho lưu trữ trùng khớp hoàn toàn 100% với cấu trúc mã độc chứa tệp .zip.

Điều đáng lo ngại là chiến dịch này đã âm thầm diễn ra trong ít nhất 18 tháng (bắt đầu từ đầu năm 2025) mà không hề bị hệ thống bảo mật tự động của GitHub phát hiện hay ngăn chặn.

Tại Sao Hacker Lại Nhắm Vào Các Repo Nhỏ?

Thay vì sao chép các dự án siêu phổ biến (như React hay Vue) vốn dễ bị chú ý, kẻ tấn công lựa chọn nhân bản các dự án mới hoặc các dự án nhỏ. Cách làm này mang lại ba lợi thế chiến thuật lớn cho tin tặc:

  1. Thống trị kết quả tìm kiếm (SEO): Các dự án nhỏ thường có từ khóa tìm kiếm lưu lượng thấp (low-volume search terms). Các repo giả mạo dễ dàng leo lên trang đầu của Google hoặc Bing, lừa người dùng tải về.
  2. Bẫy các AI Agent tự động: Ngày nay, nhiều AI agent được lập trình để tự động tìm kiếm thư viện, phụ thuộc (dependencies) theo thẻ (tags) trên GitHub. Việc liên tục cập nhật commit giúp các repo này luôn xuất hiện ở đầu danh sách "mới cập nhật" của các tag phổ biến, khiến AI tự động kéo mã độc về máy chủ để build.
  3. Bypass hệ thống phát hiện của GitHub: Việc xóa commit cũ và force-push commit mới giúp lách qua các thuật toán heuristic giám sát hành vi bất thường của GitHub.

Phản Ứng Chậm Chạp Từ "Gã Khổng Lồ" GitHub

Theo Orchid, phản hồi từ phía GitHub rất đáng thất vọng. Phải mất hơn một tháng kể từ khi báo cáo, các repo mã độc đầu tiên mới bị gỡ bỏ. Sau khi Orchid công bố danh sách đầy đủ 10.000 repo, GitHub đã xóa sạch chúng. Tuy nhiên, khi Orchid chạy lại script quét vài ngày sau đó, hàng loạt repo mới lại mọc lên như nấm sau mưa.

Thực tế là GitHub chỉ giải quyết vấn đề mang tính sự vụ (phản ứng khi có báo cáo thủ công), chứ chưa hề triển khai một công cụ tự động quét diện rộng dựa trên mẫu hành vi (behavioral pattern) cực kỳ rõ ràng này.

Bài Học Cho Nhà Phát Triển

Vụ việc là minh chứng rõ nét cho thấy bảo mật chuỗi cung ứng phần mềm ngày càng trở nên phức tạp. Để bảo vệ bản thân và hệ thống:

  • Luôn kiểm tra kỹ URL nguồn: Trước khi clone hoặc tải bất kỳ tệp nào từ GitHub, hãy xác nhận URL của tác giả gốc thay vì chỉ nhìn vào số lượng commit hay contributor được hiển thị.
  • Cẩn trọng với tệp nén đính kèm trong README: Các dự án mã nguồn mở chuẩn hiếm khi yêu cầu bạn tải một file .zip không rõ nguồn gốc qua một link ngoài để chạy ứng dụng.
  • Thiết lập Guardrails cho AI Agent: Nếu bạn đang xây dựng hoặc sử dụng các AI Agent tự trị có quyền cài đặt package, hãy giới hạn quyền truy cập mạng và chỉ cho phép tải từ các package registry đã được xác thực (như npm, PyPI) thay vì clone trực tiếp từ GitHub bừa bãi.

Hãy luôn giữ sự tỉnh táo, bởi bóng ma trên GitHub có thể đang ẩn nấp ngay sau một dòng commit tưởng chừng như vô hại.


Bài viết được hỗ trợ bởi AI (Amy 🌸). Nội dung đã được kiểm duyệt bởi tác giả.

Related Posts