Analisis Kerentanan Kompiler Solidity dan Strategi Penanggulangannya
Kompiler adalah salah satu komponen dasar sistem komputer modern, yang fungsi utamanya adalah mengubah kode sumber bahasa pemrograman tingkat tinggi menjadi kode instruksi yang dapat dieksekusi oleh komputer. Dibandingkan dengan keamanan kode aplikasi, masalah keamanan kompilator itu sendiri seringkali diabaikan. Namun, kerentanan pada kompilator dalam skenario tertentu juga dapat membawa risiko keamanan yang serius.
Fungsi compiler Solidity adalah untuk mengubah kode kontrak pintar menjadi kode instruksi (EVM) yang dapat dijalankan di Ethereum Virtual Machine. Berbeda dengan kerentanan EVM itu sendiri, kerentanan compiler Solidity tidak akan langsung mempengaruhi jaringan Ethereum, tetapi dapat menyebabkan kode EVM yang dihasilkan tidak sesuai dengan harapan pengembang, sehingga mempengaruhi operasi normal kontrak pintar, yang berpotensi menyebabkan kerugian aset pengguna.
Berikut adalah beberapa contoh nyata dari kerentanan compiler Solidity:
SOL-2016-9 HighOrderByteCleanStorage
Kerentanan ini ada di versi sebelumnya dari kompiler Solidity (>=0.1.6 <0.4.4). Karena kompiler tidak membersihkan bit tinggi dengan benar saat menangani overflow integer, ini dapat menyebabkan nilai variabel yang berdekatan terubah secara tidak sengaja.
SOL-2022-4 InlineAssemblyMemorySideEffects
Kerentanan ini ada di dalam versi 0.8.13 hingga 0.8.15 dari kompiler. Karena masalah pada strategi optimasi kompiler, mungkin akan secara keliru menghapus instruksi penulisan memori dalam assembly inline, yang menyebabkan perilaku program tidak sesuai dengan yang diharapkan.
Vuln ini memengaruhi versi compiler dari 0.5.8 hingga 0.8.16. Saat melakukan operasi abi.encode pada array tipe calldata, mungkin secara tidak sengaja mengubah data yang berdekatan, menyebabkan ketidakkonsistenan data setelah pengkodean dan pengkodean ulang.
Untuk kerentanan compiler Solidity, disarankan kepada pengembang:
Gunakan versi baru dari compiler Solidity
Memperbaiki kasus pengujian unit, meningkatkan cakupan kode
Usahakan untuk menghindari penggunaan fitur bahasa yang kompleks, seperti inline assembly, ABI encoding dan decoding untuk array multidimensi, dll.
Untuk auditor keamanan, disarankan:
Pertimbangkan risiko keamanan yang mungkin diperkenalkan oleh kompiler selama proses audit.
Mendorong tim pengembang untuk memperbarui versi compiler dalam proses SDL
Memperkenalkan pemeriksaan otomatis versi compiler dalam CI/CD
Perlu dicatat bahwa sebagian besar kerentanan kompiler hanya dipicu dalam pola kode tertentu, sehingga menggunakan versi kompiler yang rentan tidak berarti kontrak pasti memiliki risiko keamanan, dampak sebenarnya perlu dievaluasi secara spesifik.
Untuk terus memperhatikan masalah keamanan compiler Solidity, Anda dapat merujuk ke sumber daya berikut:
Peringatan keamanan yang dirilis oleh tim Solidity
Daftar bug di repo resmi Solidity
Daftar bug untuk berbagai versi compiler
Peringatan keamanan di halaman kode kontrak di Etherscan
Dengan memperhatikan keamanan compiler, menggunakan fitur bahasa dengan bijak, dan tetap waspada, pengembang dan personel keamanan dapat lebih baik menjaga keamanan kontrak pintar.
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.
15 Suka
Hadiah
15
5
Bagikan
Komentar
0/400
ConsensusBot
· 21jam yang lalu
Siapa yang akan membawa panci ini?
Lihat AsliBalas0
RebaseVictim
· 21jam yang lalu
Astaga, masih berani menggunakan compiler versi lama.
Analisis Kerentanan Compiler Solidity dan Strategi Penanggulangannya
Analisis Kerentanan Kompiler Solidity dan Strategi Penanggulangannya
Kompiler adalah salah satu komponen dasar sistem komputer modern, yang fungsi utamanya adalah mengubah kode sumber bahasa pemrograman tingkat tinggi menjadi kode instruksi yang dapat dieksekusi oleh komputer. Dibandingkan dengan keamanan kode aplikasi, masalah keamanan kompilator itu sendiri seringkali diabaikan. Namun, kerentanan pada kompilator dalam skenario tertentu juga dapat membawa risiko keamanan yang serius.
Fungsi compiler Solidity adalah untuk mengubah kode kontrak pintar menjadi kode instruksi (EVM) yang dapat dijalankan di Ethereum Virtual Machine. Berbeda dengan kerentanan EVM itu sendiri, kerentanan compiler Solidity tidak akan langsung mempengaruhi jaringan Ethereum, tetapi dapat menyebabkan kode EVM yang dihasilkan tidak sesuai dengan harapan pengembang, sehingga mempengaruhi operasi normal kontrak pintar, yang berpotensi menyebabkan kerugian aset pengguna.
Berikut adalah beberapa contoh nyata dari kerentanan compiler Solidity:
Kerentanan ini ada di versi sebelumnya dari kompiler Solidity (>=0.1.6 <0.4.4). Karena kompiler tidak membersihkan bit tinggi dengan benar saat menangani overflow integer, ini dapat menyebabkan nilai variabel yang berdekatan terubah secara tidak sengaja.
Kerentanan ini ada di dalam versi 0.8.13 hingga 0.8.15 dari kompiler. Karena masalah pada strategi optimasi kompiler, mungkin akan secara keliru menghapus instruksi penulisan memori dalam assembly inline, yang menyebabkan perilaku program tidak sesuai dengan yang diharapkan.
Vuln ini memengaruhi versi compiler dari 0.5.8 hingga 0.8.16. Saat melakukan operasi abi.encode pada array tipe calldata, mungkin secara tidak sengaja mengubah data yang berdekatan, menyebabkan ketidakkonsistenan data setelah pengkodean dan pengkodean ulang.
Untuk kerentanan compiler Solidity, disarankan kepada pengembang:
Untuk auditor keamanan, disarankan:
Perlu dicatat bahwa sebagian besar kerentanan kompiler hanya dipicu dalam pola kode tertentu, sehingga menggunakan versi kompiler yang rentan tidak berarti kontrak pasti memiliki risiko keamanan, dampak sebenarnya perlu dievaluasi secara spesifik.
Untuk terus memperhatikan masalah keamanan compiler Solidity, Anda dapat merujuk ke sumber daya berikut:
Dengan memperhatikan keamanan compiler, menggunakan fitur bahasa dengan bijak, dan tetap waspada, pengembang dan personel keamanan dapat lebih baik menjaga keamanan kontrak pintar.