Ilustrasi abstrak yang dihasilkan pada latar biru dongker gelap: sebuah kubus server kuning tua kecil di sebelah kiri memancarkan garis sian tipis berisi bentuk-bentuk menyerupai glif yang melewati lurus menembus membran kaca biru tembus pandang yang tinggi dan berlanjut ke panel terminal gelap di sebelah kanan, tempat satu blok kursor kuning tua bersinar. Garis tersebut tidak terputus. Tidak ada teks, orang, atau logo organisasi yang muncul. Logo OrcaRouter dikompositkan di sudut kanan bawah.
AI Safety Incidents

Proses Masuk MCP OpenCode Menyerahkan URL Server ke PowerShell — dan Tidak Ada CVE untuk Menandainya

Penulis

Magnus Corvin

Tanggal Terbit

Model terbaru · 20Lihat semua model →
Benchmark: Artificial Analysis · diperbarui setiap hari
Kembali ke semua artikel

Pada 19 Oktober 2026 Pillar Security mengungkapkan cacat eksekusi kode jarak jauh di OpenCode, agen pengodean sumber terbuka yang dikelola oleh Anomaly: server Model Context Protocol jarak jauh yang telah dikonfigurasi pengembang dapat menjalankan kode arbitrer di mesin pengembang tersebut selama proses masuk OAuth MCP, tanpa prompt persetujuan di antaranya. Bug tersebut terbatas pada Windows dan Windows Subsystem for Linux, tempat OpenCode meneruskan URL login yang disediakan server ke perintah PowerShell tanpa melakukan escape. Pillar menetapkan rentang terdampak pada 1.0.137 hingga 1.18.32. Anomaly memperbaikinya di 1.18.33, menerbitkannya ke npm pada 28 September 2026, dan tidak meminta CVE serta tidak menerbitkan advisory — sehingga tidak ada apa pun dalam feed kerentanan normal yang akan memberi tahu tim terdampak untuk melakukan upgrade. Pillar melaporkan tidak ada bukti bahwa cacat tersebut pernah digunakan dalam serangan. Ini adalah satu catatan dalam arsip insiden AI, di mana setiap entri mencantumkan sumbernya sendiri, tingkat keparahan, tingkat keyakinan, dan tanda status diperdebatkan.

Apa sebenarnya kekurangannya

Ketika klien MCP terhubung ke server jarak jauh yang memerlukan otorisasi, klien tersebut menjalankan handshake penemuan OAuth. Server merespons dengan 401 dan tantangan yang menunjuk ke dokumen penemuannya, dan satu bidang dalam dokumen tersebut — authorization_endpoint — memberi tahu klien ke mana harus mengirim pengguna untuk masuk. Bidang ini adalah string bebas, dan pihak yang diautentikasi adalah pihak yang memilihnya.

Di OpenCode 1.18.32, string itu berpindah dari wire ke sebuah shell. Pillar melacak jalurnya dari dokumen discovery server melalui MCP SDK ke oauth-provider.ts, mcp/index.ts dan browser.ts, berakhir di open, paket kecil yang dipakai OpenCode untuk meluncurkan browser. Tidak ada apa pun di jalur itu yang memeriksa skema URL, dan tidak ada yang membandingkannya dengan origin server yang telah dikonfigurasi oleh pengembang. Handshake-nya memang otomatis secara desain — intinya adalah mengirim Anda ke halaman login tanpa membuat Anda menyalin URL — sehingga tidak ada langkah persetujuan yang berdiri di antara jawaban server dan peluncur.

The launcher is where it broke. On macOS and Linux, open passes the address as an argument vector and no shell is involved. On Windows, version 10.1.2 of open — the version every affected OpenCode release pinned — builds a PowerShell command, base64-encodes it and runs it with powershell -EncodedCommand. Pillar quotes the source: the application name is escaped on one line, and the target URL is not. PowerShell evaluates $(...) subexpressions inside double-quoted strings, so an address of the form https://evil.test/$([IO.File]::WriteAllText('C:\Users\Public\pwned.txt','RCE')) runs before the browser launch fails. OpenCode discards that failure.

