Bahaya Konversi Alamat Blockchain: Kesalahan Logika yang Bisa Menghilangkan Aset




Bahaya “Konversi Alamat” di Aplikasi Blockchain: Pelajaran dari Sebuah Temuan



๐Ÿ” Awal Mula Temuan

Saat mempelajari mekanisme alamat pada ekosistem blockchain berbasis Cosmos, saya menemukan pola yang cukup mengkhawatirkan pada salah satu proyek open-source. Proyek tersebut memiliki fungsi yang mengonversi alamat dari satu jaringan ke jaringan lain hanya dengan mengganti awalan (prefix).

Contoh sederhananya:

  • Input: jaringanA1abc...xyz

  • Output: jaringanB1abc...xyz

Yang mengejutkan, unit test pada proyek tersebut menganggap proses ini valid dan benar.


⚠️ Di Mana Letak Masalahnya?

Alamat blockchain seperti cosmos1..., akash1..., dan sejenisnya menggunakan format Bech32, yang terdiri dari:

  • Prefix (HRP) → penanda jaringan

  • Data → representasi hash dari kunci publik

Masalah utamanya adalah asumsi berikut:

๐Ÿ”’ Mengubah prefix tidak berarti alamat baru dikendalikan oleh pengguna yang sama.

Ini bukan sekadar bug teknis, melainkan kesalahan logika bisnis. Sistem memperlakukan dua alamat dari jaringan berbeda sebagai entitas yang sama, padahal secara kriptografi tidak ada keterkaitan kepemilikan.


๐Ÿงช Simulasi Sederhana (Tanpa Eksploitasi)

Untuk memahami dampaknya, saya membuat program sederhana menggunakan Go di lingkungan Termux:

// Contoh konversi prefix (ilustrasi)
alamatAsli := "jaringanA1a6zly...[disensor]"
hrp, data, _ := decodeBech32(alamatAsli)
alamatBaru, _ := encodeBech32("jaringanB", data)
fmt.Println("Hasil konversi:", alamatBaru)

Program tersebut memang berhasil menghasilkan alamat yang secara format terlihat valid. Namun:

Tidak ada jaminan bahwa pengguna memiliki kendali atas alamat tersebut di jaringan tujuan.


๐Ÿ’ฅ Dampak Nyata Jika Digunakan di Lingkungan Produksi

Bayangkan skenario berikut:

  1. Sebuah aplikasi menawarkan fitur: “Klaim hadiah ke alamat JARINGAN Anda”

  2. Pengguna memasukkan alamat dari jaringan lain

  3. Sistem secara otomatis mengonversinya

  4. Dana dikirim ke alamat hasil konversi

Akibatnya:

Aset dikirim ke alamat yang tidak dikendalikan siapa pun.

Saya memverifikasi hasil konversi tersebut melalui explorer publik, dan hasilnya menunjukkan tidak ada riwayat transaksi sama sekali. Ini menandakan alamat tersebut bersifat pasif dan kemungkinan besar tidak dimiliki oleh siapa pun.


๐Ÿ“š Prinsip Keamanan yang Perlu Dipahami

Dokumentasi resmi ekosistem jaringan serta standar Bech32 (BIP-173) menjelaskan dengan tegas bahwa:

“Prefix Bech32 berfungsi sebagai identitas jaringan. Mengubahnya tidak membuat alamat tersebut sah atau dimiliki di jaringan lain.”

Untuk mendapatkan alamat yang benar di jaringan berbeda, langkah yang seharusnya dilakukan adalah:

  1. Menggunakan kunci publik yang sama

  2. Menurunkan ulang alamat sesuai algoritma jaringan tujuan

  3. Mengodekannya kembali ke format Bech32

Bukan sekadar mengganti teks di awal string alamat.


✅ Rekomendasi untuk Pengembang

Bagi pengembang aplikasi multi-chain:

  • Jangan pernah mengasumsikan dua alamat setara hanya berdasarkan struktur string

  • Gunakan metode verifikasi lintas jaringan seperti signed message atau proof on-chain

  • Jika fitur konversi hanya bersifat visual, sertakan peringatan yang jelas, misalnya:

⚠️ Alamat ini hanya untuk ilustrasi dan tidak menjamin kepemilikan di jaringan 

Komentar

Postingan Populer