Bug Firewall Web Anubis Menyebabkan Penolakan Acak pada Perangkat dengan CPU Core Ganjil

Tim Komunitas BigGo
Bug Firewall Web Anubis Menyebabkan Penolakan Acak pada Perangkat dengan CPU Core Ganjil

Satu baris kode JavaScript dalam firewall aplikasi web Anubis telah menyebabkan error respons tidak valid yang misterius bagi pengguna dengan perangkat yang memiliki jumlah core CPU ganjil. Bug ini, yang mempengaruhi smartphone populer seperti Google Pixel 8 Pro dan Samsung Galaxy S24+, menyoroti bagaimana bahkan kelalaian coding terkecil dapat menciptakan frustrasi pengguna yang meluas.

Anubis adalah firewall web yang menggunakan tantangan proof-of-work untuk memverifikasi bahwa pengunjung website adalah browser nyata daripada bot otomatis. Sistem ini membuat klien memecahkan teka-teki kriptografi menggunakan beberapa core CPU untuk membatasi laju koneksi dan memblokir scraper. Namun, asumsi developer bahwa semua perangkat memiliki jumlah core genap menyebabkan masalah yang tidak terduga.

Perangkat yang Diuji oleh Developer Anubis (Semua Jumlah Core Genap):

  • MacBook Pro M3/M4 Max: 16 core
  • AMD Ryzen 9 7950x3D: 32 core
  • Google Pixel 9a: 8 core
  • iPhone 15 Pro Max: 6 core
  • iPad Pro (M1): 8 core
  • Steam Deck: 8 core
  • Core i5 10600: 12 core
  • ROG Ally: 16 core

Matematika di Balik Kekacauan

Kode bermasalah membagi jumlah core CPU dengan dua untuk menentukan berapa banyak worker thread yang akan dibuat: threads = Math.max(navigator.hardwareConcurrency / 2, 1);. Pada perangkat dengan jumlah core ganjil, ini menciptakan angka thread pecahan. Misalnya, 9 core Pixel 8 Pro menghasilkan 4,5 thread, menyebabkan sistem proof-of-work terkadang menghasilkan solusi dengan nonce desimal yang akan ditolak server sebagai tidak valid.

Diskusi komunitas mengungkapkan bahwa banyak pengguna telah mengalami kegagalan acak ini tanpa memahami penyebabnya. Seorang pengguna Samsung Galaxy S24+ mencatat bahwa browsing situs teknologi di mobile telah menjadi menyedihkan selama beberapa bulan terakhir, dengan tantangan Anubis sering gagal atau berjalan buruk.

Perbaikan Kode:

  • Sebelum: threads = Math.max(navigator.hardwareConcurrency / 2, 1);
  • Sesudah: threads = Math.trunc(Math.max(navigator.hardwareConcurrency / 2, 1));
  • Hasil: Pixel 8 Pro sekarang menggunakan 4 worker alih-alih 4,5 worker

Desain CPU Modern Merusak Asumsi Lama

Bug ini mengekspos bagaimana arsitektur prosesor mobile telah berkembang melampaui ekspektasi tradisional. Pixel 8 Pro menggunakan desain core tiga tingkat dengan satu core Cortex X3 performa tinggi, empat core Cortex A715 performa menengah, dan empat core Cortex A510 efisiensi tinggi, total sembilan core. Desain asimetris ini mengoptimalkan daya tahan baterai dan performa tetapi merusak asumsi bahwa prosesor selalu memiliki jumlah core genap.

Anggota komunitas menunjukkan bahwa prosesor core ganjil bukanlah hal yang sepenuhnya baru. AMD menjual chip triple-core Phenom X3 bertahun-tahun yang lalu, dan bahkan konsol game seperti Xbox 360 dan Wii U menggunakan prosesor tiga core. Namun, sebagian besar CPU desktop dan laptop menggunakan simultaneous multithreading (SMT) yang menggandakan jumlah core yang terlihat, menyembunyikan angka ganjil yang mendasarinya.

Arsitektur CPU Google Pixel 8 Pro:

  • Performa tinggi: 1x core Cortex X3 3 GHz
  • Performa menengah: 4x core Cortex A715 2,45 GHz
  • Efisiensi tinggi: 4x core Cortex A510 2,15 GHz
  • Total: 9 core

Perbaikan Sederhana dan Pertanyaan yang Lebih Besar

Developer memperbaiki masalah langsung dengan menambahkan Math.trunc() untuk menghapus bagian desimal: threads = Math.trunc(Math.max(navigator.hardwareConcurrency / 2, 1));. Ini memastikan Pixel 8 Pro sekarang menggunakan 4 worker alih-alih 4,5, mencegah masalah nonce desimal.

Namun, insiden ini telah memicu perdebatan yang lebih luas tentang sistem proof-of-work untuk deteksi bot. Kritikus berpendapat bahwa tantangan ini membebankan biaya komputasi yang sama pada pengguna sah dan scraper, tanpa asimetri nyata untuk dieksploitasi. Seperti yang dicatat seorang anggota komunitas, scraper canggih dapat dengan mudah beradaptasi untuk mengatasi hambatan tersebut, sementara beban utama jatuh pada pengguna nyata dengan perangkat yang lebih lambat.

Anda membebankan biaya yang persis sama pada pengguna sah seperti halnya pada scraper. Ekonomi skala berarti bahwa biaya marjinal untuk musuh Anda sebenarnya secara signifikan lebih rendah daripada untuk pengguna nyata Anda.

Developer sekarang mempertimbangkan pendekatan alternatif seperti tantangan Proof of React yang memerlukan eksekusi framework JavaScript spesifik daripada kekuatan komputasi mentah. Mereka juga menjelajahi pesan error terenkripsi untuk membantu pengguna dan administrator men-debug masalah masa depan dengan lebih baik.

Bug ini berfungsi sebagai pengingat bahwa bahkan developer berpengalaman dapat membuat asumsi yang salah tentang hardware. Seiring desain CPU menjadi lebih beragam dan kompleks, terutama di perangkat mobile, software perlu beradaptasi untuk menangani variasi ini dengan baik.

Referensi: Sometimes CPU cores are odd