Dua sifat membuatnya mudah terlewat. Payload tidak mengandung spasi, sehingga normalisasi URL membiarkannya utuh, dan secara sintaksis itu adalah alamat https yang biasa. Dan server tidak perlu bersikap bermusuhan saat dikonfigurasi: Pillar mencatat bahwa kompromi di kemudian hari, entri registri yang dibajak, typosquat, atau domain kedaluwarsa masing-masing akan mengubah entri konfigurasi tepercaya menjadi mekanisme pengiriman.

Siapa yang terpapar

Populasi yang terpapar adalah pengguna Windows dan WSL yang menjalankan OpenCode dengan server MCP jarak jauh yang dikonfigurasi. Pillar menggambarkan OpenCode memiliki sekitar 3 juta unduhan npm mingguan dan 211.000 bintang GitHub; laporan Infosecurity Magazine menempatkan jumlah bintang di lebih dari 218.000. Tidak satu pun dari angka tersebut merupakan jumlah instalasi yang terdampak, dan belum ada yang menerbitkannya.

Pemicunya adalah satu titik di mana kedua laporan utama berbeda, dan hal itu penting bagi risiko maupun tingkat keparahan. Pillar menggambarkan eksploitasi sebagai tidak memerlukan interaksi atau persetujuan tambahan dari pengguna. The Hacker News, dalam laporannya tanggal 22 Oktober, menyatakan bahwa langkah browser hanya berjalan ketika developer memulai proses masuk — dengan menjalankan opencode mcp auth atau membuat permintaan yang sesuai — dan bahwa sekadar memiliki server yang dikonfigurasi, atau membuka sesi, tidak akan mencapainya. Bagaimanapun juga, developer tidak melakukan hal yang tidak biasa; memulai autentikasi terhadap server yang sudah ada dalam konfigurasi adalah hal rutin. Namun "tanpa interaksi" dan "satu interaksi rutin" adalah klaim yang berbeda, dan perbedaannya langsung memengaruhi skor.

Perbaikan itu hadir dengan sebutan refactor

Pillar melaporkan celah tersebut secara privat melalui GitHub Security Advisory pada 29 Agustus 2026, dengan materi reproduksi lengkap. Pada 25 September Pillar menindaklanjuti di luar thread advisory; Anomaly mengonfirmasi bahwa laporan tersebut telah sampai ke timnya dan membalas bahwa server MCP berbahaya berada di luar model ancaman mereka. Pada hari yang sama, pull request #51414 — yang digabungkan sebagai commit 29f07e0c — masuk. Hal ini dideskripsikan sebagai penggabungan delapan lokasi pemanggilan peluncuran browser menjadi satu helper. Versi 1.18.33 mencapai npm tiga hari kemudian, pada 28 September.

Patch ini memiliki tiga lapisan. Dependensi open dipindahkan ke 11.0.4, yang membungkus target dengan tanda kutip tunggal, dan PowerShell tidak melakukan ekspansi apa pun di dalam tanda kutip tunggal. Sebuah openUrl() helper baru menolak skema non-HTTP(S). Pemeriksaan skema dimasukkan ke redirectToAuthorization itu sendiri, pada batas yang telah disebut Pillar dalam laporannya. Baik pull request maupun catatan rilis tidak menyebutkan cacat keamanan, dan Anomaly tidak meminta CVE.

The Hacker News melaporkan bahwa kebijakan keamanan yang diterbitkan Anomaly menyatakan bahwa server MCP yang dikonfigurasi pengguna berada "di luar batas kepercayaan kami," dan bahwa perusahaan telah menerbitkan imbauan untuk cacat eksekusi kode OpenCode lainnya tahun ini, termasuk satu yang diperbaiki pada Agustus. Keterangan Pillar tentang balasan yang diterimanya lebih blak-blakan: "kami telah memperbarui dependensi, tetapi secara umum, mencoba menangani server MCP berbahaya berada di luar model ancaman kami."

