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...xyzOutput:
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:
Sebuah aplikasi menawarkan fitur: “Klaim hadiah ke alamat JARINGAN Anda”
Pengguna memasukkan alamat dari jaringan lain
Sistem secara otomatis mengonversinya
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:
Menggunakan kunci publik yang sama
Menurunkan ulang alamat sesuai algoritma jaringan tujuan
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
Posting Komentar