2 poin oleh GN⁺ 2024-03-07 | 1 komentar | Bagikan ke WhatsApp
  • Under New Management adalah ekstensi yang secara berkala memeriksa apakah informasi pengembang dari ekstensi browser yang terpasang telah berubah di Chrome Web Store atau Firefox Addons
  • Jika informasi pengembang berubah, ekstensi ini menampilkan lencana merah pada ikon ekstensi agar pengguna mengetahui adanya perubahan kepemilikan
  • Kebutuhannya berangkat dari masalah bahwa pengembang ekstensi sering menerima tawaran akuisisi, dan dalam hampir semua kasus pihak pengakuisisi berniat menyalahgunakan pengguna yang sudah ada
  • Pengguna mungkin tidak menyadari bahwa kepemilikan ekstensi yang terpasang telah berubah dan mungkin telah disusupi, sehingga alat ini memberi kesempatan untuk membuat penilaian
  • Karena browser membatasi modifikasi domain marketplace ekstensi, pemeriksaan informasi pengembang didelegasikan ke server API ExBoost

Mendeteksi perubahan kepemilikan ekstensi

  • Under New Management sesekali memeriksa apakah informasi pengembang dari ekstensi yang terpasang telah berubah di Chrome Web Store atau toko Firefox Addons
  • Jika ada perubahan, lencana merah akan ditampilkan pada ikon ekstensi sehingga pengguna dapat menyadari perubahan kepemilikan
  • Tujuannya adalah memberi pengguna kesempatan untuk membuat keputusan yang berdasarkan informasi tentang perangkat lunak yang mereka gunakan

Mengapa ini diperlukan

  • Pengembang ekstensi terus menerima tawaran untuk menjual ekstensi mereka
  • README menyatakan bahwa dalam hampir semua kasus pembeli memiliki tujuan untuk menipu pengguna yang sudah ada
  • Pengguna mungkin tidak mengetahui bahwa kepemilikan ekstensi yang terpasang telah berubah, dan saat ini mungkin telah disusupi

Cara memasang

Build dari source

  • Under New Management menggunakan Plasmo
  • pnpm install: memasang dependensi
  • pnpm dev: menjalankan secara lokal
  • pnpm build --zip: build rilis
  • pnpm build --target=firefox-mv3: build untuk Firefox

Mengapa server eksternal diperlukan

  • Browser memiliki aturan khusus untuk memodifikasi domain marketplace ekstensi
  • Sebagai contoh, tidak dimungkinkan menetapkan aturan declarative_net_request untuk chromewebstore.google.com
  • Karena itu, tugas pemeriksaan informasi pengembang didelegasikan ke ExBoost server API

