Pustaka penanganan arsip paling populer di ekosistem Rust, zip (dikenal di repositori pengembangannya sebagai zip-rs/zip2), diterpa celah keamanan dengan tingkat keparahan tertinggi. Celah yang dilacak sebagai CVE-2026-115905 dan tercatat dalam GitHub Security Advisory GHSA-m665-v7pm-7grj ini mengantongi skor basis CVSS 10.0 (Critical). Masalah ini berakar pada ketidaksesuaian cara baca (parser differential) di antara dua komponen pembaca berkas dalam pustaka yang sama, memungkinkan penyerang menipu pintu inspeksi keamanan dan menimpa berkas penting di peladen secara diam-diam.

Kerentanan ini menjangkiti seluruh rilis pustaka zip hingga versi 9.0.4. Pustaka ini merupakan tulang punggung penanganan kompresi di berbagai layanan berbasis Rust dengan catatan unduhan kumulatif melampaui 318 juta kali di crates.io. Akibat adanya celah ini, sebuah berkas ZIP khusus dapat lolos mulus dari pemeriksaan gerbang keamanan (security gateway), antivirus, atau firewall aplikasi web (WAF), namun seketika mengeksekusi muatan jahat begitu diekstraksi oleh proses latar belakang.

Anatomi Dua Kepala dalam Format ZIP

Untuk memahami celah ini, perlu melihat kembali rancang bangun biner format arsip ZIP PKWARE yang telah dipakai selama beberapa dekade. Format ZIP menyimpan metadata setiap entri berkas di dua lokasi yang terpisah. Lokasi pertama adalah Local File Header (LFH) yang diletakkan langsung di depan blok data terkompresi dari masing-masing berkas di dalam badan arsip. Lokasi kedua adalah Central Directory File Header (CDFH), sebuah tabel indeks gabungan yang disimpan secara berurutan di bagian paling akhir berkas ZIP.

Tabel indeks di ujung arsip inilah yang umumnya dibaca oleh pengelola berkas konvensional untuk menampilkan daftar isi direktori tanpa perlu memindai seluruh badan arsip dari awal hingga akhir. Dalam arsip yang valid dan dibuat sesuai standar normal, nama berkas yang tercantum di LFH dan CDFH bernilai identik.

Namun, pustaka zip versi 9.0.4 dan yang lebih lama memiliki kelemahan rancangan mendasar dalam menangani perbedaan di antara kedua bagian tersebut. Modul ZipArchive (yang dirancang untuk pembacaan acak atau random-access) membaca metadata berkas semata-mata dari tabel CDFH di ujung arsip dan sepenuhnya mengabaikan nama berkas yang ada di LFH. Sebaliknya, komponen ZipStreamReader (yang dirancang untuk ekstraksi secara streaming atau aliran data langsung) membaca arsip secara sekuensial dari depan. Komponen streaming ini mengambil nama berkas mentah-mentah dari LFH untuk menentukan jalur penulisan di sistem berkas lokal tanpa pernah memeriksa apakah nama itu cocok dengan indeks CDFH.

Celah arsitektural ini makin parah karena pustaka itu sendiri menyediakan antarmuka pemrograman shallow_copy_file pada src/write.rs. Fungsi tersebut secara desain memungkinkan pembuatan arsip dengan nama alias baru pada tabel CDFH tanpa memperbarui LFH aslinya, sehingga mempermudah terbentuknya arsip dengan metadata ganda yang tidak sinkron.

Skenario Eksploitasi "Zip Cloaking"

Kombinasi pembaca acak dan pembaca streaming yang saling bertolak belakang membuka teknik serangan yang dijuluki pengembang sebagai *Zip Cloaking*. Dalam bukti konsep (proof of concept) yang telah diuji dan diverifikasi di lingkungan uji mandiri, rantai eksploitasi berjalan secara otomatis melalui tiga langkah utama.

Pertama, penyerang merakit satu berkas ZIP manipulatif. Pada tabel CDFH di ujung arsip, berkas diberi nama tidak berbahaya seperti doc_report.pdf. Sementara itu, pada header lokal (LFH) di blok data, berkas yang sama diberi nama skrip eksekutif sistem yang sudah ada di peladen korban, misalnya cron_worker.sh.