An HTML timeline card titled 'How a five-year-old escaping bug reached OpenCode', subtitled 'Dated entries from Pillar Security's report and the open package's own issue history', listing nine rows: 22 October 2020, open issue #202 reports that a URL containing a dollar sign breaks on WSL 2; 18 October 2023, issue #323 titles 'OS command injection on windows when opening urls'; 9 July 2025, CVE-2025-6514 in mcp-remote, same sink, CVSS 9.6; 15 November 2025, open 11.0.0 quotes the PowerShell target; 7 December 2025, OpenCode calls open() with a server-supplied URL; 29 August 2026, Pillar reports privately via GitHub Security Advisory; 25 September 2026, pull request #51414 merged; 28 September 2026, OpenCode 1.18.33 published to npm, no CVE and no advisory; 19 October 2026, Pillar publishes. A footer cites Pillar Security and the open repository.

Jika dibaca sebagai suatu urutan, linimasa menempatkan bug OpenCode di ujung sebuah jejak lima tahun, bukan di awal sebuah jejak. Cacat yang menghasilkannya sudah dipublikasikan, dan perbaikannya sudah dirilis, sebelum baris kode yang menggunakannya ditulis.

Mengapa validasi skema tidak akan menghentikannya

Obat yang disepakati untuk kelas bug ini adalah validasi skema URL: blokir skema-skema aneh, izinkan http dan https, selesai. Itulah yang dikirimkan MCP TypeScript SDK, dan itulah yang ditambahkan OpenCode di 1.18.33. Payload Pillar lolos dari setiap pemeriksaan tersebut, karena menggunakan https. Denylist SDK memblokir javascript:, data: dan vbscript:; allowlist http/https yang lebih ketat diusulkan dalam pull request SDK #841 pada Agustus 2025 dan ditutup tanpa digabungkan, sementara pull request #877 merilis denylist tiga skema di v1.17.4 — dan Pillar mengatakan itu masih menjadi kebijakan di SDK 1.32.0 saat dipublikasikan. Yang sebenarnya menutup celah di OpenCode adalah pembaruan dependensi, bukan pemeriksaan yang terlihat seperti perbaikan keamanan.

Sejarahnya membantah anggapan bahwa ini hanyalah kelalaian satu proyek. Paket open telah mencantumkan peringatan di README sejak 2021 bahwa paket ini tidak memberikan jaminan keamanan dan bahwa sanitasi input adalah tanggung jawab pemanggil. Pada Oktober 2020, seorang pengguna mengajukan issue #202 yang melaporkan bahwa URL yang mengandung tanda dolar kehilangan sebagian dirinya di WSL 2 — ekspansi string tersebut, dilaporkan sebagai gangguan tautan rusak. Pada Oktober 2023, seorang engineer Adobe mengajukan issue #323, "injeksi perintah OS di Windows saat membuka URL," dengan proof of concept satu baris: open('https://$(calc.exe)'). Pemelihara mengutip README dan mengatakan bahwa pull request yang meningkatkan escaping dipersilakan; issue tersebut ditutup sebagai tidak direncanakan tiga hari sebelum open 11.0.0 tetap merilis escaping itu, pada 15 November 2025. OpenCode menulis panggilan peluncuran browser-nya pada 7 Desember 2025, tiga minggu setelah versi open yang telah diperbaiki ada, terhadap pin yang sudah berumur berbulan-bulan.

Dalam bulan-bulan sebelum panggilan itu ditulis, ekosistem MCP mencatat tiga CVE pada sink yang sama atau field yang sama: CVE-2025-6514 di mcp-remote (CVSS 9.6, diungkapkan oleh JFrog pada 9 Juli 2025), CVE-2025-58062 di openmcp-client, dan CVE-2025-10619 di sequa-mcp. Kontras yang diajukan Pillar adalah dengan klien yang sama sekali tidak pernah membangun perintah shell dari string jarak jauh: ia menyebut gemini-cli, Claude Code, github-mcp-server, dan mcp-gateway milik Docker sebagai klien yang meneruskan URL sebagai vektor argumen, sehingga pertanyaan tentang apa isi string tersebut tidak lagi menjadi penentu.

