
Tencent BrowserSkill Hanya Memeriksa Apakah ID Ekstensi Tampak Valid — Ekstensi Apa Saja Dapat Menyuapi Agen dengan Halaman Palsu
- OrcaBARUOrcaCyber: Qwen3.8 Flash Next Abliterated2026-10-26$0.80 / $1.60 per 1 juta token · 98 tok/s
- OrcaBARUOrcaCyber: MiMo V2.6 Flash Abliterated2026-10-26$0.80 / $1.60 per 1 juta token · 115 tok/s
- MoonshotBARUMoonshotAI: Kimi K3.1 Pro2026-10-2455Kecerdasan
- OrcaBARUOrcaCyber: DeepSeek V4.1 Flash Abliterated2026-10-23$0.80 / $1.60 per 1 juta token · 138 tok/s
- minimaxBARUMiniMax: M3.1 Flash2026-10-1943Kecerdasan
- OrcaBARUOrca: OrcaCyber Ultra 1.02026-10-17$5.00 / $10.00 per 1 juta token · 43 tok/s
- deepseekBARUDeepSeek: DeepSeek V4.1 Flash 10172026-10-1745Kecerdasan
- DeepSeekBARUDeepSeek: DeepSeek V4.1 Flash2026-10-1740Kecerdasan
- OrcaOrca: OrcaCyber Zero 1.52026-10-10$3.00 / $7.50 per 1 juta token · 111 tok/s
- openaiOpenAI: GPT-6.1 Sol2026-09-2952Kecerdasan
- anthropicAnthropic: Claude Sonnet 5.52026-09-2856Kecerdasan
- typesafeTypeSafe: Jev 1.132026-09-24$0.04 / $0.00 per 1 juta token · 698 tok/s
- OpenAIOpenAI: GPT-6 Luna2026-09-2238Kecerdasan
- OpenAIOpenAI: GPT-6 Sol2026-09-2248Kecerdasan
- AnthropicAnthropic: Claude Opus 5.52026-09-2258Kecerdasan
- xiaomiXiaomi: MiMo-V2.6-Flash2026-09-21$0.14 / $0.28 per 1 juta token · 45 tok/s
- xiaomiXiaomi: MiMo-V2.6-Pro2026-09-21$0.43 / $0.87 per 1 juta token · 50 tok/s
- xAIGrok 4.72026-09-2146Kecerdasan
- OrcaOrca: OrcaCyber Zero 1.02026-09-17$3.00 / $7.50 per 1 juta token · 231 tok/s
- OrcaOrca: OrcaVerify Text 1.02026-09-16$2.00 / $0.00 per 1 juta token · 3445 tok/s
Pada 17 September 2026, seorang pengguna GitHub dengan nama pengguna carfeii membuka issue #273 pada proyek sumber terbuka BrowserSkill milik Tencent dengan klaim yang sempit: daemon lokal yang menghubungkan ekstensi browser ke agen AI tidak memeriksa ekstensi mana yang terhubung, hanya bahwa koneksi tersebut tampak seperti ekstensi sama sekali. Tiga hari kemudian, pada 20 September, VulnCheck menerbitkan temuan tersebut sebagai CVE-2026-94111, yang menggambarkan daemon yang "menerima origin chrome-extension apa pun dengan 32 karakter dalam rentang a-p," mengklasifikasikannya sebagai CWE-346 (kesalahan validasi origin), dan mencantumkan George Chen sebagai kreditnya. Advisory tersebut memberinya skor CVSS 4.0 6.9, sedang, dengan dampak integritas dinilai tinggi serta kerahasiaan dan ketersediaan rendah. Tidak ada dalam catatan yang menunjukkan bahwa kelemahan tersebut digunakan: arsip tidak mencatat eksploitasi dan menilai keyakinan entri A, dengan real_harm false. Ini adalah satu catatan dalam arsip insiden AI, di mana setiap entri membawa sumbernya sendiri, tingkat keparahan, tingkat keyakinan, dan tanda yang diperdebatkan.
Pemeriksaan format yang tidak pernah memeriksa identitas
Kode di pusat catatan itu kecil. Di crates/bsk-cli/src/daemon/ws.rs, fungsi origin_allowed() mengambil header Origin dari handshake WebSocket, menghapus string chrome-extension://, dan mengembalikan true jika sisanya tepat 32 karakter dan setiap karakter berada di antara a dan p. Itu adalah pengujian lengkap. Pengujian itu dijalankan sekali, di dalam callback upgrade HTTP, dan kegagalan mengembalikan 403 dengan pesan "Origin not in chrome-extension allow-list" — meskipun sebagaimana dipublikasikan tidak ada daftar yang bisa dimasuki.
Pola itu tidak sembarangan. ID ekstensi Manifest V3 Chrome terdiri dari 32 karakter yang diambil tepat dari enam belas huruf tersebut, sehingga pemeriksaan itu dengan benar mengenali bentuk origin ekstensi yang nyata. Cacatnya adalah setiap ekstensi memiliki bentuk itu. Pemeriksaan itu menanyakan apakah pemanggil tampak seperti ekstensi browser, tidak pernah apakah itu ini ekstensi browser proyek, dan pengenal yang seharusnya dibandingkan dengannya sudah publik: README proyek menautkan listing Chrome Web Store, yang ID-nya adalah hhcmgoofomhgciiibhipgmgkgnoenaoi, dan ID Edge Add-ons di sampingnya. Tidak satu pun dari kedua string itu muncul di mana pun dalam gate.
Daemon mendengarkan pada port lokal tetap, 52800, yang dideklarasikan sebagai DEFAULT_WS_PORT di CLI dan digunakan tanpa variasi pada jalur koneksi lokal. Port tersebut terdokumentasi, konstan, dan dapat dijangkau oleh apa pun yang sudah berjalan di profil browser pengguna. Lokasi adalah alasan vektor dalam advisory dimulai dengan AV:L — penyerang memerlukan pijakan di mesin, dan PR:L mencatat bahwa pijakan dengan hak istimewa rendah sudah cukup. Ekstensi yang terpasang di profil yang sama persis merupakan jenis pijakan tersebut.
Berapa nilai kursi itu, dan seberapa besar darinya yang sudah mapan
Kalimat dampak dalam advisory itu bersifat luas: penyerang yang mendaftarkan ekstensi berbahaya sebagai klien browser dapat “mencegat dan memanipulasi konten halaman, DOM, dan tangkapan layar yang dikembalikan ke agen AI.” Itulah deskripsi yang dimuat oleh CVE, catatan advisory GitHub GHSA-x6f2-qp26-2xrh, dan arsip tersebut, dan itu menjelaskan peringkat integritas CVSS yang tinggi. Itu juga merupakan ringkasan yang ditulis oleh pihak yang menetapkan CVE, bukan laporan serangan yang telah didemonstrasikan.
Uraian yang lebih cermat muncul pada minggu yang sama, di dalam utas issue itu sendiri. Pada 20 September, seorang komentator dengan nama pengguna bb6894 melaporkan telah memeriksa ulang kode terhadap main pada commit fa953dc6 (18 September) dan menelusuri apa yang sebenarnya dapat dijangkau klien asing setelah handshake. Sebagian besar metode tool masuk, kata komentar itu, mengembalikan UnknownMethod kepada peer WebSocket; permintaan audit dibatasi pada catatan milik klien itu sendiri; dan tindakan lintas sesi seperti window_closed, user_interrupt, dan update_interaction dijaga terhadap sesi yang dimiliki peramban lain. Yang lolos dari filter tersebut lebih sempit dan, bagi agen, bisa dibilang lebih buruk daripada intersepsi: ekstensi asing dapat mengambil slot peramban dengan instance_id yang dipilih penyerang, dan jika ekstensi itu satu-satunya peramban yang terdaftar — cold start atau restart daemon — ia menerima permintaan tool dari agen dan menjawabnya dengan konten halaman, DOM, atau tangkapan layar yang direkayasa. Komentator menyebut ini "pemalsuan hasil terhadap agen" dan "saluran masuk ke persepsi agen." Efek kedua adalah denial of service: dengan peramban asli juga online dan tanpa selector, startup sesi dapat gagal dengan MultipleBrowsersOnline.
Tidak satu pun dari kedua versi itu telah didemonstrasikan secara publik. Reporter menggambarkan proof of concept sebagai "tersedia berdasarkan permintaan"; tidak ada yang menerbitkannya, dan tidak ada eksploitasi yang tercatat. Jadi perbedaan antara kedua versi tersebut adalah perbedaan antara dua pembacaan atas berkas sumber yang sama, bukan antara sebuah teori dan eksploit yang berfungsi — dan artikel itu melaporkan keduanya alih-alih memilih. Yang dapat dikatakan secara pasti adalah bahwa tidak pernah ada pemeriksaan identitas kedua setelah handshake, sehingga apa pun yang diizinkan masuk oleh gerbang itu tetap diizinkan masuk selama koneksi berlangsung.
Kodenya sudah tahu
Dokumen yang paling tidak nyaman dalam catatan ini bukanlah advisory-nya. Dokumen itu adalah komentar yang berada tepat di atas fungsi, yang ikut dikirimkan dalam rilis bertag yang dirujuk oleh advisory tersebut. Komentar itu menandai celah tersebut sebagai TODO(M10/M12), menyebutkan allow-list yang ingin dibangunnya — sebuah himpunan DaemonConfig::allowed_extension_ids yang diisi dari file konfigurasi atau alur pairing — lalu menyatakan alasan penundaannya: "celah defense-in-depth yang dapat diterima untuk saat ini karena pairing terjadi melalui popup, tetapi ekstensi yang di-side-load di mesin yang sama saat ini masih lolos dari gerbang tersebut."
Dibaca apa adanya, para maintainer tahu pemanggil mana yang diloloskan gerbang, mencatat bahwa mereka mengetahuinya, dan tetap merilisnya. Itu tidak membuat paparan menjadi lebih besar daripada yang dinyatakan dalam advisory; itu membuatnya lebih tidak mengejutkan, dan memindahkan pertanyaan dari "bagaimana ini bisa lolos peninjauan" menjadi "apa yang akan membuat perbaikan yang ditunda menjadi mendesak." Asumsi desain yang memitigasi itu nyata dan juga didokumentasikan: koneksi lokal bersifat opt-in. Menurut README, pengguna memasang ekstensi, membuka popup-nya, dan mengaktifkan koneksi lokal, dan daemon harus berjalan agar semua ini dapat dijangkau. Profil dengan ekstensi terpasang tetapi toggle mati, atau tanpa bsk daemon yang berjalan, bukan target yang mendengarkan.
Lima minggu kemudian, gerbang itu tidak berubah

