Анализ уязвимостей компилятора Solidity и стратегии противодействия
Компилятор является одним из основных компонентов современных компьютерных систем, его функция заключается в преобразовании исходного кода на высокоуровневом языке программирования в исполняемый компьютерный код. Как и код приложений, сам компилятор также может иметь уязвимости, которые в некоторых случаях могут привести к серьезным рискам безопасности.
Роль компилятора Solidity заключается в преобразовании кода смарт-контракта в машинный код инструкций Ethereum Virtual Machine (EVM). В отличие от уязвимостей самого EVM, уязвимости компилятора Solidity не влияют напрямую на сеть Ethereum, но могут привести к тому, что сгенерированный код EVM будет не соответствовать ожиданиям разработчика, что может вызвать проблемы с безопасностью смарт-контрактов.
Вот несколько реальных примеров уязвимостей компилятора Solidity:
SOL-2016-9 HighOrderByteCleanStorage
Уязвимость существует в более ранних версиях компилятора Solidity (>=0.1.6 <0.4.4). В некоторых случаях компилятор неправильно очищал старшие байты, что приводило к неожиданному изменению значения переменной storage.
Уязвимость существует в компиляторах версий с 0.8.13 по 0.8.15. Из-за неправильной обработки блоков assembly в процессе оптимизации компиляции, это может привести к тому, что операции записи в память будут ошибочно удалены.
Уязвимость затрагивает компиляторы версий с 0.5.8 до 0.8.16. При выполнении операции abi.encode над массивом типа calldata некоторые данные могут быть ошибочно очищены, что приводит к изменению соседних данных.
В связи с уязвимостью компилятора Solidity, команда по безопасности блокчейна Cobo предлагает следующие рекомендации:
Для разработчиков:
Используйте более новую версию компилятора Solidity
Улучшить тестовые случаи для модулей
Избегайте использования сложных языковых особенностей, таких как встроенные ассемблеры, многомерные массивы для кодирования и декодирования ABI и т.д.
Для сотрудников безопасности:
Учитывайте потенциальные риски безопасности, которые могут быть вызваны компилятором при проведении аудита.
В процессе разработки настоятельно рекомендуется обновить версию компилятора
Оцените фактическое влияние уязвимости компилятора в зависимости от конкретной ситуации
Некоторые полезные ресурсы:
Официальный блог предупреждений о безопасности Solidity
Список ошибок в репозитории Solidity на GitHub
Список ошибок компилятора для всех версий
Уведомление об уязвимости компилятора на странице кода контракта Etherscan
Понимание особенностей и влияния уязвимостей компилятора Solidity позволяет разработчикам и специалистам по безопасности более полно оценивать риски безопасности смарт-контрактов и принимать соответствующие меры предосторожности.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
20 Лайков
Награда
20
5
Поделиться
комментарий
0/400
blocksnark
· 07-10 15:09
Деньги за исправление багов самые сладкие
Посмотреть ОригиналОтветить0
BlockchainDecoder
· 07-08 10:18
Согласно классической статье "Анализ компилятора Solidity" (2022), риск таких уязвимостей составляет 78,3%. Рекомендуется осторожно использовать версии 0.8.0 и выше для избежания.
Посмотреть ОригиналОтветить0
DaisyUnicorn
· 07-08 10:14
Йиньйинь, компилятор тоже подхватил баги, давай скорее выпустим новую версию.
Посмотреть ОригиналОтветить0
FlashLoanLarry
· 07-08 10:13
просто еще один день в defi... эксплойты компилятора = бесконечные возможности mev, если честно
Анализ уязвимостей компилятора Solidity и стратегии их предотвращения
Анализ уязвимостей компилятора Solidity и стратегии противодействия
Компилятор является одним из основных компонентов современных компьютерных систем, его функция заключается в преобразовании исходного кода на высокоуровневом языке программирования в исполняемый компьютерный код. Как и код приложений, сам компилятор также может иметь уязвимости, которые в некоторых случаях могут привести к серьезным рискам безопасности.
Роль компилятора Solidity заключается в преобразовании кода смарт-контракта в машинный код инструкций Ethereum Virtual Machine (EVM). В отличие от уязвимостей самого EVM, уязвимости компилятора Solidity не влияют напрямую на сеть Ethereum, но могут привести к тому, что сгенерированный код EVM будет не соответствовать ожиданиям разработчика, что может вызвать проблемы с безопасностью смарт-контрактов.
Вот несколько реальных примеров уязвимостей компилятора Solidity:
Уязвимость существует в более ранних версиях компилятора Solidity (>=0.1.6 <0.4.4). В некоторых случаях компилятор неправильно очищал старшие байты, что приводило к неожиданному изменению значения переменной storage.
Уязвимость существует в компиляторах версий с 0.8.13 по 0.8.15. Из-за неправильной обработки блоков assembly в процессе оптимизации компиляции, это может привести к тому, что операции записи в память будут ошибочно удалены.
Уязвимость затрагивает компиляторы версий с 0.5.8 до 0.8.16. При выполнении операции abi.encode над массивом типа calldata некоторые данные могут быть ошибочно очищены, что приводит к изменению соседних данных.
В связи с уязвимостью компилятора Solidity, команда по безопасности блокчейна Cobo предлагает следующие рекомендации:
Для разработчиков:
Для сотрудников безопасности:
Некоторые полезные ресурсы:
Понимание особенностей и влияния уязвимостей компилятора Solidity позволяет разработчикам и специалистам по безопасности более полно оценивать риски безопасности смарт-контрактов и принимать соответствующие меры предосторожности.