Аналіз вразливостей компілятора Solidity та стратегії реагування
Компільатор є одним із основних компонентів сучасних комп'ютерних систем, його функція полягає в перетворенні вихідного коду високорівневої мови програмування на інструкційний код, що виконується комп'ютером. Хоча більшість розробників і фахівців з безпеки зазвичай зосереджують увагу на безпеці коду програмних застосунків, безпека самого компілятора також є важливою. Як комп'ютерна програма, компілятор також може мати вразливості безпеки, які в певних випадках можуть викликати серйозні ризики для безпеки.
Наприклад, у браузері, під час компіляції та аналізу виконання коду JavaScript, можуть виникнути серйозні наслідки, такі як віддалене виконання коду, через вразливість JavaScript-двигуна. Компілятор Solidity не є винятком, у кількох версіях також є вразливості безпеки.
Роль компілятора Solidity полягає в перетворенні коду смарт-контракту на інструкційний код віртуальної машини Ethereum (EVM). Необхідно розрізняти вразливості компілятора Solidity і вразливості самої EVM. Вразливості EVM стосуються проблем безпеки, які виникають під час виконання інструкцій віртуальною машиною, що може вплинути на всю мережу Ethereum. Вразливості компілятора Solidity стосуються проблем у процесі компіляції, які не впливають безпосередньо на мережу Ethereum, але можуть призвести до того, що згенерований код EVM не відповідатиме очікуванням розробника.
Однією з небезпек вразливостей компілятора Solidity є те, що вони можуть призвести до розбіжностей між згенерованим кодом EVM та очікуваннями розробника смарт-контракту. Оскільки смарт-контракти зазвичай пов'язані з криптовалютними активами користувачів, будь-які помилки, викликані компілятором, можуть мати серйозні наслідки. Лише шляхом аудиту вихідного коду контракту важко виявити такого роду проблеми, необхідно поєднувати аналіз конкретних версій компілятора та моделей коду.
Нижче наведено кілька реальних вразливостей компілятора Solidity, що демонструють їх конкретні форми, причини та шкоду.
Уразливість SOL-2016-9 HighOrderByteCleanStorage існує у ранніх версіях компілятора Solidity (>=0.1.6 <0.4.4). Ця уразливість може призвести до того, що змінні зберігання повертають неочікувані значення без змін. Такі невідповідності можуть мати серйозні наслідки у сценаріях перевірки прав доступу, обліку активів тощо.
Вразливість SOL-2022-4 InlineAssemblyMemorySideEffects існує в компіляторах версій >=0.8.13 <0.8.15. Ця вразливість виникає через неправильну обробку коду вбудованої асемблерної мови під час оптимізації компіляції, що може призвести до неправильної видалення деяких операцій з пам'яттю.
Уразливість SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup впливає на компілятори версій >= 0.5.8 < 0.8.16. Ця уразливість може призвести до несумісності даних під час операції abi.encode над масивами типу calldata.
На основі аналізу вразливостей компілятора Solidity, розробникам і спеціалістам з безпеки пропонуються наступні рекомендації:
Уникайте використання інлайн-асемблера, складного кодування/декодування ABI та інших операцій
Обережно використовуйте нові функції та експериментальні можливості
Охоронці:
Під час безпекового аудиту слід враховувати ризики, які можуть виникнути через компілятор.
Підвищення версії компілятора в процесі SDL
Введення автоматичної перевірки версії компілятора в CI/CD
Оцінка фактичного впливу вразливостей компілятора відповідно до конкретних проектів
Декілька корисних ресурсів:
Офіційне попередження про безпеку від Solidity
Список помилок у репозиторії Solidity на GitHub
Список багів компіляторів різних версій
Повідомлення про вразливість компілятора на Etherscan
У підсумку, вразливості компілятора Solidity хоча й не є поширеними, але можуть призвести до серйозних наслідків. Розробники та фахівці з безпеки повинні бути насторожі та вжити відповідних заходів для зниження ризику.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
8 лайків
Нагородити
8
5
Поділіться
Прокоментувати
0/400
MetaverseHobo
· 5год тому
Знову купа вразливостей, чого панікувати?
Переглянути оригіналвідповісти на0
OfflineValidator
· 6год тому
Пограв у знищення понад 2k usdt, зниження вимірів для тих, хто розуміє купувати низько та продавати високо
Знову проскочила помилка з компілятором...
Переглянути оригіналвідповісти на0
FallingLeaf
· 6год тому
Вразила помилка, я нічого не наважуюсь грати.
Переглянути оригіналвідповісти на0
PoetryOnChain
· 6год тому
Знову прийшов підписатися на вразливості, втік, втік.
Переглянути оригіналвідповісти на0
AirDropMissed
· 6год тому
Знову проблеми з компілятором, не можу не сміятися.
Аналіз вразливостей компілятора Solidity: ризики, приклади та стратегії реагування
Аналіз вразливостей компілятора Solidity та стратегії реагування
Компільатор є одним із основних компонентів сучасних комп'ютерних систем, його функція полягає в перетворенні вихідного коду високорівневої мови програмування на інструкційний код, що виконується комп'ютером. Хоча більшість розробників і фахівців з безпеки зазвичай зосереджують увагу на безпеці коду програмних застосунків, безпека самого компілятора також є важливою. Як комп'ютерна програма, компілятор також може мати вразливості безпеки, які в певних випадках можуть викликати серйозні ризики для безпеки.
Наприклад, у браузері, під час компіляції та аналізу виконання коду JavaScript, можуть виникнути серйозні наслідки, такі як віддалене виконання коду, через вразливість JavaScript-двигуна. Компілятор Solidity не є винятком, у кількох версіях також є вразливості безпеки.
Роль компілятора Solidity полягає в перетворенні коду смарт-контракту на інструкційний код віртуальної машини Ethereum (EVM). Необхідно розрізняти вразливості компілятора Solidity і вразливості самої EVM. Вразливості EVM стосуються проблем безпеки, які виникають під час виконання інструкцій віртуальною машиною, що може вплинути на всю мережу Ethereum. Вразливості компілятора Solidity стосуються проблем у процесі компіляції, які не впливають безпосередньо на мережу Ethereum, але можуть призвести до того, що згенерований код EVM не відповідатиме очікуванням розробника.
Однією з небезпек вразливостей компілятора Solidity є те, що вони можуть призвести до розбіжностей між згенерованим кодом EVM та очікуваннями розробника смарт-контракту. Оскільки смарт-контракти зазвичай пов'язані з криптовалютними активами користувачів, будь-які помилки, викликані компілятором, можуть мати серйозні наслідки. Лише шляхом аудиту вихідного коду контракту важко виявити такого роду проблеми, необхідно поєднувати аналіз конкретних версій компілятора та моделей коду.
Нижче наведено кілька реальних вразливостей компілятора Solidity, що демонструють їх конкретні форми, причини та шкоду.
Уразливість SOL-2016-9 HighOrderByteCleanStorage існує у ранніх версіях компілятора Solidity (>=0.1.6 <0.4.4). Ця уразливість може призвести до того, що змінні зберігання повертають неочікувані значення без змін. Такі невідповідності можуть мати серйозні наслідки у сценаріях перевірки прав доступу, обліку активів тощо.
Вразливість SOL-2022-4 InlineAssemblyMemorySideEffects існує в компіляторах версій >=0.8.13 <0.8.15. Ця вразливість виникає через неправильну обробку коду вбудованої асемблерної мови під час оптимізації компіляції, що може призвести до неправильної видалення деяких операцій з пам'яттю.
Уразливість SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup впливає на компілятори версій >= 0.5.8 < 0.8.16. Ця уразливість може призвести до несумісності даних під час операції abi.encode над масивами типу calldata.
На основі аналізу вразливостей компілятора Solidity, розробникам і спеціалістам з безпеки пропонуються наступні рекомендації:
Розробник:
Охоронці:
Декілька корисних ресурсів:
У підсумку, вразливості компілятора Solidity хоча й не є поширеними, але можуть призвести до серйозних наслідків. Розробники та фахівці з безпеки повинні бути насторожі та вжити відповідних заходів для зниження ризику.
Знову проскочила помилка з компілятором...