1 komentar

 
GN⁺ 2024-03-07
Komentar Hacker News
  • ID ekstensi diturunkan dari private key yang ikut diunggah saat developer pertama kali mengirimkannya ke app store, dan jika ZIP yang diunggah setelah itu berisi key.pem yang berbeda, ID-nya akan berubah
    Namun jika tidak ada key.pem, ID ekstensi tetap dipertahankan. Jadi jika ID berubah, ada kemungkinan pemiliknya berubah, tetapi pemilik lama juga bisa saja menyerahkan private key kepada pemilik baru. Karena Google tidak meminta private key di setiap unggahan, pemilik baru dapat mendistribusikan perubahan tanpa key tersebut
    Ekosistem ekstensi menarik, jadi saya juga sedang membuat tool di bidang ini. Saya ingin membuat repository GitHub untuk ekstensi tertentu, mencatat setiap update sebagai perubahan repository, lalu menjalankan analyzer statis dan runtime taint analysis untuk melacak apakah input pengguna mengalir ke sink berbahaya seperti eval atau postMessage: https://github.com/milesrichardson/crxmon

    • Dulu salah satu ekstensi saya untuk Opera masuk halaman depan dan menjadi populer, lalu seseorang menawarkan untuk membelinya dengan jumlah yang cukup besar
      Saat negosiasi, saya bilang akan menurunkan ekstensi itu dan menyerahkan semua source code agar mereka mendistribusikannya sendiri, tetapi pihak lain ternyata berharap saya juga menyerahkan kredensial akun ekstensi Opera. Akhirnya transaksi itu saya batalkan, dan meski tool seperti ini berguna sampai batas tertentu, saya setuju bahwa malware scanner untuk ekstensi akan lebih baik
    • Ini berbeda dari cara kerja infrastruktur kunci publik (PKI). Saya ragu apakah ekstensi Chrome benar-benar mengharuskan private key diunggah sebagai file PEM
      Developer seharusnya menandatangani ekstensi atau manifest dengan private key, lalu membagikan public key atau menyertakannya dalam unggahan. Update juga harus terus ditandatangani dengan private key yang sama, dan selama key tidak berubah, public key dari unggahan pertama dapat digunakan untuk memverifikasi bahwa private key yang sama digunakan. Apakah public key disertakan dalam unggahan berikutnya bukan hal yang mendasar. Jika private key dijual atau dibagikan, orang lain bisa membuat update yang ditandatangani secara sah, tetapi ini adalah risiko yang muncul karena penanda tangan tidak menjaga private key tetap rahasia. Jika siapa pun, termasuk Google, membagikan private key, jaminan asal-usul ekstensi akan runtuh
    • Jika ID ekstensi berubah, versi baru harus dipasang secara eksplisit dan tidak akan ter-update otomatis
      Namun saya ragu apakah benar Google mengizinkan pemilik baru mendistribusikan perubahan tanpa private key. Chrome Web Store sangat rewel bahkan untuk hal-hal kecil, jadi aneh kalau mereka tidak peduli pada bagian seperti itu
      Saya menggunakan 3 ekstensi yang hanya dipublikasikan untuk tester, tanpa developer mode atau rsync/robocopy, agar mudah dipasang di beberapa mesin. Namun akhir pekan ini Chrome menonaktifkan semuanya hanya di satu mesin dengan alasan “tidak terdaftar di Chrome Web Store dan mungkin ditambahkan tanpa sepengetahuan pengguna”. Tidak bisa dipaksa aktif, dan di Store muncul status “nonaktif” dengan tombol “aktifkan sekarang”, tetapi banner hanya hilang sebentar lalu muncul lagi setelah refresh. Profil Chrome tersebut sedang login dengan akun yang ada di allowlist
      Badge di halaman Chrome Web Store menunjukkan akun saya sebagai developer tidak terkena sanksi dan statusnya baik. Jika tidak login dengan email allowlist, halaman itu pun tidak akan terlihat. Sulit diterima bahwa mereka “sangat memperhatikan” hal-hal seperti ini tetapi justru mengizinkan update tanpa key
    • Cara yang dijelaskan memang mungkin, tetapi itu bukan cara wajib atau cara umum untuk menghasilkan ID ekstensi. Biasanya developer hanya mengunggah file ZIP pada pengajuan pertama, lalu Chrome Web Store membuat dan menyimpan private key yang akan dipakai untuk penandatanganan distribusi publik
      CWS tidak boleh pernah mengubah ID ekstensi yang sudah ada, karena ID itulah yang mengidentifikasi ekstensi secara unik. Jika ID berubah, klien Chrome tidak dapat meminta update untuk ekstensi tersebut, dan CWS maupun Chrome tidak mendukung fitur memindahkan pengguna dari satu ekstensi ke ekstensi lain
      Setahu saya, setelah pengajuan pertama, CWS akan menolak ZIP yang berisi key.pem. Jika ID ekstensi berubah, itu bukan ekstensi yang sama. Pernyataan bahwa pemilik baru dapat mendistribusikan perubahan tanpa PEM pada umumnya benar, tetapi jika developer menandatangani sendiri ekstensi yang diajukan ke CWS, update tidak dapat dilakukan tanpa PEM. Jujur saya tidak tahu apakah fitur itu masih memungkinkan sekarang; dulu itu adalah jebakan besar ketika developer kehilangan private key yang dipakai untuk unggahannya sendiri dan menghancurkan basis instalasinya
    • Jika seseorang membeli ekstensi dengan niat jahat, mereka juga akan menginginkan private key
      Hampir semua orang pada akhirnya akan setuju jika harganya cocok; perbedaan tiap orang hanya pada berapa bayaran yang diperlukan
  • Beberapa bulan lalu saya membuat ekstensi gratis dan open-source untuk mempercepat melewati iklan YouTube, membagikannya di sini, dan masuk halaman pertama.
    Dalam waktu seminggu, seseorang yang berkomentar di postingan Show HN saya menyalinnya, mempromosikan versinya sendiri di Reddit, lalu viral hingga melampaui 300 ribu pengguna: https://github.com/rkk3/ad-accelerator/blob/main/lessons_pos...
    Saya sempat bertanya-tanya kenapa ia menyalinnya alih-alih mengirim PR ke ekstensi gratis dan open-source, tetapi beberapa minggu kemudian ia mencoba menjualnya di beberapa situs dengan harga nominal 5 digit. Mungkin saja ia masih memilikinya, tetapi terlihat juga bahwa developer yang tercantum di Chrome Store sudah berbeda dibanding saat pertama kali dirilis

    • Kalau melihat cerita dari pihak lain, konteksnya sedikit berubah: https://news.ycombinator.com/item?id=38463233
      Saya tidak memahami seluruh latar belakangnya, tetapi ekstensi itu pada dasarnya hanyalah JavaScript sepele sekitar 50 baris. Cukup berani untuk menyebut seseorang mencurinya. Idenya sendiri tidak bernilai, dan sulit juga mengklaim bahwa ide ini sangat baru. Bahkan jika diasumsikan pihak lain terinspirasi, urutan waktu siapa melakukan apa lebih dulu tidak terlalu jelas
    • Anda bilang “lain kali saya akan promosi lebih agresif,” tapi rasanya itu juga bisa dilakukan kali ini. Ekstensinya masih ada, jadi masih bisa dipromosikan sekarang.
      Namun, berapa lama YouTube dan Chrome akan membiarkannya tetap berfungsi adalah persoalan lain, dan mereka juga mungkin tidak menyukainya
    • Saya berharap hasil akhirnya baik, tetapi kalau tidak, sikap Jeff Tweedy mungkin bisa membantu.
      “…jika seluruh dunia menyanyikan lagumu / dan semua lukisanmu terpajang / ingatlah bahwa apa yang dulu milikmu kini milik semua orang / itu bukan soal benar atau salah / kau boleh saja terus bergantung padanya / hanya saja kaulah yang akan gelisah…” — “What Light” dari Wilco
    • Saya penasaran kenapa handle pengguna HN sama sekali tidak ditulis sebagai teks dan hanya dimasukkan di gambar. Saya tidak tahu model ancaman seperti apa yang dibayangkan ketika menyebutkan dengan jelas nama pengguna yang menyalin itu di komentar ini atau di tulisan blog
    • Sepertinya ini yang disebut kena “zuckered”
  • Ini benar-benar berguna, tetapi seperti yang dikatakan orang lain, ini seharusnya menjadi fitur bawaan browser.
    Saya belum melihat kode sumbernya secara mendalam, tetapi penasaran apakah perubahan kepemilikan akan diberitahukan secara otomatis. Tidak perlu real-time, tetapi apakah diberi tahu saat startup, atau harus menjalankan perintah pemeriksaan secara manual?
    Topik ini juga sempat ramai beberapa bulan lalu: https://news.ycombinator.com/item?id=36233068
    Seperti komentar teratas saat itu, Firefox dan Chrome sebaiknya mengubah kebijakan upgrade ekstensi otomatis untuk situasi seperti ini. Jika sebuah ekstensi mengungkapkan perubahan kepemilikan, upgrade harus memerlukan persetujuan pengguna; jika tidak mengungkapkannya, pengguna harus bisa melaporkannya sebagai berbahaya. Selain itu, judulnya mungkin seharusnya memakai “Show HN”

    • Saya pembuatnya. Pemeriksaan berjalan otomatis setiap jam, dan jika ada perubahan terdeteksi, sebuah badge ditampilkan di atas ikon ekstensi.
      Notifikasi yang lebih kuat dari itu saya nilai terlalu mengganggu
    • Jika memasang speed bump yang membuat pengguna harus secara eksplisit menyetujui upgrade karena perubahan kepemilikan perusahaan, sebagian besar pengguna akan keluar.
      Ini menurunkan nilai produk atau perusahaan saat dijual. Ramah bagi pengguna, tetapi tidak ramah bagi pembuat yang harus membayar tagihan
  • Ini bukan bahan lelucon.
    Saya memiliki ekstensi Chrome open-source yang cukup populer selama beberapa tahun, dan total donasinya bahkan tidak cukup untuk biaya kopi sebulan.
    Namun tawaran untuk membeli ekstensi itu—termasuk untuk tujuan yang jelas-jelas jahat, bahkan ada yang mengatakannya terang-terangan—datang berkali-kali dan dengan nominal yang gila. Saya menolak semuanya, tetapi mengharapkan moralitas developer asli menjadi satu-satunya mekanisme keamanan dan privasi dalam situasi seperti ini bukanlah penilaian yang waras

    • Pihak yang benar-benar berniat jahat tidak akan terdeteksi oleh alat dalam tulisan ini. Sebab mereka tidak hanya meminta kepemilikan ekstensi dan kodenya, tetapi juga transfer akun developer
  • Saya cukup memahami tujuannya dan juga mengerti keterbatasan teknisnya, tetapi agak mencurigakan bahwa daftar semua ekstensi pengguna dikirim ke jaringan iklan yang berpusat pada ekstensi
    Alasannya layanan eksternal diperlukan adalah karena browser menerapkan aturan khusus untuk modifikasi domain marketplace ekstensi seperti chromewebstore.google.com, sehingga pengecekan informasi developer didelegasikan ke server API ExBoost
    https://www.extensionboost.com/
    ExBoost dijelaskan sebagai jaringan kolaborasi untuk ekstensi browser yang menginginkan lebih banyak pengguna dan ulasan. Caranya adalah memasukkan slot ExBoost di dalam UI ekstensi, lalu menampilkan promosi ekstensi serupa atau permintaan ulasan

    • Temuan bagus. Setelah sedikit digali, untuk saat ini mereka tidak mengirim metadata yang terhubung ke browser, hanya daftar ID ekstensi yang dipisahkan koma. Tentu saja IP bisa dengan mudah digunakan
      Melihat hasil API untuk salah satu ekstensi yang saya pasang, muncul metadata terkait developer. Saya mencoba Chrome API chrome.management.get(id), tetapi informasi ini tidak dikembalikan, dan tampaknya juga tidak ada cara untuk mengambil isi manifest.json secara terprogram. Jadi untuk melakukan hal yang ingin dilakukan ekstensi ini saat ini, memang diperlukan sumber eksternal
      https://github.com/classvsoftware/under-new-management/blob/...
      https://api.extensionboost.com/v1/developer?extension_ids=gh...
    • ExBoost juga tampaknya proyek milik penulis posting asli. Jika ditafsirkan dengan niat baik, sepertinya ia memakai server API itu karena sudah memiliki data yang diperlukan untuk mengikis metadata seperti pemilik ketika diberi ID ekstensi
    • Saya pernah iseng membuat beberapa ekstensi kecil, dan beberapa minggu lalu menerima email dari ExBoost berjudul “Collaboration To Grow Our Extensions”
      Isinya meminta saya memasukkan kode mereka ke ekstensi saya, dengan bunyi “kalau kamu menampilkan punyaku, aku juga menampilkan punyamu. Biaya 0, semua untung”. Karena terlihat mencurigakan, saya tandai sebagai spam, dan tampilannya tidak berbeda dari email spam lain yang pernah saya terima dari para penipu
    • Ini koneksi yang tidak terduga untuk proyek semacam ini. Mengejutkan
    • Saya tidak mengerti kenapa harus terhubung ke layanan eksternal. Saya kira kalau pemilik berubah, ID ekstensi juga berubah, jadi bukankah cukup melacak ID secara lokal lalu menandai ketika muncul ID baru? Mungkin saya salah paham
  • Untuk ekstensi Firefox ada program ekstensi rekomendasi Mozilla, dan disebutkan bahwa sebelum dimasukkan, ekstensi menjalani peninjauan teknis ketat oleh pakar keamanan staf: https://support.mozilla.org/en-US/kb/recommended-extensions-...
    Namun dari dokumen dukungannya saja tidak jelas apakah semua pembaruan ditinjau sebelum dipublikasikan. Jika setiap kali ditinjau, ini akan sampai batas tertentu menyelesaikan masalah untuk ekstensi populer, tetapi saya juga penasaran berapa banyak penundaan yang terjadi saat diperlukan pembaruan keamanan darurat

    • Semua pembaruan ditinjau. Bahkan ekstensi yang sangat populer seperti uBlock Origin kadang-kadang tertahan
      Saat ini, sebagai kebijakan pribadi, saya hanya mengizinkan ekstensi yang dikurasi seperti itu berjalan di semua situs dan tab
    • Kedengarannya seperti mengatakan bahwa akan baik jika ada “marketplace” yang agak merepotkan, dengan aturan dan penegakan
      Maksudnya struktur di mana organisasi yang sangat populer atau terkenal sekalipun bisa dilarang jika berulang kali melanggar aturan atau mencoba melewati fitur marketplace
  • Dalam kasus yang benar-benar berniat jahat, sering kali yang dijual saat ekstensi berpindah tangan adalah kredensial akun developer Google itu sendiri, jadi kasus seperti ini tidak akan terdeteksi

    • Apakah menjual seluruh akun developer memang diizinkan sejak awal?
  • Dulu sekali saya memasang adblock dan sangat menyukainya
    Saya membeli mesin baru dan harus memasangnya lagi, dan saat itu untuk pertama kalinya saya melihat izinnya; itu benar-benar bikin kaget. Secara logis memang masuk akal bahwa untuk memblokir iklan, ia harus bisa melihat apa yang saya lihat, tetapi saya belum pernah benar-benar memikirkannya serius
    Sekarang saya memakai Pi-hole dan tidak memakai ekstensi sama sekali

    • Pi-hole tidak memblokir iklan dan pelacak seefektif uBlock Origin
      Meski begitu, bagus bahwa ada pilihan bagi yang menginginkannya, dan tiap orang punya profil risiko serta kekhawatiran yang berbeda
    • Salah satu alasan perubahan izin yang datang di Manifest V3 pada dasarnya adalah untuk mengurangi cakupan yang bisa diakses ekstensi
      Beberapa ekstensi bersifat open source dan dapat dipercaya, tetapi banyak juga yang tidak, dan tampaknya orang-orang kesulitan memverifikasinya
    • Safari punya antarmuka khusus yang memungkinkan pemblokir konten berjalan tanpa izin apa pun
      Jika Anda menyediakan daftar blokir, browser yang langsung memblokirnya. Saya tidak tahu apakah ini juga mungkin di Firefox: https://developer.apple.com/documentation/safariservices/cre...
    • Saya penasaran ekstensi adblock yang dimaksud di sini yang mana. Misalnya, uBlock menggunakan daftar blokir lokal
    • Bagaimana di seluler?
  • Jika saya pembeli ekstensi berbahaya, bukankah saya cukup mempertahankan nama developer yang sama untuk menghindari ini? Atau Chrome Extension Store mengelola nama developer dengan ketat?

    • Sulit secara praktis mencegah pembuat ekstensi yang tidak jujur menyerahkan kata sandi secara informal kepada pembeli mencurigakan lalu beralasan “ups, ternyata diretas”
      Misalnya, aktor negara yang berniat jahat bisa menawarkan puluhan juta dolar kepada pembuat uBlock untuk memperoleh banyak akses browser. Saya tidak tahu bagaimana keekonomiannya, tetapi ekstensi yang lebih niche bisa menjadi target dengan biaya jauh lebih murah
    • Kemungkinan besar itu pelanggaran Persyaratan Layanan Chrome Web Store
  • Saya penasaran apakah masalah ini lebih parah di Chrome dibandingkan browser lain
    Satu-satunya ekstensi browser yang saya pakai adalah HonorLock, software proctoring ujian, dan saya wajib menggunakannya. Karena ekstensinya hanya untuk Chrome, saya sesekali memakai Chrome karena HonorLock. Kalau membuka tautan instalasi di Safari, muncul pesan untuk memasang Chrome: https://app.honorlock.com/install/extension
    Saya penasaran apakah hanya ekstensi Chrome yang punya karakteristik yang memungkinkan use case HonorLock, sekaligus membuat alat dalam tulisan ini lebih berguna

    • Chrome hanyalah vektor serangan ekstensi yang dipilih karena merupakan browser paling populer
    • Kalau Anda hanya memakai HonorLock, saya tidak tahu bagaimana Anda bisa hidup tanpa AdBlock