Анализ уязвимостей компилятора 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. Из-за неправильной обработки assembly block в процессе оптимизации компиляции некоторые операции записи в память могут быть ошибочно удалены, что приводит к неожиданным значениям возвращаемых функций.
Этот уязвимость присутствует в компиляторах версий с 0.5.8 по 0.8.16. При выполнении операции abi.encode с массивом типа calldata могут ошибочно очищаться некоторые данные, что приводит к изменению соседних данных и, в конечном итоге, к несоответствию закодированных и декодированных данных.
На основе анализа уязвимостей компилятора Solidity мы предлагаем следующие рекомендации для разработчиков и специалистов по безопасности:
Для разработчиков:
Используйте более новую версию компилятора Solidity
Улучшить тестовые случаи модулей, повысить покрытие кода
Избегайте использования встроенной сборки, сложной ABI кодировки и декодировки и т.д.
Осторожно используйте новые языковые функции и экспериментальные возможности
Для сотрудников безопасности:
Учитывайте потенциальные риски безопасности, которые могут быть введены компилятором при проведении аудита.
Призыв к обновлению версии компилятора в процессе разработки
Внедрение автоматической проверки версии компилятора в процессе CI/CD
Оценка фактического влияния уязвимостей компилятора в зависимости от конкретного проекта
Некоторые полезные ресурсы:
Безопасное предупреждение от команды Solidity
Список ошибок официального репозитория Solidity
Список ошибок компилятора для всех версий
Безопасные советы на странице кода контракта Etherscan
В целом, уязвимости в компиляторах Solidity хотя и встречаются нечасто, но потенциальное воздействие не следует игнорировать. Разработчики и специалисты по безопасности должны быть настороже и принимать соответствующие меры для снижения рисков.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
18 Лайков
Награда
18
5
Репост
Поделиться
комментарий
0/400
SchrodingersFOMO
· 14ч назад
Снова день, когда меня подводит компилятор
Посмотреть ОригиналОтветить0
PumpDetector
· 08-10 06:17
та же старая история... вижу проблемы с компиляцией с '13 года, дни mtgox были дикими, если честно
Посмотреть ОригиналОтветить0
AirdropHuntress
· 08-10 06:13
Детали аудита кода безвредны, кошелек капиталиста - вот настоящая проблема
Посмотреть ОригиналОтветить0
TokenEconomist
· 08-10 06:06
на самом деле, вся эта проблема EVM против компилятора solidity параллельна печально известному багу Y2K... по правде говоря, захватывающие вещи
Посмотреть ОригиналОтветить0
MidnightTrader
· 08-10 05:59
Кажется, компилятор подвел, риски проекта очень велики.
Уязвимость компилятора 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. Из-за неправильной обработки assembly block в процессе оптимизации компиляции некоторые операции записи в память могут быть ошибочно удалены, что приводит к неожиданным значениям возвращаемых функций.
Этот уязвимость присутствует в компиляторах версий с 0.5.8 по 0.8.16. При выполнении операции abi.encode с массивом типа calldata могут ошибочно очищаться некоторые данные, что приводит к изменению соседних данных и, в конечном итоге, к несоответствию закодированных и декодированных данных.
На основе анализа уязвимостей компилятора Solidity мы предлагаем следующие рекомендации для разработчиков и специалистов по безопасности:
Для разработчиков:
Для сотрудников безопасности:
Некоторые полезные ресурсы:
В целом, уязвимости в компиляторах Solidity хотя и встречаются нечасто, но потенциальное воздействие не следует игнорировать. Разработчики и специалисты по безопасности должны быть настороже и принимать соответствующие меры для снижения рисков.