Анализ уязвимостей компилятора Solidity и стратегии реагирования
Компилятор является одним из основных компонентов современных компьютерных систем, его функция заключается в преобразовании исходного кода на высокоуровневом языке программирования в инструкции, которые могут исполняться компьютером. В отличие от безопасности прикладного кода, безопасность самого компилятора часто игнорируется. Однако, как программа для компьютера, компилятор также может иметь уязвимости, которые в определенных ситуациях могут привести к серьезным рискам безопасности.
Роль компилятора Solidity заключается в преобразовании кода смарт-контрактов в машинный код инструкций Ethereum Virtual Machine (EVM). В отличие от уязвимостей EVM, уязвимости компилятора Solidity в основном проявляются в проблемах, возникающих при преобразовании Solidity в код EVM. Это может привести к тому, что сгенерированный код EVM не будет соответствовать ожиданиям разработчика, что, в свою очередь, может вызвать аномалии в работе смарт-контрактов и поставить под угрозу безопасность активов пользователей.
Вот несколько реальных примеров уязвимостей компилятора Solidity:
SOL-2016-9 HighOrderByteCleanStorage
Уязвимость существует в более ранних версиях компилятора Solidity (>=0.1.6 <0.4.4). В определенных случаях переменные хранения могут быть случайно изменены, что не соответствует ожидаемому поведению. Эта несоответствие может привести к серьезным последствиям, особенно когда переменные используются для проверки прав или учета активов.
SOL-2022-4 Влияние побочных эффектов в памяти InlineAssembly
Уязвимость существует в компиляторе версий от 0.8.13 до 0.8.15. Из-за ошибки в процессе оптимизации компиляции может произойти неправильное удаление операций записи в память, что приведет к непредсказуемому поведению программы.
Уязвимость затрагивает компиляторы версий с 0.5.8 по 0.8.16. При выполнении операции abi.encode с массивом типа calldata может произойти некорректная очистка некоторых данных, что приведет к изменению соседних данных и вызовет несоответствие между закодированными и декодированными данными.
В связи с уязвимостью компилятора Solidity команда безопасности блокчейна Cobo предлагает следующие рекомендации:
Для разработчиков:
Используйте более новую версию компилятора Solidity
Улучшение юнит-тестов
Избегайте использования встроенной ассемблерной программы, сложного кодирования и декодирования ABI и других операций.
Для сотрудников безопасности:
Учитывайте возможные риски безопасности, которые могут быть вызваны компилятором при аудите.
В процессе SDL настоятельно рекомендуется обновить версию компилятора
Оцените фактическое влияние уязвимости компилятора в зависимости от конкретной ситуации.
Полезные ресурсы:
Официальный блог по безопасности Solidity
Список ошибок в репозитории Solidity на GitHub
Безопасные советы на странице кода контракта Etherscan
В общем, хотя нет необходимости в чрезмерной панике, разработчики и специалисты по безопасности должны в полной мере осознавать потенциальные риски уязвимостей компилятора Solidity и принимать соответствующие меры для снижения возможных угроз безопасности.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
13 Лайков
Награда
13
6
Поделиться
комментарий
0/400
ZkProofPudding
· 10ч назад
Ещё один компилятор
Посмотреть ОригиналОтветить0
TheMemefather
· 10ч назад
Компилятор тоже имеет уязвимости? Это странно.
Посмотреть ОригиналОтветить0
HodlOrRegret
· 10ч назад
Опять обновление привело к ошибкам, вечно страдают розничные инвесторы.
Посмотреть ОригиналОтветить0
wrekt_but_learning
· 10ч назад
Этот код имеет настоящую уязвимость, от которой волосы дыбом.
Посмотреть ОригиналОтветить0
GweiTooHigh
· 10ч назад
Компилятор снова выдал ошибку, это так раздражает.
Посмотреть ОригиналОтветить0
BakedCatFanboy
· 10ч назад
Снова уязвимость EVM. Боже, не могу с этим справиться.
Уязвимости компилятора Solidity угрожают безопасности смарт-контрактов, разработчикам следует быть осторожными
Анализ уязвимостей компилятора Solidity и стратегии реагирования
Компилятор является одним из основных компонентов современных компьютерных систем, его функция заключается в преобразовании исходного кода на высокоуровневом языке программирования в инструкции, которые могут исполняться компьютером. В отличие от безопасности прикладного кода, безопасность самого компилятора часто игнорируется. Однако, как программа для компьютера, компилятор также может иметь уязвимости, которые в определенных ситуациях могут привести к серьезным рискам безопасности.
Роль компилятора Solidity заключается в преобразовании кода смарт-контрактов в машинный код инструкций Ethereum Virtual Machine (EVM). В отличие от уязвимостей EVM, уязвимости компилятора Solidity в основном проявляются в проблемах, возникающих при преобразовании Solidity в код EVM. Это может привести к тому, что сгенерированный код EVM не будет соответствовать ожиданиям разработчика, что, в свою очередь, может вызвать аномалии в работе смарт-контрактов и поставить под угрозу безопасность активов пользователей.
Вот несколько реальных примеров уязвимостей компилятора Solidity:
Уязвимость существует в более ранних версиях компилятора Solidity (>=0.1.6 <0.4.4). В определенных случаях переменные хранения могут быть случайно изменены, что не соответствует ожидаемому поведению. Эта несоответствие может привести к серьезным последствиям, особенно когда переменные используются для проверки прав или учета активов.
Уязвимость существует в компиляторе версий от 0.8.13 до 0.8.15. Из-за ошибки в процессе оптимизации компиляции может произойти неправильное удаление операций записи в память, что приведет к непредсказуемому поведению программы.
Уязвимость затрагивает компиляторы версий с 0.5.8 по 0.8.16. При выполнении операции abi.encode с массивом типа calldata может произойти некорректная очистка некоторых данных, что приведет к изменению соседних данных и вызовет несоответствие между закодированными и декодированными данными.
В связи с уязвимостью компилятора Solidity команда безопасности блокчейна Cobo предлагает следующие рекомендации:
Для разработчиков:
Для сотрудников безопасности:
Полезные ресурсы:
В общем, хотя нет необходимости в чрезмерной панике, разработчики и специалисты по безопасности должны в полной мере осознавать потенциальные риски уязвимостей компилятора Solidity и принимать соответствующие меры для снижения возможных угроз безопасности.