Аналіз вразливостей компілятора Solidity та стратегії реагування
Компіллятор є одним із основних компонентів сучасних комп'ютерних систем, його основна функція полягає в перетворенні вихідного коду мов програмування високого рівня в інструкції коду, які можуть виконуватися на низькому рівні комп'ютера. Як і код додатків, сам компіллятор також може мати вразливості безпеки, які в певних випадках можуть призвести до серйозних ризиків безпеки.
Роль компілятора Solidity полягає в перетворенні коду смарт-контракту в код інструкцій Ethereum Virtual Machine (EVM). На відміну від вразливостей EVM самих по собі, вразливості компілятора Solidity в основному виникають під час процесу компіляції, не впливаючи безпосередньо на саму мережу Ethereum, але можуть призвести до того, що згенерований код EVM не відповідатиме очікуванням розробника, що, в свою чергу, може викликати помилки виконання смарт-контрактів, а іноді навіть призвести до втрати активів користувачів.
Нижче через кілька реальних випадків буде показано конкретні форми, причини та шкоду вразливостей компілятора Solidity:
SOL-2016-9 HighOrderByteCleanStorage
Ця уразливість існує в ранніх версіях компілятора Solidity (≥0.1.6 <0.4.4). У деяких випадках компілятор не очищав старші біти після переповнення цілочисельного типу, що призводило до випадкового зміщення сусідніх змінних. Це може викликати помилки в критичній логіці, такій як перевірка прав доступу або облік активів.
SOL-2022-4 InlineAssemblyMemoryПобічні ефекти
Ця вразливість існує в компіляторах версій від 0.8.13 до 0.8.15. Через неналежну реалізацію стратегій оптимізації компіляції, можуть бути помилково видалені інструкції запису пам'яті в інлайн-асемблері, що призводить до невідповідності даних.
Ця уразливість впливає на компілятори версій від 0.5.8 до 0.8.16. При кодуванні масиву типу calldata за допомогою ABI неправильно очищалися деякі дані, що призвело до зміни сусідніх даних і стало причиною невідповідності результатів кодування та декодування.
Щодо вразливостей компілятора Solidity, рекомендується, щоб розробники та фахівці з безпеки вжили наступних заходів:
Уникайте використання вбудованої асемблерної мови, складного ABI кодування та декодування та інших помилкових операцій.
Для безпеки персоналу:
Під час аудиту звертайте увагу на ризики, які можуть бути викликані версією компілятора
Додати перевірку версії компілятора в процес розробки
Оцінка фактичного впливу вразливостей компілятора на основі конкретного проєкту
Деякі корисні ресурси:
Офіційне попередження про безпеку Solidity
Список помилок репозиторію Solidity на GitHub
Підказка про вразливість компілятора на сторінці коду контракту Etherscan
Зрозумівши особливості вразливостей компілятора Solidity та вживаючи відповідних заходів, можна ефективно знизити ризик безпекових загроз для смарт-контрактів, що виникають через проблеми з компілятором.
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.
8 лайків
Нагородити
8
5
Поділіться
Прокоментувати
0/400
GateUser-bd883c58
· 07-12 08:17
Схоже, що компілятор також ненадійний.
Переглянути оригіналвідповісти на0
HashRatePhilosopher
· 07-12 08:14
Цей компілятор важкий?
Переглянути оригіналвідповісти на0
LiquidationWatcher
· 07-12 08:07
був там, втратив занадто багато... перевір свою версію компілятора або отримай реальний рект
Аналіз ризиків вразливостей компілятора Solidity та стратегій реагування
Аналіз вразливостей компілятора Solidity та стратегії реагування
Компіллятор є одним із основних компонентів сучасних комп'ютерних систем, його основна функція полягає в перетворенні вихідного коду мов програмування високого рівня в інструкції коду, які можуть виконуватися на низькому рівні комп'ютера. Як і код додатків, сам компіллятор також може мати вразливості безпеки, які в певних випадках можуть призвести до серйозних ризиків безпеки.
Роль компілятора Solidity полягає в перетворенні коду смарт-контракту в код інструкцій Ethereum Virtual Machine (EVM). На відміну від вразливостей EVM самих по собі, вразливості компілятора Solidity в основному виникають під час процесу компіляції, не впливаючи безпосередньо на саму мережу Ethereum, але можуть призвести до того, що згенерований код EVM не відповідатиме очікуванням розробника, що, в свою чергу, може викликати помилки виконання смарт-контрактів, а іноді навіть призвести до втрати активів користувачів.
Нижче через кілька реальних випадків буде показано конкретні форми, причини та шкоду вразливостей компілятора Solidity:
Ця уразливість існує в ранніх версіях компілятора Solidity (≥0.1.6 <0.4.4). У деяких випадках компілятор не очищав старші біти після переповнення цілочисельного типу, що призводило до випадкового зміщення сусідніх змінних. Це може викликати помилки в критичній логіці, такій як перевірка прав доступу або облік активів.
Ця вразливість існує в компіляторах версій від 0.8.13 до 0.8.15. Через неналежну реалізацію стратегій оптимізації компіляції, можуть бути помилково видалені інструкції запису пам'яті в інлайн-асемблері, що призводить до невідповідності даних.
Ця уразливість впливає на компілятори версій від 0.5.8 до 0.8.16. При кодуванні масиву типу calldata за допомогою ABI неправильно очищалися деякі дані, що призвело до зміни сусідніх даних і стало причиною невідповідності результатів кодування та декодування.
Щодо вразливостей компілятора Solidity, рекомендується, щоб розробники та фахівці з безпеки вжили наступних заходів:
Для розробників:
Для безпеки персоналу:
Деякі корисні ресурси:
Зрозумівши особливості вразливостей компілятора Solidity та вживаючи відповідних заходів, можна ефективно знизити ризик безпекових загроз для смарт-контрактів, що виникають через проблеми з компілятором.