A generated abstract illustration on a dark navy field: a long cyan ribbon of abstract glyph shapes runs left to right and splits in two at a hollow chrome ring, which the upper branch passes straight through while the lower branch curves downward into a glowing amber terminal rectangle at bottom right. A faint dotted outline of an empty browser window floats in the upper right. No text, people or organisation logos appear. The OrcaRouter logo is composited in the bottom-right corner.

Apa yang sudah mapan, dan apa yang belum

Catatan tersebut dinilai dengan tingkat keyakinan A oleh arsip, dan pelaporan di baliknya tetap kuat. Infosecurity Magazine menerbitkan pada 20 Oktober wawancaranya sendiri dengan Eilon Cohen dari Pillar; The Hacker News menerbitkan laporannya sendiri pada 22 Oktober; DKCERT, CERT nasional Denmark, merangkum temuan tersebut pada 21 Oktober dengan mengutip Infosecurity; dan laboratorium riset Cloud Security Alliance menerbitkan analisis yang menambahkan satu catatan substantif di bawah ini. Tidak satu pun dari mereka adalah pihak pelapor, dan mereka sepakat tentang mekanisme, versi, dan perbaikan senyap. Anomaly sendiri tidak menerbitkan apa pun tentang cacat tersebut.

Ditetapkan, secara resmi:

• Cacat tersebut, mekanismenya, dan cakupan platformnya. Pillar mengidentifikasi baris sumber tertentu dan perbaikannya terlihat dalam diff publik 1.18.32-ke-1.18.33; dua laporan berita independen menggambarkan alur data yang sama.

• Rentang yang terdampak, 1.0.137 hingga 1.18.32, dan rilis perbaikan, 1.18.33, yang diterbitkan 28 September 2026.

• Bahwa tidak ada CVE dan tidak ada advisory. Ini dapat diperiksa, dan ini adalah fakta yang menopang bagi para defender.

• Bahwa tidak ada eksploitasi yang dilaporkan. Pillar mengatakan pihaknya tidak melihat tanda-tanda penggunaan dalam serangan, dan The Hacker News mencatat bahwa tidak ada indikator kompromi yang dipublikasikan. Tidak adanya indikator yang dipublikasikan bukanlah bukti ketiadaan, dan tanpa telemetri dari vendor, tidak ada tafsiran yang dapat dikonfirmasi.

Belum ditetapkan, atau dalam ketegangan:

• Angka 9.8. Itu adalah skor CVSS v3.1 yang diusulkan Pillar, bukan skor resmi: karena tidak ada CVE, tidak ada skor NVD dan tidak ada skor vendor. Catatan riset Cloud Security Alliance menunjukkan bahwa 9.8 mengasumsikan tidak adanya interaksi pengguna, dan bahwa jika laporan The Hacker News tentang pemicunya benar, peringkat yang memerlukan interaksi pengguna — sekitar 8.8 — akan lebih cocok. Tulisan ini tidak menyelesaikan hal itu; tag tingkat keparahan tinggi milik arsip itu sendiri adalah klasifikasi, bukan skor.

• Tanggal publikasi. Laporan Pillar bertanggal 19 Oktober 2026 di tajuknya, dan kedua artikel berita menggunakan tanggal tersebut; kronologi pengungkapan di bagian bawah laporan Pillar sendiri mencantumkan publikasi sebagai 4 Oktober. Arsip mencatat 19 Oktober dengan presisi hari.

• Ukuran populasi yang terpapar. Belum ada jumlah yang dipublikasikan. Angka unduhan dan bintang di atas adalah metrik repositori, bukan jumlah instalasi.

• Apakah ada mesin yang benar-benar telah dikompromikan. Tidak ada yang dipublikasikan yang mendukung hal itu, dan catatan tersebut tidak memuat kerugian nyata.

