Анализ уязвимостей компилятора Solidity и стратегии их устранения
Компилятор является одним из основных компонентов современных компьютерных систем, его функция заключается в преобразовании исходного кода высокоуровневого языка программирования в исполняемые компьютером машинные инструкции. Хотя большинство разработчиков и специалистов по безопасности обычно сосредоточены на безопасности кода программных приложений, безопасность самого компилятора также имеет большое значение. Компилятор, будучи компьютерной программой, также может иметь уязвимости, которые в некоторых случаях могут представлять серьезные риски безопасности.
Например, в браузере при компиляции и выполнении JavaScript-кода могут возникнуть серьезные последствия, такие как удаленное выполнение кода, из-за уязвимостей JavaScript-движка. Компилятор Solidity не исключение, в нескольких версиях также существуют уязвимости безопасности.
Роль компилятора Solidity заключается в преобразовании кода смарт-контракта в код инструкций Ethereum Virtual Machine (EVM). Необходимо различать уязвимости компилятора Solidity и уязвимости самой EVM. Уязвимости EVM относятся к проблемам безопасности, возникающим при выполнении инструкций виртуальной машины, что может повлиять на всю сеть Ethereum. В то время как уязвимости компилятора Solidity касаются проблем в процессе компиляции, которые не оказывают непосредственного влияния на сеть Ethereum, но могут привести к тому, что сгенерированный код EVM будет не соответствовать ожиданиям разработчика.
Одна из опасностей уязвимости компилятора Solidity заключается в том, что сгенерированный код EVM может отличаться от ожиданий разработчика смарт-контрактов. Поскольку смарт-контракты обычно связаны с криптовалютными активами пользователей, любые ошибки, вызванные компилятором, могут иметь серьезные последствия. Просто провести аудит исходного кода контракта может быть недостаточно для выявления таких проблем, необходимо совместное анализирование конкретной версии компилятора и шаблонов кода.
Ниже приведены несколько реальных уязвимостей компилятора Solidity в качестве примеров, чтобы продемонстрировать их конкретные формы, причины и последствия.
Уязвимость HighOrderByteCleanStorage в SOL-2016-9 существует в более ранних версиях компилятора Solidity ( >= 0.1.6 < 0.4.4). Эта уязвимость может привести к тому, что переменные storage будут возвращать неожиданные значения без каких-либо изменений. Эта несоответствие может привести к серьезным последствиям в таких сценариях, как проверка прав доступа, учет активов и т.д.
Уязвимость InlineAssemblyMemorySideEffects в SOL-2022-4 существует в компиляторах версии >=0.8.13 <0.8.15. Эта уязвимость возникает из-за неправильной обработки кода встроенного ассемблера в процессе оптимизации компиляции, что может привести к неправильному удалению некоторых операций с памятью.
Уязвимость SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup влияет на компиляторы версии >= 0.5.8 < 0.8.16. Эта уязвимость может привести к несоответствию данных при выполнении операции abi.encode с массивами типа calldata.
На основе анализа уязвимостей компилятора Solidity, предлагаются следующие рекомендации для разработчиков и специалистов по безопасности:
Разработчик:
Используйте более новую версию компилятора Solidity
Улучшить тестовые случаи модулей, повысить покрытие кода
Избегайте использования встроенной ассемблерной программы, сложной кодировки и декодирования ABI и подобных операций
Осторожно используйте новые функции и экспериментальные возможности
Безопасность:
Учитывайте риски, которые могут быть вызваны компиляторами во время аудита безопасности.
Продвижение обновления версии компилятора в процессе SDL
Внедрение автоматической проверки версии компилятора в CI/CD
Оценка фактического воздействия уязвимостей компилятора в зависимости от конкретного проекта
Некоторые полезные ресурсы:
Официальное предупреждение о безопасности от Solidity
Список ошибок в репозитории Solidity на GitHub
Список ошибок компилятора для различных версий
Уведомление о уязвимости компилятора на Etherscan
В общем, уязвимости компилятора Solidity, хотя и нечастые, могут привести к серьезным последствиям. Разработчики и специалисты по безопасности должны быть настороже и принимать соответствующие меры для снижения рисков.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
8 Лайков
Награда
8
5
Поделиться
комментарий
0/400
MetaverseHobo
· 23ч назад
Снова куча уязвимостей. Чего паниковать?
Посмотреть ОригиналОтветить0
OfflineValidator
· 23ч назад
Играл и потерял две тысячи usdt, понимая низкие и высокие продажи через упрощение
Снова ошибка из-за компилятора...
Посмотреть ОригиналОтветить0
FallingLeaf
· 23ч назад
Уязвимость меня напугала, ничего не смогу играть.
Посмотреть ОригиналОтветить0
PoetryOnChain
· 23ч назад
Снова пришел следовать за уязвимостями, сваливаю, сваливаю.
Посмотреть ОригиналОтветить0
AirDropMissed
· 23ч назад
Снова проблемы с компилятором, не могу сдержать смех.
Анализ уязвимостей компилятора Solidity: риски, примеры и стратегии реагирования
Анализ уязвимостей компилятора Solidity и стратегии их устранения
Компилятор является одним из основных компонентов современных компьютерных систем, его функция заключается в преобразовании исходного кода высокоуровневого языка программирования в исполняемые компьютером машинные инструкции. Хотя большинство разработчиков и специалистов по безопасности обычно сосредоточены на безопасности кода программных приложений, безопасность самого компилятора также имеет большое значение. Компилятор, будучи компьютерной программой, также может иметь уязвимости, которые в некоторых случаях могут представлять серьезные риски безопасности.
Например, в браузере при компиляции и выполнении JavaScript-кода могут возникнуть серьезные последствия, такие как удаленное выполнение кода, из-за уязвимостей JavaScript-движка. Компилятор Solidity не исключение, в нескольких версиях также существуют уязвимости безопасности.
Роль компилятора Solidity заключается в преобразовании кода смарт-контракта в код инструкций Ethereum Virtual Machine (EVM). Необходимо различать уязвимости компилятора Solidity и уязвимости самой EVM. Уязвимости EVM относятся к проблемам безопасности, возникающим при выполнении инструкций виртуальной машины, что может повлиять на всю сеть Ethereum. В то время как уязвимости компилятора Solidity касаются проблем в процессе компиляции, которые не оказывают непосредственного влияния на сеть Ethereum, но могут привести к тому, что сгенерированный код EVM будет не соответствовать ожиданиям разработчика.
Одна из опасностей уязвимости компилятора Solidity заключается в том, что сгенерированный код EVM может отличаться от ожиданий разработчика смарт-контрактов. Поскольку смарт-контракты обычно связаны с криптовалютными активами пользователей, любые ошибки, вызванные компилятором, могут иметь серьезные последствия. Просто провести аудит исходного кода контракта может быть недостаточно для выявления таких проблем, необходимо совместное анализирование конкретной версии компилятора и шаблонов кода.
Ниже приведены несколько реальных уязвимостей компилятора Solidity в качестве примеров, чтобы продемонстрировать их конкретные формы, причины и последствия.
Уязвимость HighOrderByteCleanStorage в SOL-2016-9 существует в более ранних версиях компилятора Solidity ( >= 0.1.6 < 0.4.4). Эта уязвимость может привести к тому, что переменные storage будут возвращать неожиданные значения без каких-либо изменений. Эта несоответствие может привести к серьезным последствиям в таких сценариях, как проверка прав доступа, учет активов и т.д.
Уязвимость InlineAssemblyMemorySideEffects в SOL-2022-4 существует в компиляторах версии >=0.8.13 <0.8.15. Эта уязвимость возникает из-за неправильной обработки кода встроенного ассемблера в процессе оптимизации компиляции, что может привести к неправильному удалению некоторых операций с памятью.
Уязвимость SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup влияет на компиляторы версии >= 0.5.8 < 0.8.16. Эта уязвимость может привести к несоответствию данных при выполнении операции abi.encode с массивами типа calldata.
На основе анализа уязвимостей компилятора Solidity, предлагаются следующие рекомендации для разработчиков и специалистов по безопасности:
Разработчик:
Безопасность:
Некоторые полезные ресурсы:
В общем, уязвимости компилятора Solidity, хотя и нечастые, могут привести к серьезным последствиям. Разработчики и специалисты по безопасности должны быть настороже и принимать соответствующие меры для снижения рисков.
Снова ошибка из-за компилятора...