rounded

Web3.0 adalah era baru di mana peluang inovasi dan tantangan keamanan hidup berdampingan. Ini menghadirkan konsep-konsep baru seperti teknologi blockchain, kontrak pintar, DeFi, dan DePIN, tetapi juga menghadirkan berbagai serangan berbahaya, celah, penipuan, dan masalah keamanan lainnya. Di sisi lain, karena produk Web3.0 saat ini sering kali menggabungkan banyak elemen Web2.0, risiko keamanan Web2.0 tradisional juga menjadi faktor penting yang mengancam dunia Web3.0.

Sebagai badan keamanan Web 3.0 terkemuka di dunia, tim CertiK telah secara proaktif memperhatikan berbagai potensi risiko asli dan turunan, melindungi ribuan pelanggan dari kerugian.

Pada artikel ini, kami akan mengajak Anda memahami bagaimana tim CertiK menemukan dan memecahkan kerentanan Web2.0 di WalletConnect, sebuah protokol Web3.0 yang umum.

WalletConnect dan VerifyAPI​

WalletConnect adalah salah satu protokol sumber terbuka terpopuler untuk Web3.0, digunakan untuk menghubungkan berbagai dApps dengan dompet terdesentralisasi. Pengguna dapat membuat koneksi baru dengan memindai kode QR yang disediakan oleh dApp. Meskipun kode QR akan menampilkan informasi detail seperti nama, ikon, dan sumber dApp, informasi ini disediakan secara sepihak oleh dApp dan tidak perlu diverifikasi oleh dompet. Oleh karena itu, terdapat risiko serangan phishing juga alasan mengapa banyak perusahaan keamanan termasuk CertiK Masalah yang menjadi fokus tim.

Untuk tujuan ini, WalletConnect meluncurkan "VerifyAPI".

"VerifyAPI" adalah langkah peningkatan keamanan proaktif yang diluncurkan oleh WalletConnect untuk dompet yang terintegrasi dengannya. Ini akan memperingatkan pengguna tentang nama domain mencurigakan atau berbahaya yang mereka coba sambungkan, sehingga mencegah serangan phishing. API ini menggunakan registri nama domain WalletConnect dan pemindai nama domain Blowfish untuk memeriksa permintaan koneksi. Saat pengguna mencoba terhubung ke dApp, VerifyAPI mengizinkan dompet menampilkan empat status untuk membantu pengguna menilai keamanan nama domain dan mengidentifikasi potensi risiko.


Temukan kerentanan

Kerentanan dalam protokol WalletConnect secara tidak sengaja ditemukan oleh tim saat melakukan pengujian penetrasi rutin untuk produk klien. Selama tahap awal uji penetrasi, tim biasanya menjalani proses eksplorasi komprehensif untuk memahami fungsionalitas aplikasi dan berbagai layanan yang berinteraksi dengannya. Dalam hal ini, aplikasi web produk pelanggan menggunakan WalletConnect. Pemantauan lalu lintas HTTP kami menangkap informasi tentang permintaan yang dibuat ke titik akhir WalletConnect, dan satu permintaan khususnya menarik perhatian kami.

Sebelum kita mempelajari detail spesifik dari kerentanan ini, mari kita lihat alur kerja permintaan HTTP VerifyAPI dari sudut pandang dApp:

1. WalletConnectSDK yang tertanam mengirimkan permintaan ke verifikasi.walletconnect.com dan menyertakan ID proyek di jalurnya. Jika ID sudah terdaftar di WalletConnect, server akan membalas dengan link ke file index.js dan tag CSRF.

2. Kemudian, SDK akan melakukan permintaan GET dan menggunakan jalur yang diperoleh sebelumnya dan tag CSRF untuk mendapatkan cuplikan kode JavaScript untuk memverifikasi permintaan tersebut.

3. Setelah pengguna mengonfirmasi koneksi ke dompet melalui WalletConnect dan membuat kode QR, SDK akan mengirimkan permintaan POST ke titik akhir /attestation, mencocokkan id, dan menyelesaikan penyiapan dApp awal.

Saat memeriksa respons HTTP, kami melihat bahwa isi HTML berisi nilai tag yang disematkan langsung ke blok kode JavaScript. Bagi pakar keamanan Web 2.0 yang berpengalaman, pola ini menunjukkan potensi kerentanan terhadap serangan injeksi HTML atau XSS (skrip lintas situs). Untuk memverifikasi dugaan ini, kami mengubah nilai tag dalam permintaan di atas menjadi payload XSS <svg/onload=alert(document.domain)>, dan skrip berhasil dijalankan, yang berarti kerentanan XSS memang ada. https://verify.walletconnect.com/index.js?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9

XSS adalah serangan injeksi yang dapat menyematkan skrip berbahaya di situs web tepercaya.

