Compiler adalah salah satu komponen dasar dari sistem komputer modern, fungsinya yang utama adalah mengubah kode sumber bahasa pemrograman tingkat tinggi menjadi kode instruksi yang dapat dieksekusi oleh komputer. Meskipun sebagian besar pengembang dan petugas keamanan biasanya akan fokus pada keamanan kode aplikasi program, keamanan compiler itu sendiri sering kali diabaikan. Faktanya, compiler sebagai program komputer juga dapat memiliki kerentanan keamanan, yang dalam beberapa kasus dapat membawa risiko keamanan yang serius.
Misalnya, selama proses pemrosesan kode JavaScript oleh browser, kerentanan pada mesin pemrosesan JavaScript dapat menyebabkan pengguna mengalami serangan eksekusi kode jarak jauh saat mengunjungi situs web berbahaya, yang pada akhirnya dapat menyebabkan penyerang mengendalikan browser korban bahkan sistem operasi. Selain itu, penelitian menunjukkan bahwa bug pada compiler Clang C++ juga dapat memicu konsekuensi serius seperti eksekusi kode jarak jauh.
Kompiler Solidity juga memiliki celah keamanan. Menurut peringatan keamanan yang dirilis oleh tim pengembang Solidity, terdapat risiko keamanan di beberapa versi kompilator Solidity. Fungsi dari kompilator Solidity adalah mengubah kode kontrak pintar menjadi kode instruksi Ethereum Virtual Machine (EVM), yang akhirnya diunggah melalui transaksi ke Ethereum dan dieksekusi oleh EVM.
Perlu diperhatikan bahwa kerentanan pada compiler Solidity berbeda dengan kerentanan yang ada pada EVM itu sendiri. Kerentanan EVM mengacu pada masalah keamanan yang muncul saat mesin virtual mengeksekusi instruksi, yang dapat mempengaruhi seluruh jaringan Ethereum. Sedangkan kerentanan pada compiler Solidity merujuk pada masalah yang ada saat compiler mengubah kode Solidity menjadi kode EVM, yang tidak akan langsung mempengaruhi jaringan Ethereum itu sendiri.
Kerentanan pada compiler Solidity dapat menyebabkan kode EVM yang dihasilkan tidak sesuai dengan harapan pengembang. Karena kontrak pintar di Ethereum sering melibatkan aset cryptocurrency pengguna, maka setiap bug yang disebabkan oleh compiler dapat menyebabkan kehilangan aset pengguna, yang merupakan konsekuensi yang serius. Pengembang dan auditor kontrak biasanya fokus pada implementasi logika kontrak dan masalah keamanan umum, sementara kerentanan compiler sulit ditemukan hanya melalui audit kode sumber, yang memerlukan analisis bersama dengan versi compiler tertentu dan pola kode.
Berikut adalah beberapa contoh kerentanan compiler Solidity yang nyata:
SOL-2016-9 PenyimpananByteBersihTingkatTinggi
Kerentanan ini ada di versi awal dari kompiler Solidity (>=0.1.6 <0.4.4). Dalam beberapa kasus, nilai variabel storage dapat diubah secara tidak sengaja, menyebabkan nilai pengembalian fungsi tidak sesuai dengan yang diharapkan. Inkonsistensi ini dapat menyebabkan konsekuensi serius dalam situasi seperti verifikasi izin atau akuntansi aset.
SOL-2022-4 InlineAssemblyMemorySideEffects
Kerentanan ini ada di dalam compiler versi 0.8.13 hingga 0.8.15. Karena masalah pada strategi optimasi compiler, modifikasi memori dalam beberapa kode assembly inline mungkin dihapus secara keliru, yang mengakibatkan kesalahan pada nilai kembalian fungsi.
Kerentanan ini mempengaruhi versi 0.5.8 hingga 0.8.16 dari compiler. Saat melakukan operasi abi.encode pada array tipe calldata, mungkin secara keliru membersihkan beberapa data, mengakibatkan data yang berdekatan dimodifikasi, sehingga data setelah pengkodean dan dekode tidak konsisten.
Memperbaiki kasus uji unit, meningkatkan cakupan kode
Hindari penggunaan assembly inline, operasi pengkodean dan penguraian ABI yang kompleks, serta gunakan fitur baru dan fungsi eksperimental dengan hati-hati.
Untuk petugas keamanan:
Pertimbangkan risiko keamanan yang mungkin ditimbulkan oleh compiler saat audit
Disarankan agar tim pengembang segera memperbarui versi compiler
Memperkenalkan pemeriksaan otomatis versi compiler dalam proses CI/CD
Menilai dampak keamanan aktual dari kerentanan compiler berdasarkan proyek spesifik
Beberapa sumber daya yang berguna:
Peringatan keamanan dari blog resmi Solidity
Daftar bug di repositori GitHub Solidity
Daftar bug compiler versi yang berbeda
Peringatan kerentanan di halaman kode kontrak Etherscan
Dengan memahami karakteristik dan dampak dari kerentanan compiler Solidity, pengembang dan petugas keamanan dapat mengevaluasi risiko keamanan kontrak pintar dengan lebih komprehensif, serta mengambil langkah-langkah yang sesuai untuk mengurangi potensi ancaman.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
16 Suka
Hadiah
16
6
Bagikan
Komentar
0/400
0xSoulless
· 4jam yang lalu
Sekali lagi alat untuk memainkan orang-orang untuk suckers
Lihat AsliBalas0
RumbleValidator
· 07-12 19:34
Apakah kerentanan ini dapat menyebabkan kesalahan di lapisan konsensus? Risiko untuk node validasi sangat besar ya.
Lihat AsliBalas0
SocialFiQueen
· 07-12 19:29
Sepertinya smart contract akan gagal~ Haha terlalu mendebarkan
Lihat AsliBalas0
CryptoTherapist
· 07-12 19:27
hanya satu lagi kasus sindrom kecemasan pengembang... bernapas melalui proses debugging fam
Lihat AsliBalas0
StablecoinAnxiety
· 07-12 19:14
Compiler tidak aman, siapa yang berani coding
Lihat AsliBalas0
Blockwatcher9000
· 07-12 19:06
Pengembang itu sulit sekali, peluk erat BTC saya dan rug pull.
Analisis Kerentanan Compiler Solidity: Risiko Tersembunyi yang Mempengaruhi Keamanan Smart Contract
Analisis Kedalaman Kerentanan Compiler Solidity
Compiler adalah salah satu komponen dasar dari sistem komputer modern, fungsinya yang utama adalah mengubah kode sumber bahasa pemrograman tingkat tinggi menjadi kode instruksi yang dapat dieksekusi oleh komputer. Meskipun sebagian besar pengembang dan petugas keamanan biasanya akan fokus pada keamanan kode aplikasi program, keamanan compiler itu sendiri sering kali diabaikan. Faktanya, compiler sebagai program komputer juga dapat memiliki kerentanan keamanan, yang dalam beberapa kasus dapat membawa risiko keamanan yang serius.
Misalnya, selama proses pemrosesan kode JavaScript oleh browser, kerentanan pada mesin pemrosesan JavaScript dapat menyebabkan pengguna mengalami serangan eksekusi kode jarak jauh saat mengunjungi situs web berbahaya, yang pada akhirnya dapat menyebabkan penyerang mengendalikan browser korban bahkan sistem operasi. Selain itu, penelitian menunjukkan bahwa bug pada compiler Clang C++ juga dapat memicu konsekuensi serius seperti eksekusi kode jarak jauh.
Kompiler Solidity juga memiliki celah keamanan. Menurut peringatan keamanan yang dirilis oleh tim pengembang Solidity, terdapat risiko keamanan di beberapa versi kompilator Solidity. Fungsi dari kompilator Solidity adalah mengubah kode kontrak pintar menjadi kode instruksi Ethereum Virtual Machine (EVM), yang akhirnya diunggah melalui transaksi ke Ethereum dan dieksekusi oleh EVM.
Perlu diperhatikan bahwa kerentanan pada compiler Solidity berbeda dengan kerentanan yang ada pada EVM itu sendiri. Kerentanan EVM mengacu pada masalah keamanan yang muncul saat mesin virtual mengeksekusi instruksi, yang dapat mempengaruhi seluruh jaringan Ethereum. Sedangkan kerentanan pada compiler Solidity merujuk pada masalah yang ada saat compiler mengubah kode Solidity menjadi kode EVM, yang tidak akan langsung mempengaruhi jaringan Ethereum itu sendiri.
Kerentanan pada compiler Solidity dapat menyebabkan kode EVM yang dihasilkan tidak sesuai dengan harapan pengembang. Karena kontrak pintar di Ethereum sering melibatkan aset cryptocurrency pengguna, maka setiap bug yang disebabkan oleh compiler dapat menyebabkan kehilangan aset pengguna, yang merupakan konsekuensi yang serius. Pengembang dan auditor kontrak biasanya fokus pada implementasi logika kontrak dan masalah keamanan umum, sementara kerentanan compiler sulit ditemukan hanya melalui audit kode sumber, yang memerlukan analisis bersama dengan versi compiler tertentu dan pola kode.
Berikut adalah beberapa contoh kerentanan compiler Solidity yang nyata:
Kerentanan ini ada di versi awal dari kompiler Solidity (>=0.1.6 <0.4.4). Dalam beberapa kasus, nilai variabel storage dapat diubah secara tidak sengaja, menyebabkan nilai pengembalian fungsi tidak sesuai dengan yang diharapkan. Inkonsistensi ini dapat menyebabkan konsekuensi serius dalam situasi seperti verifikasi izin atau akuntansi aset.
Kerentanan ini ada di dalam compiler versi 0.8.13 hingga 0.8.15. Karena masalah pada strategi optimasi compiler, modifikasi memori dalam beberapa kode assembly inline mungkin dihapus secara keliru, yang mengakibatkan kesalahan pada nilai kembalian fungsi.
Kerentanan ini mempengaruhi versi 0.5.8 hingga 0.8.16 dari compiler. Saat melakukan operasi abi.encode pada array tipe calldata, mungkin secara keliru membersihkan beberapa data, mengakibatkan data yang berdekatan dimodifikasi, sehingga data setelah pengkodean dan dekode tidak konsisten.
Terkait kerentanan compiler Solidity, tim keamanan blockchain Cobo mengajukan saran berikut:
Untuk Pengembang:
Untuk petugas keamanan:
Beberapa sumber daya yang berguna:
Dengan memahami karakteristik dan dampak dari kerentanan compiler Solidity, pengembang dan petugas keamanan dapat mengevaluasi risiko keamanan kontrak pintar dengan lebih komprehensif, serta mengambil langkah-langkah yang sesuai untuk mengurangi potensi ancaman.