Анализ уязвимостей компилятора Solidity и стратегии реагирования
Компилятор является одним из основных компонентов современных компьютерных систем, его основная функция заключается в преобразовании исходного кода на высокоуровневых языках программирования в исполняемые машинные инструкции. Как и код приложений, сам компилятор также может содержать уязвимости безопасности, что в некоторых случаях может привести к серьезным рискам безопасности.
Роль компилятора Solidity заключается в преобразовании кода смарт-контрактов в машинный код инструкций Ethereum Virtual Machine (EVM). В отличие от уязвимостей самого EVM, уязвимости компилятора Solidity в основном возникают в процессе компиляции, не влияя напрямую на саму сеть Ethereum, но могут привести к тому, что сгенерированный код EVM будет не соответствовать ожиданиям разработчика, что может вызвать ошибки при выполнении смарт-контрактов и даже привести к потере активов пользователей.
Ниже приведены несколько реальных примеров, которые иллюстрируют конкретные формы, причины и опасности уязвимостей компилятора Solidity:
SOL-2016-9 HighOrderByteCleanStorage
Уязвимость существует в ранних версиях компилятора Solidity (>=0.1.6 <0.4.4). В некоторых случаях компилятор неправильно очищал старшие разряды после переполнения целого числа, что приводило к неожиданному изменению соседних переменных. Это может вызвать ошибки в критической логике, такой как проверка прав доступа или учет активов.
Уязвимость существует в компиляторах версий с 0.8.13 по 0.8.15. Из-за неправильной реализации стратегий оптимизации компиляции может быть ошибочно удалена инструкция записи в память в встроенном ассемблере, что приводит к несоответствию данных.
Уязвимость затрагивает версии компилятора с 0.5.8 по 0.8.16. При выполнении ABI-кодирования массива типов calldata некоторые данные неправильно очищались, что приводило к изменению соседних данных и вызывало несоответствие результатов кодирования и декодирования.
В связи с уязвимостями компилятора Solidity, рекомендуется, чтобы разработчики и специалисты по безопасности приняли следующие меры:
Для разработчиков:
Используйте более новую версию компилятора Solidity
Улучшить тестовые случаи модулей, повысить покрытие кода
Избегайте использования встроенной сборки, сложного ABI кодирования и декодирования и других операций, которые могут привести к ошибкам.
Для службы безопасности:
Обратите внимание на риски, которые могут быть вызваны версиями компилятора во время аудита
Добавить проверку версии компилятора в процессе разработки
Оцените фактическое воздействие уязвимости компилятора в зависимости от конкретного проекта
Некоторые полезные ресурсы:
Официальное предупреждение о безопасности Solidity
Список ошибок в репозитории Solidity на GitHub
Уведомление о уязвимости компилятора на странице кода контракта Etherscan
Понимание особенностей уязвимостей компилятора Solidity и принятие соответствующих мер могут эффективно снизить риск возникновения угроз безопасности смарт-контрактов из-за проблем с компилятором.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
7 Лайков
Награда
7
5
Поделиться
комментарий
0/400
GateUser-bd883c58
· 18ч назад
Похоже, что компилятор тоже ненадежен.
Посмотреть ОригиналОтветить0
HashRatePhilosopher
· 18ч назад
Этот компилятор хороший?
Посмотреть ОригиналОтветить0
LiquidationWatcher
· 18ч назад
был там, потерял слишком много... проверь версию своего компилятора или получи по заслугам frfr
Анализ рисков уязвимости компилятора Solidity и стратегии их преодоления
Анализ уязвимостей компилятора Solidity и стратегии реагирования
Компилятор является одним из основных компонентов современных компьютерных систем, его основная функция заключается в преобразовании исходного кода на высокоуровневых языках программирования в исполняемые машинные инструкции. Как и код приложений, сам компилятор также может содержать уязвимости безопасности, что в некоторых случаях может привести к серьезным рискам безопасности.
Роль компилятора Solidity заключается в преобразовании кода смарт-контрактов в машинный код инструкций Ethereum Virtual Machine (EVM). В отличие от уязвимостей самого EVM, уязвимости компилятора Solidity в основном возникают в процессе компиляции, не влияя напрямую на саму сеть Ethereum, но могут привести к тому, что сгенерированный код EVM будет не соответствовать ожиданиям разработчика, что может вызвать ошибки при выполнении смарт-контрактов и даже привести к потере активов пользователей.
Ниже приведены несколько реальных примеров, которые иллюстрируют конкретные формы, причины и опасности уязвимостей компилятора Solidity:
Уязвимость существует в ранних версиях компилятора Solidity (>=0.1.6 <0.4.4). В некоторых случаях компилятор неправильно очищал старшие разряды после переполнения целого числа, что приводило к неожиданному изменению соседних переменных. Это может вызвать ошибки в критической логике, такой как проверка прав доступа или учет активов.
Уязвимость существует в компиляторах версий с 0.8.13 по 0.8.15. Из-за неправильной реализации стратегий оптимизации компиляции может быть ошибочно удалена инструкция записи в память в встроенном ассемблере, что приводит к несоответствию данных.
Уязвимость затрагивает версии компилятора с 0.5.8 по 0.8.16. При выполнении ABI-кодирования массива типов calldata некоторые данные неправильно очищались, что приводило к изменению соседних данных и вызывало несоответствие результатов кодирования и декодирования.
В связи с уязвимостями компилятора Solidity, рекомендуется, чтобы разработчики и специалисты по безопасности приняли следующие меры:
Для разработчиков:
Для службы безопасности:
Некоторые полезные ресурсы:
Понимание особенностей уязвимостей компилятора Solidity и принятие соответствующих мер могут эффективно снизить риск возникновения угроз безопасности смарт-контрактов из-за проблем с компилятором.