Analisis Kerentanan Compiler Solidity dan Tindakan Penanganannya
Kompiler adalah salah satu komponen dasar dari sistem komputer modern, fungsinya adalah mengubah kode sumber bahasa pemrograman tingkat tinggi menjadi kode instruksi yang dapat dieksekusi oleh komputer. Meskipun pengembang dan personel keamanan biasanya memperhatikan keamanan kode aplikasi program, kompilernya sendiri sebagai program komputer juga mungkin memiliki kerentanan keamanan, yang dalam beberapa kasus dapat membawa risiko keamanan yang serius.
Fungsi kompilator Solidity adalah mengubah kode kontrak pintar menjadi kode instruksi Ethereum Virtual Machine (EVM). Berbeda dengan kerentanan EVM itu sendiri, kerentanan kompilator Solidity terutama terletak pada kemungkinan masalah saat mengubah Solidity menjadi kode EVM, yang tidak akan langsung mempengaruhi jaringan Ethereum itu sendiri, tetapi dapat menyebabkan kode EVM yang dihasilkan tidak sesuai dengan yang diharapkan oleh pengembang.
Berikut adalah beberapa contoh kerentanan compiler Solidity yang nyata:
SOL-2016-9 HighOrderByteCleanStorage:
Vulnerabilitas ini ada di versi awal compiler Solidity (>=0.1.6 <0.4.4). Karena compiler tidak membersihkan bit tinggi dengan benar saat menangani overflow integer, ini dapat menyebabkan variabel yang berdekatan secara tidak sengaja dimodifikasi.
SOL-2022-4 InlineAssemblyMemorySideEffects:
Vuln ini ada di compiler versi 0.8.13 hingga 0.8.15. Karena optimisasi kompilasi yang menganalisis blok assembly tunggal, mungkin secara keliru menghapus instruksi penulisan memori yang tampaknya redundan tetapi sebenarnya berguna.
SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup:
Kerentanan ini mempengaruhi compiler versi 0.5.8 hingga 0.8.16. Saat melakukan operasi abi.encode pada array tipe calldata, beberapa data dibersihkan secara salah yang mengakibatkan data yang bersebelahan dimodifikasi.
Terkait kerentanan pada compiler Solidity, tim keamanan blockchain Cobo mengajukan saran berikut:
Untuk Pengembang:
Gunakan versi terbaru dari compiler Solidity
Menyempurnakan kasus uji unit
Hindari menggunakan inline assembly, operasi pengkodean dan pengkodean ABI yang kompleks, dll.
Untuk petugas keamanan:
Pertimbangkan risiko keamanan yang mungkin diperkenalkan oleh kompilator saat audit
Mendesak untuk memperbarui versi compiler dalam proses pengembangan
Mengevaluasi dampak keamanan nyata dari kerentanan compiler berdasarkan situasi spesifik
Beberapa sumber daya praktis:
Peringatan Keamanan Resmi Solidity
Daftar bug di repositori GitHub Solidity
Daftar bug compiler untuk setiap versi
Peringatan keamanan di halaman kode kontrak Etherscan
Singkatnya, pengembang dan personel keamanan harus memperhatikan risiko keamanan yang mungkin ditimbulkan oleh kerentanan compiler Solidity, dengan meningkatkan compiler, menyempurnakan pengujian, dan langkah-langkah lain untuk mengurangi risiko terkait.
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.
24 Suka
Hadiah
24
6
Bagikan
Komentar
0/400
StakeWhisperer
· 07-21 09:21
Sudah ikuti bug compiler? Pemula ini lucu sekali
Lihat AsliBalas0
OnchainGossiper
· 07-21 06:50
Baru saja memperbaiki celah, datang lagi yang baru... mengangkat tangan
Lihat AsliBalas0
blockBoy
· 07-20 10:39
Ini adalah masalah yang sangat sulit... Siapa yang bisa benar-benar menyelesaikannya?
Lihat AsliBalas0
BearMarketSage
· 07-20 10:39
Mengembangkan tetapi tidak dapat menguji kontrak sendiri?
Analisis Kerentanan Compiler Solidity dan Strategi Penanganannya
Analisis Kerentanan Compiler Solidity dan Tindakan Penanganannya
Kompiler adalah salah satu komponen dasar dari sistem komputer modern, fungsinya adalah mengubah kode sumber bahasa pemrograman tingkat tinggi menjadi kode instruksi yang dapat dieksekusi oleh komputer. Meskipun pengembang dan personel keamanan biasanya memperhatikan keamanan kode aplikasi program, kompilernya sendiri sebagai program komputer juga mungkin memiliki kerentanan keamanan, yang dalam beberapa kasus dapat membawa risiko keamanan yang serius.
Fungsi kompilator Solidity adalah mengubah kode kontrak pintar menjadi kode instruksi Ethereum Virtual Machine (EVM). Berbeda dengan kerentanan EVM itu sendiri, kerentanan kompilator Solidity terutama terletak pada kemungkinan masalah saat mengubah Solidity menjadi kode EVM, yang tidak akan langsung mempengaruhi jaringan Ethereum itu sendiri, tetapi dapat menyebabkan kode EVM yang dihasilkan tidak sesuai dengan yang diharapkan oleh pengembang.
Berikut adalah beberapa contoh kerentanan compiler Solidity yang nyata:
SOL-2016-9 HighOrderByteCleanStorage: Vulnerabilitas ini ada di versi awal compiler Solidity (>=0.1.6 <0.4.4). Karena compiler tidak membersihkan bit tinggi dengan benar saat menangani overflow integer, ini dapat menyebabkan variabel yang berdekatan secara tidak sengaja dimodifikasi.
SOL-2022-4 InlineAssemblyMemorySideEffects: Vuln ini ada di compiler versi 0.8.13 hingga 0.8.15. Karena optimisasi kompilasi yang menganalisis blok assembly tunggal, mungkin secara keliru menghapus instruksi penulisan memori yang tampaknya redundan tetapi sebenarnya berguna.
SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup: Kerentanan ini mempengaruhi compiler versi 0.5.8 hingga 0.8.16. Saat melakukan operasi abi.encode pada array tipe calldata, beberapa data dibersihkan secara salah yang mengakibatkan data yang bersebelahan dimodifikasi.
Terkait kerentanan pada compiler Solidity, tim keamanan blockchain Cobo mengajukan saran berikut:
Untuk Pengembang:
Untuk petugas keamanan:
Beberapa sumber daya praktis:
Singkatnya, pengembang dan personel keamanan harus memperhatikan risiko keamanan yang mungkin ditimbulkan oleh kerentanan compiler Solidity, dengan meningkatkan compiler, menyempurnakan pengujian, dan langkah-langkah lain untuk mengurangi risiko terkait.