Dalam aplikasi Web 2.0, penyerang biasanya mengeksploitasi kerentanan XSS untuk mengakses cookie pengguna dan membajak sesi jaringan dan kontrol akun pengguna. Serangan lainnya termasuk mengarahkan pengguna ke situs web berbahaya atau membuat permintaan tidak sah. Di lingkungan Web3.0, serangan XSS dapat memanipulasi koneksi dompet terdesentralisasi, mengelabui pengguna agar menandatangani transaksi berbahaya, dan dengan demikian mencuri aset.

Kami kemudian melakukan penyelidikan lebih lanjut terhadap masalah XSS, termasuk menguji berbagai muatan untuk menilai apakah kerentanan ini dapat berkembang menjadi risiko yang lebih serius seperti injeksi SQL atau eksekusi kode jarak jauh.

VerifyAPI adalah kode sumber terbuka, dan setelah melihat kodenya, kami memahami akar penyebab kerentanan XSS - kerentanan berasal dari cara fungsi validasi_format memverifikasi format nilai tag.

jika!CsrfToken::validasi_format(&query.token){

Meskipun memeriksa apakah nilai tag memiliki header JWT yang valid, ia tidak memeriksa keseluruhan nilai tag secara menyeluruh, sehingga penyerang masih dapat melakukan serangan XSS dengan menambahkan payload ke nilai tag JWT.

fnvalidasi_format(s:&str)->bool{jsonwebtoken::decode_header(s).adalah_ok()}

Bukti konsep

Untuk memverifikasi potensi ancaman, tim keamanan kami membuat payload demonstrasi menggunakan kerentanan XSS di atas. Setelah digunakan di situs web phishing, pengguna akan menerima perintah otorisasi aset. Jika mereka mengklik konfirmasi tanpa memeriksa data transaksi dengan cermat, kendali atas aset akan diberikan kepada penyerang.

Karena pengguna masih melihat nama domain https://verify.walletconnect.com/, tingkat kewaspadaan terhadap tanda tangan transaksi akan sangat berkurang. Untuk pengguna non-profesional, sulit untuk memverifikasi semua detail transaksi, dan mereka mungkin secara tidak sengaja menandatangani transaksi berbahaya sehingga menyebabkan kerugian.

Di sisi lain, penelitian kami tidak menemukan cara untuk memperkuat dampak kerentanan ini, seperti mengganggu modul WalletConnect lainnya atau memulai tindakan pengguna pasif.

larutan

Setelah mendeteksi kerentanan XSS, tim kami segera memberikan laporan rinci kepada tim WalletConnect. Tim WalletConnect dengan cepat mengonfirmasi temuan kami dan mengembangkan garis waktu untuk menyelesaikan masalah tersebut.

Solusi WalletConnect mencakup memperbarui fungsi validasi_format. Pembaruan ini menggunakan pendekatan daftar putih, yang hanya memperbolehkan huruf, angka, dan simbol -, ., dan _ dalam nilai tag. Meskipun injeksi teks secara teori masih memungkinkan, pembaruan penting ini secara signifikan mengurangi risiko serangan XSS.

garis waktu

14 Oktober 2023: CertiK melaporkan kerentanan pada WalletConnect.

16 Oktober 2023: WalletConnect mengonfirmasi penerimaan laporan dan mengakui masalahnya.

20 Oktober 2023: WalletConnect memperbarui kode sumber dan memasukkannya ke VerifyAPI.

20 Oktober 2023: CertiK mengonfirmasi bahwa masalah XSS telah diatasi.

tulis di akhir

Kejadian ini mengingatkan kita: kerentanan khusus Web 2.0 tidak hanya akan bertahan di lingkungan Web 3.0, namun juga akan terus berkembang dan menimbulkan ancaman keamanan yang lebih besar dalam bentuk yang lebih baru. Oleh karena itu, perlindungan aktif sangatlah penting. Audit rutin, pengujian penetrasi, penilaian kerentanan yang cermat, dan tindak lanjut tren keamanan terkini secara real-time agar tetap berada di depan penyerang adalah praktik terbaik bagi perusahaan Web 3.0 untuk melindungi keamanan. Bagi pengguna DeFi, sangat penting untuk tetap waspada setiap saat.

  • Pastikan untuk memverifikasi dengan cermat URL situs web atau platform, terutama angka dan huruf yang terlihat mirip. Penipu sering kali menipu pengguna melalui URL palsu.

  • Saat melakukan transaksi, harap tinjau semua detail transaksi dengan cermat. Dari waktu ke waktu, aplikasi dompet akan meluncurkan tip baru untuk penipuan baru. Pastikan Anda memahami semua perintah dompet dan mengonfirmasi keakuratan alamat target sebelum mengklik Konfirmasi.

Dalam artikel ini, kami memperkenalkan secara rinci kerentanan XSS yang ditemukan di VerifyAPI WalletConnect dan dampaknya, dengan menekankan risiko keamanan yang ditimbulkan oleh serangan Web2.0 di lingkungan Web3.0. Terima kasih kepada tim WalletConnect atas respons cepat dan remediasi yang efektif, yang mencerminkan rasa tanggung jawab mereka yang kuat terhadap keamanan pengguna dan industri Web3.0.