PyPI Khắc Phục Lỗ Hổng CVE Nghiêm Trọng Từ ZIP

PyPI Khắc Phục Lỗ Hổng CVE Nghiêm Trọng Từ ZIP

Python Package Index (PyPI) đã công bố các hạn chế mới nhằm giảm thiểu các cuộc tấn công nhầm lẫn bộ phân tích ZIP, một loại lỗ hổng CVE có thể khai thác sự khác biệt trong cách các trình cài đặt và kiểm tra gói Python xử lý các tệp lưu trữ ZIP.

Động thái này là phản ứng trước các lỗ hổng được xác định trong các công cụ như trình cài đặt uv, vốn có hành vi giải nén khác biệt so với các trình cài đặt dựa trên Python sử dụng mô-đun thư viện chuẩn zipfile. PyPI hiện từ chối các tệp lưu trữ ZIP được tạo ra để khai thác các cuộc tấn công nhầm lẫn này, mặc dù không có bằng chứng về việc khai thác trước đó trên nền tảng này.

Nội dung
Nguyên nhân gốc rễ và rủi ro từ Định dạng ZIP

Vai trò của tệp RECORD và sự lỏng lẻo trong kiểm tra
Các biện pháp tăng cường bảo mật từ PyPI

Lộ trình triển khai và phân tích tác động
Khuyến nghị và hành động cần thiết

Nguyên nhân gốc rễ và rủi ro từ Định dạng ZIP

Sáng kiến này giải quyết những phức tạp vốn có của định dạng ZIP, được thiết kế vào năm 1989 để chứa các tệp lưu trữ lớn trên nhiều đơn vị lưu trữ. Một tính năng của định dạng này là khả năng thêm các bản ghi mà không cần ghi lại toàn bộ, điều này đã tạo ra sự mơ hồ trong kết quả giải nén, thường là nguyên nhân sâu xa dẫn đến các lỗ hổng CVE nghiêm trọng.

Python wheels, về cơ bản là các tệp lưu trữ ZIP, tuân theo đặc tả Định dạng Phân phối Nhị phân (Binary Distribution Format). Đặc tả này phác thảo các quy trình cài đặt nhưng để việc xử lý ZIP cụ thể cho các nhà triển khai.

Mặc dù đặc tả gợi ý việc giải nén vào thư mục site-packages bằng cách sử dụng các công cụ unzip tiêu chuẩn trong khi vẫn giữ nguyên đường dẫn, nhưng nó không áp đặt các hạn chế đối với các tính năng của ZIP, có khả năng cho phép các sự mơ hồ không được chú ý.

Vai trò của tệp RECORD và sự lỏng lẻo trong kiểm tra

Phức tạp hơn nữa, tệp RECORD trong thư mục .dist-info của wheel liệt kê các tệp được bao gồm cùng với các tổng kiểm tra tùy chọn. Các trình cài đặt được mong đợi sẽ xác minh nội dung lưu trữ dựa trên tệp này và thất bại trong quá trình cài đặt nếu có sự không khớp.

Tuy nhiên, nhiều trình cài đặt bỏ qua kiểm tra này, chỉ giải nén như công cụ unzip và điều chỉnh RECORD sau cài đặt để phục vụ chức năng gỡ cài đặt. Sự lỏng lẻi trong việc thực thi này trong lịch sử đã cho phép sử dụng ZIP không theo chuẩn mà không có hậu quả, tạo ra rủi ro nơi những kẻ tấn công có thể đưa các tệp độc hại qua các quy trình xem xét bằng cách khai thác sự khác biệt của bộ phân tích. Đây là một nguy cơ đáng kể đối với an ninh mạng của hệ sinh thái Python và một nguồn tiềm ẩn cho các lỗ hổng CVE.

Các biện pháp tăng cường bảo mật từ PyPI

Để chống lại các mối đe dọa này, PyPI đang thực thi các kiểm tra tải lên nghiêm ngặt đối với wheels và ZIP. Những kiểm tra này trực tiếp nhắm vào việc khắc phục các lỗ hổng CVE tiềm ẩn và bao gồm việc từ chối các tệp lưu trữ có:

  • Cấu trúc bản ghi không hợp lệ.
  • Tên tệp trùng lặp trong tiêu đề Local FileCentral Directory.
  • Các tiêu đề không khớp.
  • Dữ liệu thừa (trailing data).
  • Nhiều tiêu đề End of Central Directory.
  • Giá trị bộ định vị không chính xác.

Những bước này đảm bảo việc giải nén phù hợp với Central Directory, một phương pháp tốt nhất để ngăn chặn các cuộc tấn công nhầm lẫn nơi các bộ phân tích có thể diễn giải các tệp lưu trữ khác nhau dựa trên tiêu đề cục bộ so với tiêu đề trung tâm. PyPI cũng đã áp dụng tính năng phát hiện “compression-bomb” trong quá trình tải lên, giúp củng cố thêm bảo mật mạng.

Lộ trình triển khai và phân tích tác động

Bắt đầu từ thời điểm này, các maintainer sẽ nhận được cảnh báo qua email đối với các wheels mà nội dung ZIP của chúng khác biệt so với siêu dữ liệu RECORD. Sau một khoảng thời gian ân hạn kéo dài sáu tháng, kết thúc vào ngày 1 tháng 2 năm 2026, các tải lên như vậy sẽ bị từ chối hoàn toàn.

Cách tiếp cận theo từng giai đoạn này khuyến khích các trình cài đặt triển khai kiểm tra chéo RECORD, phù hợp với việc xử lý ZIP mạnh mẽ của mô-đun zipfile của CPython. Việc này là một bước quan trọng trong việc tăng cường khả năng chống lại các lỗ hổng CVE tiềm tàng.

Phân tích 15.000 gói Python hàng đầu theo lượt tải xuống cho thấy rất ít vấn đề. Trong số 13.468 dự án xuất bản wheel, 13.460 không gặp vấn đề về RECORD hoặc ZIP, chỉ một số ít có các tệp bị thiếu, không khớp hoặc trùng lặp. Tỷ lệ thấp này củng cố niềm tin của PyPI trong việc triển khai các thay đổi mà không gây ra sự gián đoạn rộng rãi, mặc dù các vấn đề hiếm gặp hơn vẫn tồn tại ngoài nhóm này.

Khuyến nghị và hành động cần thiết

Theo báo cáo chính thức từ PyPI, không có hành động ngay lập tức nào được khuyến nghị cho người dùng cuối do các biện pháp giảm thiểu này. Tuy nhiên, PyPI khuyên người dùng nên giữ cho các công cụ cài đặt của họ được cập nhật để tăng cường an ninh mạng.

Các maintainer dự án gặp lỗi tải lên nên tinh chỉnh quy trình build của họ hoặc báo cáo các vấn đề về công cụ. Trong khi đó, các nhà phát triển trình cài đặt được khuyến khích tuân thủ nghiêm ngặt các tiêu chuẩn ZIP, ưu tiên kiểm tra Central Directory và thực thi xác thực RECORD để cảnh báo về các wheels bị lỗi.

Những biện pháp này cùng nhau củng cố hệ sinh thái đóng gói Python chống lại các lỗ hổng CVE dựa trên ZIP đang phát triển, thúc đẩy tiêu chuẩn hóa và khả năng phục hồi. Việc cập nhật và tuân thủ các quy định mới sẽ giúp giảm thiểu rủi ro từ các lỗ hổng CVE trong tương lai. Để biết thêm chi tiết về các biện pháp này, bạn có thể tham khảo thông báo chính thức của PyPI tại: blog.pypi.org.