Analisis Kerentanan Compiler Solidity dan Strategi Penanggulangannya
Kompiler adalah salah satu komponen dasar dari sistem komputer modern, yang berfungsi utama untuk mengubah kode sumber bahasa pemrograman tingkat tinggi menjadi kode instruksi yang dapat dieksekusi oleh komputer.
Meskipun sebagian besar pengembang dan profesional keamanan lebih fokus pada keamanan kode aplikasi, keamanan compiler itu sendiri juga tidak boleh diabaikan. Sebagai program komputer, compiler juga dapat memiliki kerentanan keamanan, yang dalam beberapa kasus dapat membawa risiko keamanan yang serius. Misalnya, saat browser mengompilasi dan mengeksekusi kode frontend JavaScript, kerentanan pada mesin pengurai JavaScript dapat menyebabkan pengguna mengalami serangan eksekusi kode jarak jauh saat mengunjungi situs web berbahaya, yang pada akhirnya memungkinkan penyerang mengendalikan browser korban bahkan sistem operasi.
Kompiler Solidity juga tidak terkecuali, ada celah keamanan di beberapa versi kompilernya. Fungsi dari kompilator Solidity adalah untuk mengubah kode kontrak pintar menjadi kode instruksi Ethereum Virtual Machine (EVM), yang akhirnya akan dieksekusi di EVM.
Perlu dicatat bahwa kerentanan compiler Solidity berbeda dari kerentanan EVM itu sendiri. Kerentanan EVM mengacu pada masalah keamanan yang muncul saat mesin virtual mengeksekusi instruksi, yang dapat mempengaruhi seluruh jaringan Ethereum. Sementara kerentanan compiler Solidity adalah masalah yang terjadi saat mengonversi kode Solidity menjadi kode EVM, yang tidak secara langsung mempengaruhi jaringan Ethereum, tetapi dapat menyebabkan kode EVM yang dihasilkan tidak sesuai dengan harapan pengembang.
Salah satu bahaya dari kerentanan compiler Solidity adalah dapat menyebabkan kode EVM yang dihasilkan tidak sesuai dengan harapan pengembang kontrak pintar. Karena kontrak pintar di Ethereum biasanya melibatkan aset cryptocurrency pengguna, setiap bug yang disebabkan oleh compiler dapat mengakibatkan kehilangan aset pengguna, dengan konsekuensi yang serius.
Pengembang dan auditor kontrak seringkali lebih fokus pada implementasi logika kode kontrak dan masalah keamanan di tingkat Solidity, sementara mengabaikan kerentanan compiler. Hanya dengan mengaudit kode sumber kontrak sangat sulit untuk menemukan kerentanan compiler, diperlukan analisis yang menggabungkan versi compiler tertentu dan pola kode tertentu.
Berikut adalah beberapa contoh kerentanan compiler Solidity yang nyata:
SOL-2016-9 HighOrderByteCleanStorage
Kerentanan ini ada di versi awal kompiler Solidity (>=0.1.6 <0.4.4). Dalam beberapa kasus, kompiler tidak membersihkan byte tinggi dengan benar, mengakibatkan bit 1 tinggi ditulis ke storage setelah overflow integer, menimpa nilai variabel yang berdekatan. Perilaku yang tidak konsisten dengan yang diharapkan ini dapat menyebabkan konsekuensi serius dalam hal validasi izin atau akuntansi aset.
SOL-2022-4 Efek Samping Memori InlineAssembly
Vuln ini ada di compiler versi 0.8.13 hingga 0.8.15. Karena masalah strategi optimisasi compiler, dalam beberapa kasus, instruksi penulisan memori dapat dihapus secara keliru, menyebabkan nilai kembalian fungsi tidak sesuai harapan. Bug terkait optimisasi ini sulit ditemukan hanya dengan pemeriksaan kode sederhana.
Kerentanan ini mempengaruhi versi compiler dari 0.5.8 hingga 0.8.16. Saat melakukan operasi abi.encode pada array tipe calldata, compiler secara keliru membersihkan beberapa data, yang mengakibatkan modifikasi data yang berdekatan, sehingga menyebabkan ketidaksesuaian data setelah pengkodean dan pengkodean ulang. Masalah ini juga bisa muncul saat melakukan panggilan eksternal dan mengeluarkan peristiwa, karena operasi ini secara implisit melakukan abi.encode.
Berdasarkan analisis kerentanan compiler Solidity, berikut adalah saran keamanan yang diberikan:
Untuk Pengembang:
Gunakan versi yang lebih baru dari kompiler Solidity, masalah keamanan yang diketahui biasanya lebih sedikit
Memperbaiki kasus pengujian unit, meningkatkan cakupan kode, bermanfaat untuk menemukan masalah yang disebabkan oleh compiler.
Hindari menggunakan assembly inline, operasi decoding dan encoding ABI yang kompleks, serta gunakan fitur baru dan fitur eksperimental dengan hati-hati.
Untuk petugas keamanan:
Pertimbangkan risiko keamanan yang mungkin diperkenalkan oleh kompiler saat audit
Mendorong peningkatan versi compiler dalam proses SDL, mempertimbangkan untuk memperkenalkan pemeriksaan versi otomatis dalam CI/CD
Menilai dampak nyata dari kerentanan compiler berdasarkan situasi spesifik proyek, untuk menghindari kekhawatiran yang berlebihan
Beberapa sumber daya praktis:
Peringatan keamanan resmi yang dirilis oleh Solidity
Daftar bug yang diperbarui secara berkala di repositori Solidity
Daftar bug compiler untuk berbagai versi, dapat digunakan untuk pemeriksaan otomatis
Peringatan kerentanan compiler di halaman kode kontrak Etherscan
Singkatnya, meskipun kerentanan pada compiler Solidity tidak umum, namun dapat membawa konsekuensi serius. Pengembang dan petugas keamanan harus tetap waspada dan mengambil langkah-langkah yang sesuai untuk mengurangi risiko.
Halaman ini mungkin berisi konten pihak ketiga, yang disediakan untuk tujuan informasi saja (bukan pernyataan/jaminan) dan tidak boleh dianggap sebagai dukungan terhadap pandangannya oleh Gate, atau sebagai nasihat keuangan atau profesional. Lihat Penafian untuk detailnya.
21 Suka
Hadiah
21
7
Bagikan
Komentar
0/400
FrogInTheWell
· 9jam yang lalu
Compiler🔨 adalah hal yang mematikan
Lihat AsliBalas0
TokenGuru
· 11jam yang lalu
Tinggalkan +1 ya. Kawan-kawan, kali ini harus hati-hati dengan celah ini. Disarankan untuk memeriksa versi kontrak sebelum memasukkan posisi.
Lihat AsliBalas0
AltcoinAnalyst
· 07-21 10:23
Hati-hati ya, ini adalah masalah lama dari versi 0.8.x
Lihat AsliBalas0
MemecoinResearcher
· 07-21 10:12
rekt menunggu untuk terjadi fr berdasarkan analisis saya (p<0.01)
Lihat AsliBalas0
just_another_wallet
· 07-21 10:12
Pengembang muda segera lihat!
Lihat AsliBalas0
FarmHopper
· 07-21 10:11
Wah, celah ini terlihat menakutkan!
Lihat AsliBalas0
YieldWhisperer
· 07-21 10:10
sudah melihat pola eksploitasi compiler yang sama sejak 2021... para pengembang tidak pernah belajar smh
Analisis Kerentanan Compiler Solidity: Risiko Keamanan dan Cara Menghadapinya
Analisis Kerentanan Compiler Solidity dan Strategi Penanggulangannya
Kompiler adalah salah satu komponen dasar dari sistem komputer modern, yang berfungsi utama untuk mengubah kode sumber bahasa pemrograman tingkat tinggi menjadi kode instruksi yang dapat dieksekusi oleh komputer.
Meskipun sebagian besar pengembang dan profesional keamanan lebih fokus pada keamanan kode aplikasi, keamanan compiler itu sendiri juga tidak boleh diabaikan. Sebagai program komputer, compiler juga dapat memiliki kerentanan keamanan, yang dalam beberapa kasus dapat membawa risiko keamanan yang serius. Misalnya, saat browser mengompilasi dan mengeksekusi kode frontend JavaScript, kerentanan pada mesin pengurai JavaScript dapat menyebabkan pengguna mengalami serangan eksekusi kode jarak jauh saat mengunjungi situs web berbahaya, yang pada akhirnya memungkinkan penyerang mengendalikan browser korban bahkan sistem operasi.
Kompiler Solidity juga tidak terkecuali, ada celah keamanan di beberapa versi kompilernya. Fungsi dari kompilator Solidity adalah untuk mengubah kode kontrak pintar menjadi kode instruksi Ethereum Virtual Machine (EVM), yang akhirnya akan dieksekusi di EVM.
Perlu dicatat bahwa kerentanan compiler Solidity berbeda dari kerentanan EVM itu sendiri. Kerentanan EVM mengacu pada masalah keamanan yang muncul saat mesin virtual mengeksekusi instruksi, yang dapat mempengaruhi seluruh jaringan Ethereum. Sementara kerentanan compiler Solidity adalah masalah yang terjadi saat mengonversi kode Solidity menjadi kode EVM, yang tidak secara langsung mempengaruhi jaringan Ethereum, tetapi dapat menyebabkan kode EVM yang dihasilkan tidak sesuai dengan harapan pengembang.
Salah satu bahaya dari kerentanan compiler Solidity adalah dapat menyebabkan kode EVM yang dihasilkan tidak sesuai dengan harapan pengembang kontrak pintar. Karena kontrak pintar di Ethereum biasanya melibatkan aset cryptocurrency pengguna, setiap bug yang disebabkan oleh compiler dapat mengakibatkan kehilangan aset pengguna, dengan konsekuensi yang serius.
Pengembang dan auditor kontrak seringkali lebih fokus pada implementasi logika kode kontrak dan masalah keamanan di tingkat Solidity, sementara mengabaikan kerentanan compiler. Hanya dengan mengaudit kode sumber kontrak sangat sulit untuk menemukan kerentanan compiler, diperlukan analisis yang menggabungkan versi compiler tertentu dan pola kode tertentu.
Berikut adalah beberapa contoh kerentanan compiler Solidity yang nyata:
Kerentanan ini ada di versi awal kompiler Solidity (>=0.1.6 <0.4.4). Dalam beberapa kasus, kompiler tidak membersihkan byte tinggi dengan benar, mengakibatkan bit 1 tinggi ditulis ke storage setelah overflow integer, menimpa nilai variabel yang berdekatan. Perilaku yang tidak konsisten dengan yang diharapkan ini dapat menyebabkan konsekuensi serius dalam hal validasi izin atau akuntansi aset.
Vuln ini ada di compiler versi 0.8.13 hingga 0.8.15. Karena masalah strategi optimisasi compiler, dalam beberapa kasus, instruksi penulisan memori dapat dihapus secara keliru, menyebabkan nilai kembalian fungsi tidak sesuai harapan. Bug terkait optimisasi ini sulit ditemukan hanya dengan pemeriksaan kode sederhana.
Kerentanan ini mempengaruhi versi compiler dari 0.5.8 hingga 0.8.16. Saat melakukan operasi abi.encode pada array tipe calldata, compiler secara keliru membersihkan beberapa data, yang mengakibatkan modifikasi data yang berdekatan, sehingga menyebabkan ketidaksesuaian data setelah pengkodean dan pengkodean ulang. Masalah ini juga bisa muncul saat melakukan panggilan eksternal dan mengeluarkan peristiwa, karena operasi ini secara implisit melakukan abi.encode.
Berdasarkan analisis kerentanan compiler Solidity, berikut adalah saran keamanan yang diberikan:
Untuk Pengembang:
Untuk petugas keamanan:
Beberapa sumber daya praktis:
Singkatnya, meskipun kerentanan pada compiler Solidity tidak umum, namun dapat membawa konsekuensi serius. Pengembang dan petugas keamanan harus tetap waspada dan mengambil langkah-langkah yang sesuai untuk mengurangi risiko.