Rentang terdampak pada catatan tersebut adalah "hingga 0.3.0", dan itulah rentang yang ditetapkan oleh CNA. Namun itu bukan akhir ceritanya di repositori. Rilis 0.3.0 CLI diberi tag pada 17 September pukul 02:22 UTC; issue tersebut diajukan pada hari yang sama pukul 15:14 UTC, sekitar tiga belas jam kemudian. Tiga rilis CLI lainnya telah terkirim sejak saat itu — 0.3.1 pada 23 September, 0.3.2 pada 30 September, dan 0.3.3 pada 15 Oktober — dan fungsi origin_allowed() pada setiap tag tersebut merupakan pemeriksaan yang sama seperti dijelaskan di atas, dengan TODO yang masih berada di atasnya. Branch main juga memuatnya per 27 Oktober.
Perbaikan sudah ada, tetapi hanya sebagai proposal. Pada 28 September, seorang kontributor yang memposting sebagai dangzitou membuka pull request #363 dari fork pribadi, berjudul "fix(daemon): pin WS origin gate to BrowserSkill's own extension ids." Pull request itu menggantikan uji bentuk dengan perbandingan terhadap dua ID toko, dan menambahkan BSK_ALLOWED_EXTENSION_IDS sebagai jalur penerimaan eksplisit untuk build sideloaded dan pengembangan, yang ID hasil unpack-nya diturunkan dari jalur instalasi. Isi pull request mengklaim bahwa ini menutup jalur pemalsuan dan juga denial of service MultipleBrowsersOnline. Per 27 Oktober, pull request tersebut masih terbuka dan belum di-merge, dan issue tersebut tetap terbuka tanpa pernyataan vendor yang terlampir padanya.
Konsekuensi praktisnya adalah tidak ada versi yang dapat ditingkatkan ke sana yang memuat perbaikan tersebut. Siapa pun yang menyarankan "tingkatkan melewati 0.3.0" sedang menyarankan langkah yang belum ada: rilis-rilis setelahnya memang lebih baru, bukan sudah diperbaiki. Rentang dalam catatan itu harus dibaca sebagai rentang yang dinilai oleh CNA pada 20 September, bukan sebagai pernyataan bahwa 0.3.1 dan versi setelahnya sudah bersih.
Apa yang sudah mapan, dan apa yang belum
• Terbukti: sumber yang dirilis pada tag cli-v0.3.0 berisi gerbang origin yang menerima origin chrome-extension 32 karakter a–p mana pun. Pelapor, CNA, dan berkas itu sendiri sepakat, dan kodenya bersifat publik.
• Ditetapkan: gerbang hanya dijalankan sekali, saat peningkatan WebSocket, tanpa pemeriksaan identitas selanjutnya, pada port lokal tetap 52800.
• Ditetapkan: komentar sumber proyek itu sendiri mengakui bahwa ekstensi yang di-sideload akan lolos, dan menunda daftar-izin.
• Ditetapkan: CVSS 4.0 6.9 dan CVSS 3.1 6.6 keduanya merupakan skor VulnCheck, yang dicatat oleh NVD sebagai sekunder. Status NVD sendiri untuk entri tersebut adalah Deferred, artinya NVD telah menerbitkan data CNA tanpa menambahkan analisis yang ditulis oleh NVD.
• Ditetapkan:Penilaian SSVC CISA, tertanggal 21 September, mencatat eksploitasi sebagai tidak ada, dapat diotomatiskan sebagai tidak, dan dampak teknis sebagai sebagian. EPSS FIRST menempatkan probabilitas eksploitasi dalam tiga puluh hari ke depan sebesar 0,00135, yaitu persentil ke-2,9, per 26 Oktober.
• Belum dapat dipastikan: adanya penggunaan apa pun di dunia nyata. Tidak ada eksploitasi, tidak ada proof of concept yang dipublikasikan, tidak ada jumlah instalasi yang terdampak. Metrik repositori proyek bukanlah jumlah instalasi, dan belum ada yang mempublikasikannya.
• Belum ditetapkan: dampak mana yang berlaku. "Intersepsi dan manipulasi" milik CNA dan "pemalsuan hasil plus penolakan layanan" dari thread tersebut menggambarkan batas maksimum yang berbeda, dan keduanya belum didemonstrasikan di luar pembacaan kode.
• Tidak terbukti: bahwa cacat tersebut berhenti pada 0.3.0. String versi merupakan penilaian CNA; kode tidak berubah dalam tiga rilis setelahnya, dan tidak ada pernyataan vendor yang menyatakan ketiganya bebas.
• Bertentangan, belum terselesaikan: satu agregator, DevGuard, menampilkan sinyal "upaya eksploitasi telah terdeteksi" untuk CVE ini tanpa menyebutkan sumber, IOC, atau penyedia telemetri. Hal itu bertentangan dengan penilaian tercatat CISA tentang tidak adanya eksploitasi dan dengan tidak adanya laporan publik apa pun; arsip juga tidak mencatat adanya eksploitasi. Anggap tanda dari agregator tersebut sebagai tidak terbukti, bukan sebagai titik data kedua.

