Analisis Kerentanan Compiler Solidity dan Strategi Penanganannya
Kompilator adalah bagian penting dari sistem komputer modern, yang berfungsi untuk mengubah kode sumber bahasa pemrograman tingkat tinggi menjadi kode instruksi yang dapat dieksekusi oleh komputer. Dibandingkan dengan kode aplikasi, keamanan kompilator itu sendiri sering kali diabaikan. Namun, kerentanan kompilator dalam beberapa kasus dapat membawa risiko keamanan yang serius.
Fungsi utama dari compiler Solidity adalah mengubah kode kontrak pintar menjadi instruksi Ethereum Virtual Machine (EVM). Berbeda dengan kerentanan EVM itu sendiri, kerentanan compiler Solidity lebih mempengaruhi pengembang kontrak pintar dan tidak secara langsung membahayakan keamanan jaringan Ethereum.
Kerentanan compiler dapat menyebabkan kode EVM yang dihasilkan tidak sesuai dengan harapan pengembang. Karena kontrak pintar biasanya melibatkan aset cryptocurrency, setiap bug yang disebabkan oleh compiler dapat mengakibatkan kerugian aset pengguna. Hanya dengan audit kode sumber kontrak sulit untuk menemukan masalah semacam ini, diperlukan analisis yang menggabungkan versi compiler tertentu dan pola kode.
Contoh Kerentanan Compiler Solidity
SOL-2016-9 HighOrderByteCleanStorage
Kerentanan ini ada pada versi awal compiler Solidity (>=0.1.6 <0.4.4). Dalam beberapa kasus, variabel storage mungkin secara tidak sengaja dimodifikasi, yang mengakibatkan nilai pengembalian fungsi tidak sesuai dengan yang diharapkan. Ketidaksesuaian ini dapat menyebabkan konsekuensi serius ketika melibatkan verifikasi izin atau akuntansi aset.
Penyebab terjadinya kerentanan adalah karena kompiler tidak membersihkan data tinggi dengan benar saat memproses tipe data di bawah 32 byte, yang mengakibatkan saat overflow integer, data tinggi ditulis salah ke variabel yang berdekatan.
SOL-2022-4 InlineAssemblyMemorySideEffects
Kerentanan ini mempengaruhi versi compiler >=0.8.13 <0.8.15. Masalahnya berasal dari penanganan yang salah terhadap operasi memori selama proses optimasi compiler. Dalam beberapa kasus, compiler secara keliru menghapus instruksi penulisan memori yang tampaknya redundan, yang mengakibatkan nilai kembali fungsi yang tidak normal.
Kerentanan ini ada di compiler versi >= 0.5.8 < 0.8.16. Saat melakukan operasi abi.encode pada array tipe calldata, compiler secara keliru membersihkan beberapa data, menyebabkan data bersebelahan diubah, yang mengakibatkan ketidaksesuaian data setelah pengkodean dan pengkodean ulang.
Perlu dicatat bahwa saat melakukan panggilan eksternal dan mengeluarkan peristiwa, akan secara implisit dilakukan abi.encode, sehingga dampak dari kerentanan ini mungkin lebih luas dari yang diperkirakan.
Saran Keamanan
Terkait dengan kerentanan compiler Solidity, tim keamanan blockchain Cobo mengusulkan saran berikut:
Untuk pengembang:
Gunakan versi terbaru dari compiler Solidity
Memperbaiki kasus uji unit, meningkatkan cakupan kode
Hindari penggunaan assembly inline, operasi pengkodean dan penguraian ABI yang kompleks, dan gunakan fitur baru serta fitur eksperimental dengan hati-hati.
Untuk petugas keamanan:
Perhatikan risiko keamanan yang mungkin diperkenalkan oleh compiler saat audit
Mendorong peningkatan versi compiler dalam proses pengembangan, mempertimbangkan untuk memperkenalkan pemeriksaan versi otomatis dalam CI/CD
Menilai dampak keamanan nyata dari kerentanan compiler berdasarkan proyek tertentu
Sumber Daya Praktis:
Blog Peringatan Keamanan Resmi Solidity
Daftar bug di repositori GitHub Solidity
Daftar bug compiler untuk berbagai versi
Peringatan kerentanan compiler di halaman kode kontrak Etherscan
Singkatnya, pengembang dan petugas keamanan harus memperhatikan risiko yang mungkin ditimbulkan oleh kerentanan compiler Solidity, serta mengambil langkah-langkah yang sesuai untuk mengurangi risiko keamanan. Selain itu, mereka juga harus mengevaluasi dampak secara objektif untuk menghindari kepanikan berlebihan.
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.
11 Suka
Hadiah
11
4
Bagikan
Komentar
0/400
AirdropChaser
· 13jam yang lalu
Sekali lagi alasan untuk play people for suckers muncul.
Lihat AsliBalas0
BearMarketBuilder
· 13jam yang lalu
Sigh, seharian mengembangkan, hanya takut hal ini.
Lihat AsliBalas0
TeaTimeTrader
· 13jam yang lalu
Apakah literatur menyalahkan compiler masih berlaku?
Lihat AsliBalas0
0xOverleveraged
· 13jam yang lalu
Compiler rumput tidak dapat diandalkan, apa yang bisa dimainkan dengan kontrak?
Analisis Kerentanan Compiler Solidity: Risiko Potensial yang Tidak Boleh Diabaikan oleh Pengembang
Analisis Kerentanan Compiler Solidity dan Strategi Penanganannya
Kompilator adalah bagian penting dari sistem komputer modern, yang berfungsi untuk mengubah kode sumber bahasa pemrograman tingkat tinggi menjadi kode instruksi yang dapat dieksekusi oleh komputer. Dibandingkan dengan kode aplikasi, keamanan kompilator itu sendiri sering kali diabaikan. Namun, kerentanan kompilator dalam beberapa kasus dapat membawa risiko keamanan yang serius.
Fungsi utama dari compiler Solidity adalah mengubah kode kontrak pintar menjadi instruksi Ethereum Virtual Machine (EVM). Berbeda dengan kerentanan EVM itu sendiri, kerentanan compiler Solidity lebih mempengaruhi pengembang kontrak pintar dan tidak secara langsung membahayakan keamanan jaringan Ethereum.
Kerentanan compiler dapat menyebabkan kode EVM yang dihasilkan tidak sesuai dengan harapan pengembang. Karena kontrak pintar biasanya melibatkan aset cryptocurrency, setiap bug yang disebabkan oleh compiler dapat mengakibatkan kerugian aset pengguna. Hanya dengan audit kode sumber kontrak sulit untuk menemukan masalah semacam ini, diperlukan analisis yang menggabungkan versi compiler tertentu dan pola kode.
Contoh Kerentanan Compiler Solidity
SOL-2016-9 HighOrderByteCleanStorage
Kerentanan ini ada pada versi awal compiler Solidity (>=0.1.6 <0.4.4). Dalam beberapa kasus, variabel storage mungkin secara tidak sengaja dimodifikasi, yang mengakibatkan nilai pengembalian fungsi tidak sesuai dengan yang diharapkan. Ketidaksesuaian ini dapat menyebabkan konsekuensi serius ketika melibatkan verifikasi izin atau akuntansi aset.
Penyebab terjadinya kerentanan adalah karena kompiler tidak membersihkan data tinggi dengan benar saat memproses tipe data di bawah 32 byte, yang mengakibatkan saat overflow integer, data tinggi ditulis salah ke variabel yang berdekatan.
SOL-2022-4 InlineAssemblyMemorySideEffects
Kerentanan ini mempengaruhi versi compiler >=0.8.13 <0.8.15. Masalahnya berasal dari penanganan yang salah terhadap operasi memori selama proses optimasi compiler. Dalam beberapa kasus, compiler secara keliru menghapus instruksi penulisan memori yang tampaknya redundan, yang mengakibatkan nilai kembali fungsi yang tidak normal.
SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup
Kerentanan ini ada di compiler versi >= 0.5.8 < 0.8.16. Saat melakukan operasi abi.encode pada array tipe calldata, compiler secara keliru membersihkan beberapa data, menyebabkan data bersebelahan diubah, yang mengakibatkan ketidaksesuaian data setelah pengkodean dan pengkodean ulang.
Perlu dicatat bahwa saat melakukan panggilan eksternal dan mengeluarkan peristiwa, akan secara implisit dilakukan abi.encode, sehingga dampak dari kerentanan ini mungkin lebih luas dari yang diperkirakan.
Saran Keamanan
Terkait dengan kerentanan compiler Solidity, tim keamanan blockchain Cobo mengusulkan saran berikut:
Untuk pengembang:
Untuk petugas keamanan:
Sumber Daya Praktis:
Singkatnya, pengembang dan petugas keamanan harus memperhatikan risiko yang mungkin ditimbulkan oleh kerentanan compiler Solidity, serta mengambil langkah-langkah yang sesuai untuk mengurangi risiko keamanan. Selain itu, mereka juga harus mengevaluasi dampak secara objektif untuk menghindari kepanikan berlebihan.