Một chiến dịch tấn công tinh vi gần đây đã nhắm mục tiêu vào các workflow GitHub Actions để đánh cắp token xuất bản PyPI , làm nổi bật những lo ngại nghiêm trọng về bảo mật trong cách các nhà phát triển quản lý thông tin bí mật trong hệ thống tích hợp liên tục. Mặc dù không có gói PyPI nào thực sự được xuất bản bởi những kẻ tấn công, nhưng sự cố này đã phơi bày các lỗ hổng trong cách nhiều dự án xử lý thông tin xác thực xuất bản của họ.
Cuộc tấn công bắt đầu vào ngày 5 tháng 9 khi các nhà nghiên cứu GitGuardian phát hiện mã độc được tiêm vào các workflow GitHub Actions . Những workflow được chỉnh sửa này được thiết kế để gửi các token PyPI được lưu trữ dưới dạng secrets GitHub đến các máy chủ bên ngoài do những kẻ tấn công kiểm soát. Chiến dịch này đã ảnh hưởng đến nhiều repository trên toàn nền tảng, cho thấy tính chất lan rộng của mối đe dọa bảo mật này.
Dòng thời gian tấn công
- Ngày 5 tháng 9: GitGuardian phát hiện ban đầu quy trình làm việc độc hại trong dự án fastuuid
- Ngày 5 tháng 9: Các phát hiện mở rộng được báo cáo qua email (bị trì hoãn do lọc thư rác)
- Ngày 10 tháng 9: Nhóm bảo mật PyPI được biết thông qua các kênh khác
- Ngày 15 tháng 9: Các nhà duy trì dự án bị ảnh hưởng được thông báo và token bị vô hiệu hóa
Vấn Đề Cơ Bản Với Hệ Thống CI Bên Thứ Ba
Sự cố này đã khơi mào cuộc thảo luận sôi nổi về những rủi ro tiềm ẩn của việc sử dụng hệ thống tích hợp liên tục bên thứ ba cho các hoạt động nhạy cảm. Các thành viên cộng đồng đang đặt câu hỏi về sự khôn ngoan của việc giao phó GitHub Actions với các API secret trong khi đồng thời cho phép nó chạy mã từ các bên thứ ba khác.
Mô hình bảo mật trở nên đáng lo ngại hơn khi xem xét rằng GitHub Actions khuyến khích các nhà phát triển import mã bên thứ ba ngẫu nhiên vào workflow của họ bằng cách sử dụng các tag có thể thay đổi. Điều này có nghĩa là một action có vẻ an toàn hôm nay có thể trở thành độc hại trong tương lai nếu repository gốc bị xâm phạm hoặc chuyển giao cho những kẻ xấu.
Hệ thống CI tự nó khuyến khích bạn import mã bên thứ ba ngẫu nhiên vào workflow CI của mình, dựa trên các tag có thể thay đổi mà sau đó nhận được đầy đủ quyền hạn - toàn bộ điều này thật điên rồ.
Mặc dù các nhà phát triển có thể pin các hash commit cụ thể thay vì sử dụng tag, nhưng thực hành này không phải là hành vi mặc định và tạo ra gánh nặng bảo trì bổ sung mà nhiều team tránh.
Lợi Thế Của Python Trong Bảo Mật Gói
Cuộc thảo luận cũng đã làm nổi bật một sự tương phản thú vị giữa hệ sinh thái Python và JavaScript . Các quan sát của cộng đồng cho thấy Python phải đối mặt với ít cuộc tấn công liên quan đến gói hơn so với npm , mặc dù Python ngày càng phổ biến. Sự khác biệt này dường như xuất phát từ thư viện chuẩn toàn diện của Python , giúp giảm nhu cầu về các dependency bên ngoài.
Một ứng dụng Flask điển hình có thể chỉ yêu cầu 15 mục trong file requirements của nó, trong khi các dự án JavaScript tương đương thường kéo theo hàng trăm dependency bắc cầu. Các gói Python lớn như NumPy có ít dependency Python tối thiểu, thay vào đó dựa vào các thư viện hệ thống được thiết lập tốt thay vì một mạng lưới phức tạp các gói bên thứ ba.
Giải Pháp Trusted Publishers
Sự cố này củng cố giá trị của tính năng Trusted Publishers của GitHub như một biện pháp phòng thủ chống lại việc đánh cắp token. Không giống như các API token dài hạn được lưu trữ dưới dạng secret, Trusted Publishers sử dụng các token ngắn hạn được tự động tạo cho các repository cụ thể và hết hạn nhanh chóng.
Ngay cả khi những kẻ tấn công thành công trong việc chỉnh sửa workflow sử dụng Trusted Publishers , các token bị đánh cắp có thời gian sống hạn chế và phạm vi giới hạn. Điều này làm giảm đáng kể cửa sổ cơ hội cho các hoạt động độc hại và hạn chế thiệt hại tiềm tăng từ các cuộc tấn công thành công.
Các Biện Pháp Bảo Mật Được Khuyến Nghị
- Thay thế các token tồn tại lâu dài bằng Trusted Publishers cho GitHub Actions
- Thường xuyên xem xét lịch sử bảo mật tài khoản trong Cài Đặt Tài Khoản PyPI
- Ghim GitHub Actions vào các commit SHA cụ thể thay vì sử dụng các tag có thể thay đổi
- Giảm thiểu các phụ thuộc bên ngoài khi có thể
- Giám sát các repository để phát hiện các sửa đổi workflow trái phép
Phản Ứng Nhanh Chóng Và Phục Hồi
Đội ngũ bảo mật PyPI đã phản ứng hiệu quả ngay khi họ nhận thức được chiến dịch này. Tất cả các token bị ảnh hưởng đã được vô hiệu hóa, và các maintainer dự án đã nhận được thông báo trực tiếp về việc xâm phạm. Nhiều nhà phát triển đã chủ động xoay vòng thông tin xác thực của họ và loại bỏ các workflow độc hại khỏi lịch sử repository của họ.
Sự cố này đóng vai trò như một hồi chuông cảnh báo cho cộng đồng phát triển về những tác động bảo mật của các thực hành CI/CD hiện đại. Khi tự động hóa trở nên ngày càng trung tâm trong phát triển phần mềm, nhu cầu về các biện pháp bảo mật mạnh mẽ và xem xét cẩn thận các mối quan hệ tin cậy trở nên quan trọng hơn bao giờ hết.
Tham khảo: Token Exfiltration Campaign via GitHub Actions Workflows