Mengapa transport menjadi target yang menarik
Sebagian besar panduan injeksi prompt menarik batas yang sama: perlakukan teks halaman yang diambil sebagai tidak tepercaya, dan perlakukan mekanisme yang mengantarkannya sebagai tepercaya. Alat yang membaca halaman web dianggap sedang membaca halaman itu; pertanyaannya adalah apa yang dikatakan halaman tersebut. Catatan ini membaliknya. Apa yang diterima agen sebagai konten halaman, DOM, dan tangkapan layar adalah apa pun yang dipilih klien di ujung lain soket lokal untuk dikirim, dan satu-satunya gerbang pada soket itu menanyakan pertanyaan yang dapat dijawab dengan benar oleh setiap kandidat. Jika kliennya asing, "verifikasi apa yang dikatakan halaman" tidak menyisakan apa pun untuk dijadikan dasar verifikasi.
Itulah sebabnya tingkat keparahannya berada di posisi tersebut dan bukan lebih tinggi. Serangan ini bersifat lokal, mengandaikan adanya ekstensi yang sudah terpasang di profil atau kode lokal lain, dan mensyaratkan daemon berjalan dengan koneksi lokal diaktifkan. Kondisi tersebut wajar bagi pengguna yang dituju alat ini dan tidak biasa bagi orang lain. Tingkat keparahan sedang pada arsip dan tidak adanya kerugian yang tercatat konsisten dengan bentuk tersebut: perluasan kepercayaan yang nyata tepat pada batas yang seharusnya dijaga oleh desain, tanpa bukti ada orang yang melewatinya.
Saran praktis yang sempit berikut bukanlah mitigasi yang pernah diterbitkan oleh siapa pun, melainkan hanya batas yang dibiarkan tetap berdiri oleh kode. Karena penerimaan diputuskan sekali pada handshake di port yang dipublikasikan, permukaan yang dapat dijangkau ditentukan oleh ekstensi mana yang terpasang di profil yang menjalankan daemon, dan oleh apakah daemon tersebut serta koneksi lokal ekstensi diaktifkan pada saat itu. Sampai daftar izin ID ekstensi dirilis, kedua fakta itu adalah keseluruhan kendalinya.

CVE-2026-94111 akan menua dengan salah satu dari dua cara. Entah pull request itu digabungkan dan catatan tersebut menjadi entri singkat tentang celah yang sudah diketahui yang butuh waktu lama, atau pemeriksaan bentuk yang sama masih ada di dalam tree setahun kemudian dan entri itu dikutip sebagai contoh awal dari kelasnya: bukan halaman yang membawa instruksi bermusuhan, melainkan pipa yang menentukan halaman mana yang sedang dibaca agen.