An HTML card titled 'Established, and not', split into two columns. The left column, headed 'Established', lists: affected versions 1.0.137 to 1.18.32, Windows and WSL only; fixed in 1.18.33 on 28 September 2026; no CVE and no security advisory issued; no exploitation reported and no indicators published. The right column, headed 'Not established', lists: official severity, since 9.8 is Pillar's proposed score with no CVE to attach it to; the publication date, 19 October in the report header and 4 October in its own timeline; the number of exposed installations; whether any host was compromised. A footer cites Pillar Security, The Hacker News and the Cloud Security Alliance research note.

Apa yang berubah, dan apa yang harus dilakukan

Remediasinya adalah pemeriksaan versi, karena tidak ada hal lain yang akan memberi tahu Anda. OpenCode 1.18.33 atau lebih baru sudah diperbaiki. Instalasi yang terdampak harus ditemukan dengan menginventarisasi paket secara langsung: rekomendasi Pillar adalah menginventarisasi OpenCode itu sendiri daripada menunggu feed, dan catatan Cloud Security Alliance menyarankan untuk melakukan kueri terhadap opencode-aikarena tidak ada pengenal yang dapat dicocokkan oleh feed. Tim yang tidak dapat melakukan peningkatan dan menjalankan Windows atau Windows Subsystem for Linux harus menghapus server MCP jarak jauh yang belum mereka verifikasi dari konfigurasi OpenCode mereka; opencode mcp list menunjukkan server mana yang ada.

Bagi siapa pun yang memelihara klien MCP, panduan Pillar lebih sempit daripada saran biasa: teruskan URL sebagai vektor argumen dan jangan pernah membangun baris perintah dari string jarak jauh, ikat penemuan OAuth ke origin server yang dikonfigurasi pengguna, dan perlakukan dokumen penemuan, metadata server, dan deskriptor alat sebagai input yang tidak tepercaya, bukan sebagai pengaturan. Catatan Cloud Security Alliance menambahkan heuristik perburuan — sebuah proses OpenCode yang menjalankan powershell.exe dengan -EncodedCommand, misalnya — sekaligus menekankan bahwa ini adalah saran untuk rekayasa deteksi, bukan indikator kompromi yang dipublikasikan.

Bukan pembobolan Console

Pengungkapan Pillar muncul beberapa hari setelah Anomaly mengonfirmasi pelanggaran terpisah terhadap Console milik OpenCode yang dihosting, yang mungkin telah mengekspos kunci penyedia API yang tersimpan. Kedua peristiwa itu tidak saling terkait, dan Eilon Cohen dari Pillar menjelaskan secara gamblang perbedaannya dalam wawancaranya dengan Infosecurity Magazine. "Pelanggaran itu mengenai sistem lama di balik proksi kunci yang dihosting, dan mengekspos kunci penyedia yang telah disimpan pengguna di sana," katanya. "Kerentanan yang kami laporkan berjalan sebaliknya: server MCP jarak jauh yang berbahaya mengeksekusi kode di mesin pengembang sendiri selama handshake OAuth. Target dan posisi penyerang yang berbeda." Pelanggaran Console adalah catatan terpisah dalam arsip, dan keduanya harus dibaca sebagai entri terpisah.

Yang menghubungkan keduanya, dalam kerangka Cohen, adalah pertanyaan yang mendasari keduanya: "Siapa yang Anda izinkan untuk menyerahkan kredensial dan input kepada alat pengodean AI, dan apa yang dilakukan alat itu dengan semuanya."

Kesenjangan pengungkapan adalah bagian yang bertahan lebih lama daripada bug itu. Sebuah cacat yang menurut para penemunya kritis, diperbaiki di dalam pembaruan dependensi, dan tidak muncul pada setiap sinyal otomatis yang biasanya diandalkan oleh defender, membuat inventaris langsung sebagai satu-satunya metode deteksi — dan vendor tidak menerbitkan advisory yang memberi tahu siapa pun untuk menjalankannya.