Apa yang terjadi
Datadog Security Labs menemukan eksekusi kode jarak jauh kritis di antarmuka browser agen coding AI OpenCode: API /global/upgrade menggabungkan kebingungan tipe konten dalam penangan permintaan mentah dengan penanganan tidak aman dari target peningkatan yang dikendalikan penyerang, memungkinkan situs web berbahaya mengganti tarball npm di jalur dengan skrip siklus hidup package.json berbahaya. Eksploitasi hanya memerlukan pengguna yang menjalankan versi terpengaruh mengunjungi halaman yang dibuat saat server agen lokal aktif.
Mengapa penting
Agen coding AI adalah permukaan kepercayaan tertinggi di mesin pengembang — ia memegang kredensial pengguna, akses repositori, dan hak istimewa shell. Mengkompromikannya melalui kunjungan halaman web yang tidak berbahaya mengubah tindakan penjelajahan sehari-hari menjadi eksekusi kode penuh di host agen, secara langsung memungkinkan keracunan rantai pasokan kode dan pencurian kredensial bagi siapa pun yang menulis kode berbantuan AI.
Vektor serangan
Halaman web yang dibuat yang dikunjungi saat antarmuka web OpenCode berjalan (opencode serve/web di 127.0.0.1:4096) memicu jalur kebingungan tipe konten: endpoint /global/upgrade meneruskan target peningkatan yang dikendalikan penyerang ke perintah instalasi manajer paket, dan spesifikasi paket npm menerima URL tarball jarak jauh — sehingga permintaan formulir tersembunyi/teks-biasa dapat mengarahkan instalasi ke paket berbahaya yang skrip siklus hidup pra-instalnya berjalan dengan hak istimewa proses OpenCode. Layanan localhost tanpa autentikasi dapat dijangkau dari halaman bermusuhan melalui navigasi formulir HTML tingkat atas (melewati CORS). Tidak ada CVE yang diminta; pantau advisory GitHub.
Sistem yang terdampak
OpenCode 1.14.30–1.18.21 (diinstal melalui npm/pnpm/Bun); diperbaiki di 1.18.22; advisory GitHub GHSA-632h-h47v-g4x4
Mitigasi
Tingkatkan ke OpenCode 1.18.22+ (memvalidasi target peningkatan sebagai versi semantik; menolak badan teks/biasa). Pertahanan berlapis: atur OPENCODE_SERVER_PASSWORD, jangan paparkan layanan di luar localhost, perlakukan aktivitas manajer paket mendadak sebagai bukti kompromi