Bảo mật

CVE-2026-115905 trong Rust zip: nâng lên 9.0.5

CVE-2026-115905 ảnh hưởng crate zip đến 9.0.4 khi kiểm tra và giải nén dùng hai cách đọc header khác nhau. Bản vá là 9.0.5.

thuemaychu.vn
Minh họa tệp ZIP có hai lớp đường dẫn xung đột bị chặn trước máy chủ

Một cổng tải tệp có thể quét thấy trong ZIP chỉ có tài liệu hợp lệ, nhưng worker phía sau lại giải nén ra đường dẫn khác. Đó là điều kiện cốt lõi của CVE-2026-115905 trong crate zip của Rust: hai cách đọc header ZIP không thống nhất về tên tệp.

Cảnh báo gốc được công bố ngày 17/10/2026, NVD ghi nhận ngày 26/10 và GitHub Advisory Database xuất bản, rà soát ngày 28/10/2026. Đây là lỗi cũ vừa được cập nhật nguồn đánh giá, không phải bằng chứng rằng khai thác thực tế mới bắt đầu ngày 28/10. GitHub Advisory xếp mức Critical.

Phạm vi và điều kiện gặp rủi ro

Các phiên bản zip đến và gồm 9.0.4 bị ảnh hưởng; phiên bản vá là 9.0.5. ZipArchive tin vào Central Directory File Header ở cuối tệp, còn ZipStreamReader đọc Local File Header trước từng nội dung. Kẻ tấn công có thể làm hai header khai báo đường dẫn khác nhau.

Rủi ro cao nhất khi hệ thống kiểm tra archive bằng một bộ đọc rồi giải nén bằng bộ đọc còn lại, đặc biệt với tệp do người dùng không tin cậy tải lên. Nếu worker ghi đè tệp cấu hình, script hoặc tệp thực thi, hậu quả có thể tiến tới gián đoạn dịch vụ hoặc chạy mã theo quyền của worker. Việc một ứng dụng có dependency dễ tổn thương chưa chứng minh chuỗi khai thác này tồn tại trong ứng dụng đó.

Hành động quản trị cần làm

  1. Tìm crate zip trong Cargo.lock, SBOM và image container; xác định cả dependency trực tiếp lẫn gián tiếp.
  2. Nâng lên 9.0.5 hoặc bản mới hơn tương thích, rồi build lại toàn bộ binary và container.
  3. Xác nhận mọi bước kiểm tra và giải nén dùng cùng một cách chuẩn hóa đường dẫn; từ chối archive có hai header không nhất quán.
  4. Giải nén vào thư mục tạm riêng, không ghi đè tệp có sẵn, không chạy với quyền root và không mount bí mật vào worker.
  5. Giới hạn số tệp, tổng dung lượng sau giải nén, độ sâu thư mục, CPU và thời gian xử lý để giảm thêm nguy cơ ZIP bomb.
  6. Rà log tải tệp và worker để tìm tên đường dẫn bất thường, ghi đè tệp hoặc tiến trình con không mong đợi.

Biện pháp giảm thiểu khi chưa thể nâng cấp

Biện pháp tạm thời là ngừng giải nén archive không tin cậy bằng ZipStreamReader, tách worker khỏi hệ thống đang phục vụ khách hàng và chỉ cho phép ghi vào thư mục mới rỗng. So sánh tên, đường dẫn và số entry từ cả local header lẫn central directory; từ chối khi có khác biệt. Đây không thay thế bản vá vì logic tự viết dễ bỏ sót biến thể định dạng.

  • Không dựa chỉ vào phần mở rộng .pdf hoặc tên trong danh mục trung tâm.
  • Chuẩn hóa đường dẫn sau khi giải mã; từ chối đường dẫn tuyệt đối, .., symlink và đích nằm ngoài thư mục tạm.
  • Dùng UID không đặc quyền, filesystem chỉ đọc cho ứng dụng và secret, cùng AppArmor/SELinux nếu có.
  • Quét nội dung sau giải nén, không chỉ trước giải nén.

Mức nghiêm trọng và bằng chứng khai thác

GitHub nêu mức Critical và mô tả chuỗi có thể dẫn đến ghi đè tệp tùy ý, RCE hoặc từ chối dịch vụ khi kiến trúc đáp ứng các điều kiện trên. Nguồn đã công bố mã kiểm chứng, nhưng CISA KEV không đọc được trong lượt rà soát do endpoint trả 403; vì vậy bài này không khẳng định lỗ hổng đã bị khai thác ngoài thực tế.

Tác động với VPS và máy chủ Việt Nam

Các dịch vụ nhận ZIP cho quản lý tài liệu, nhập dữ liệu, CI/CD hoặc xử lý media nên ưu tiên kiểm kê. Đội vận hành VPS cần phối hợp với đội phát triển vì nâng gói hệ điều hành không tự cập nhật crate Rust đã được biên dịch tĩnh trong binary. Sau khi vá, phải triển khai lại artifact và xác nhận tiến trình đang chạy đúng phiên bản mới.

Nguồn tham khảo

  • GitHub Advisory Database, rà soát ngày 28/10/2026: https://github.com/advisories/GHSA-m665-v7pm-7grj
  • NVD CVE-2026-115905: https://nvd.nist.gov/vuln/detail/CVE-2026-115905
  • Bản phát hành sửa lỗi 9.0.5: https://github.com/zip-rs/zip2/releases/tag/v9.0.5
Phiên bản nào của Rust zip bị ảnh hưởng?

Theo cảnh báo, các phiên bản đến và gồm 9.0.4 bị ảnh hưởng; bản vá là 9.0.5.

Có dùng zip 9.0.4 là chắc chắn bị RCE không?

Không. Chuỗi RCE cần ứng dụng nhận ZIP không tin cậy, kiểm tra và giải nén theo cách chênh lệch, rồi ghi đè tệp có tác động.

Chỉ cập nhật gói hệ điều hành có đủ không?

Thường không, vì crate Rust có thể được biên dịch tĩnh trong binary. Cần cập nhật dependency, build và triển khai lại artifact.

Nếu bạn quản lý dịch vụ nhận tệp ZIP, hãy gửi ngôn ngữ, phiên bản ứng dụng, cách đóng gói container, đường dẫn giải nén và quyền của worker tới hotro@thuemaychu.vn. Mục tiêu là lập danh sách kiểm tra triển khai và cô lập phù hợp, không phải giả định hệ thống đã bị xâm nhập.

Cần máy chủ cho workload này?

NOC thuemaychu.vn hỗ trợ chọn CPU, GPU và băng thông. PoC trong 24 giờ.

Bài viết liên quan

Xem tất cả bài viết
GọiFBZaloSalesZaloOA