Kedua, berkas diunggah melalui formulir web atau antarmuka API yang dijaga oleh gerbang keamanan. Gateway inspeksi memeriksa isi arsip menggunakan modul berbasis CDFH seperti ZipArchive. Sistem pemindai hanya menemukan berkas doc_report.pdf, memastikan ekstensi sesuai kebijakan dokumen yang diizinkan, lalu memberi label aman.

Ketiga, berkas yang telah dinyatakan bersih diteruskan ke worker backend untuk diekstraksi ke penyimpanan sistem. Jika layanan latar belakang tersebut memakai ZipStreamReader::extract demi efisiensi memori, pustaka akan membaca nama dari LFH. Tanpa peringatan apa pun, berkas cron_worker.sh asli di peladen tertimpa oleh muatan skrip penyerang.

Dampaknya memenuhi seluruh kriteria kehancuran tingkat tinggi (CIA: Confidentiality, Integrity, Availability). Penimpaan berkas menghancurkan skrip pemantau atau layanan asli peladen, memicu kondisi denial-of-service (DoS). Pada saat yang sama, skrip pengganti yang berisi perintah jahat akan dieksekusi secara berkala oleh daemon cron lokal, memberikan penyerang akses shell kendali jarak jauh (remote code execution) dengan hak akses setara pengguna layanan atau bahkan root.

Kesenjangan Waktu Rilis dan Status Patch

Meski patch perbaikan telah diluncurkan oleh pengelola repositori (zip-rs/zip2) ke dalam versi 9.0.5 sejak pertengahan Oktober 2026, entri resmi CVE-2026-115905 dan catatan peringatan publik baru terdistribusi luas ke basis data pemindai keamanan pada 26–27 Oktober 2026. Keterlambatan koordinasi metadata ini berarti banyak infrastruktur peladen yang mengandalkan audit ketergantungan otomatis belum mendeteksi celah tersebut hingga beberapa hari terakhir.

Hingga saat pengumuman ini disebarluaskan, belum ditemukan bukti eksploitasi massal di alam liar (in-the-wild exploitation) dan celah ini belum terdaftar di katalog kerentanan yang dieksploitasi aktif milik CISA. Walau begitu, ketersediaan pengujian integrasi publik yang membuktikan keberhasilan serangan dari tahap gerbang inspeksi hingga eksekusi kode menuntut respons cepat dari para pengelola layanan.

Rekomendasi Mitigasi untuk Pengembang

Para pengembang dan administrator sistem yang mengoperasikan aplikasi Rust disarankan untuk segera mengambil langkah perlindungan:

1. Perbarui Ketergantungan Cargo: Pastikan berkas Cargo.toml memuat versi pustaka zip minimal pada versi 9.0.5 atau lini 9.1.x terbaru. Jalankan perintah pembaruan ketergantungan untuk mengunci versi aman di Cargo.lock. 2. Hindari Pembacaan Streaming pada Masukan Asing: Jika sistem belum dapat diperbarui seketika, hindari penggunaan langsung antarmuka ZipStreamReader untuk mengekstrak arsip dari pengguna yang tidak terautentikasi ke jalur direktori produksi. 3. Terapkan Validasi Konsistensi Header: Bila membangun pipa pemrosesan dokumen sendiri, pastikan lapisan verifikasi memeriksa kecocokan nama dan metadata antara Local File Header dan Central Directory sebelum berkas ditulis ke media penyimpanan fisik.

Sumber

- Sumber utama: [Dual-Header Inconsistencies (Zip Cloaking) — GitHub Security Advisory GHSA-m665-v7pm-7grj](https://github.com/zip-rs/zip2/security/advisories/GHSA-m665-v7pm-7grj), diterbitkan 17 Oktober 2026. - Sumber tambahan: [CVE-2026-115905 di CVEfeed](https://cvefeed.io/vuln/detail/CVE-2026-115905) dan [catatan rilis zip v9.0.5](https://github.com/zip-rs/zip2/releases/tag/v9.0.5). - Sumber tambahan: [ZIP crate di crates.io](https://crates.io/crates/zip) untuk statistik unduhan dan rilis.