ZCode Zhipu Diduga Diam-diam Unggah Seluruh Riwayat Git

ZCode, alat coding berbasis AI milik Zhipu, ketahuan oleh para developer pada 18 September mengemas dan mengunggah seluruh direktori kerja pengguna di latar belakang, termasuk riwayat Git lengkap, cache file besar LFS, dan konfigurasi lokal. Beberapa jam kemudian, ZCode merilis permintaan maaf yang mengakui unggahan itu memang terjadi, menyalahkan fitur "pengindeksan repositori", dan menyebut masalahnya sudah diperbaiki.

Apa yang ditemukan developer

Yang pertama membeberkan detailnya adalah blogger teknologi Ferstar. Dalam tulisannya, ia membedah mekanisme snapshot lokal ZCode: setelah login, sebuah proses latar belakang yang ikut berjalan saat aplikasi dibuka akan mengemas seluruh direktori kerja, mengenkripsi isi file dengan AES-256-CTR, membungkus kuncinya dengan kunci publik RSA yang dikirim server, lalu mengunggahnya langsung ke Alibaba Cloud OSS lewat pengiriman form. Kunci privat untuk mendekripsi hanya ada di sisi server — file .enc di komputer pengguna tidak bisa dibuka sendiri.

Sampel yang ia tunjukkan cukup rinci: direktori kerja 345MB sebelum kompresi menjadi 313MB setelah dienkripsi, dengan daftar 42.411 file. Bagian terbesarnya adalah folder .git, totalnya 86,6%, dengan cache LFS 196,1MB dan objek Git 102,2MB, sementara kode sumber dan konfigurasi hanya sekitar 46MB. Ada dua pemicu: setiap kali prompt dikirim, dan setelah tugas selesai saat Repo Wiki diperbarui. Dalam satu sesi, tercatat hingga 62 kali snapshot.

Pada hari yang sama, seorang developer membuka issue di repositori feedback publik Zhipu dengan judul yang mengajukan tiga pertanyaan "mengapa" berturut-turut: mengapa mengunggah seluruh riwayat Git secara diam-diam, mengapa dienkripsi sampai penggunanya sendiri tidak bisa membukanya, dan mengapa bahkan tidak ada tombol untuk mematikannya. Issue itu mencatat bahwa setelah unggahan lokal gagal, snapshot dicoba ulang berkali-kali hingga 564 kali. Developer lain mereproduksi hal ini di mesinnya sendiri — snapshot satu proyek mencapai 748MiB, dengan porsi .git 98,91%, pada ZCode versi 3.12.3.

Tombol yang tidak berfungsi menjadi titik paling tajam dalam kontroversi ini. Menurut Ferstar, tombol "optimalkan pengalaman" dan "pengindeksan snapshot repositori" di antarmuka hanya mengatur apakah server memakai data itu untuk melatih model — pengemasan dan pengunggahan lokal tetap berjalan apa pun status tombolnya. Riwayat Git bisa saja masih menyimpan kunci yang sudah lama dihapus, konfigurasi lama yang ditinggalkan, catatan branch yang belum di-push, dan nama domain internal — semuanya tak terlihat di kode saat ini, tapi tetap ada di dalam .git.

Kata Zhipu

Permintaan maaf ZCode menyalahkan unggahan itu pada fitur "pengindeksan repositori": pembuatan halaman Repo Wiki bisa memicu unggahan data repositori, dan data itu langsung dihapus di sisi cloud setelah Wiki selesai dibuat, tanpa disimpan. Fitur ini aktif secara default sejak awal peluncuran, sebagian pengguna terdampak, dan kini sudah diperbaiki.

Ada tiga langkah perbaikan yang dijanjikan: membuka kode sumber ZCode dalam waktu dekat, mengundang penilaian pihak ketiga dan mempublikasikan progres reviewnya, serta memberi semua pengguna satu kali reset kuota mingguan ekstra pada hari itu juga. Beberapa hal yang tidak dijelaskan dalam pernyataan itu masih belum bisa diverifikasi: berapa banyak pengguna dan repositori yang terdampak, berapa lama data itu sebenarnya tersimpan di OSS, apakah "penghapusan" itu diaudit secara independen, dan versi berapa yang sudah memuat perbaikan. Jadwal open source pun hanya disebut "dalam waktu dekat".

Hari yang sama, Zhipu juga merilis model baru GLM-5.3-FlashX yang mengunggulkan kecepatan output 200 token per detik. Seorang developer dalam blognya menyandingkan dua peristiwa itu, menyindir "seluruh internet bertanya ke mana kodenya pergi, sementara Zhipu sibuk merilis model baru".

Yang bisa dilakukan developer sekarang

Tidak sedikit pengguna ZCode yang mencobanya di proyek perusahaan, di mana riwayat Git sering kali lebih sensitif dibanding kode saat ini. Bagi yang masih memakai versi lama, ada tiga langkah yang lebih aman: perbarui dulu ke versi yang sudah diperbaiki; periksa apakah masih ada snapshot yang menunggu diunggah di direktori lokal ~/.zcode/v2/checkpoints; lalu ganti semua kunci dan token yang pernah muncul di riwayat itu — jangan berharap "sudah dihapus" mencakup bagian yang sudah terlanjur terkirim.

Ferstar menawarkan cara yang lebih keras: mengunci direktori snapshot agar tidak bisa ditulis di level sistem file, memakai chflags uchg di macOS atau chattr +i di Linux, untuk memblokir pembuatan snapshot sepenuhnya. Konsekuensinya, fitur rollback checkpoint dan timeline ikut tidak berfungsi.

Agen coding semacam ini memang perlu membaca repositori untuk bisa bekerja, jadi pengindeksan lokal itu sendiri bukan hal aneh. Yang jadi masalah adalah batasannya: membaca secara lokal dan mengunggah ke cloud adalah dua hal berbeda, begitu juga mengunggah kode saat ini versus seluruh riwayat. Jika janji open source dari Zhipu benar-benar terwujud, pihak luar setidaknya bisa memeriksa sendiri jalur mana saja yang dikemas modul snapshot itu dan ke mana sebenarnya tombol-tombolnya terhubung.

Sumber: analisis reverse-engineering blog teknis Ferstar tentang mekanisme snapshot dan komposisi file, issue publik di zai-org/feedback, Phoenix News Tech (Ifeng), CocoLoop, dan Elliot's Harness Lab; atribusi, status perbaikan, dan langkah kompensasi diverifikasi dari pernyataan permintaan maaf ZCode.