Анализ уязвимостей компилятора Solidity и меры по их предотвращению
Компилятор является одной из основных компонентов современных компьютерных систем, его функция заключается в преобразовании исходного кода на высокоуровневом языке программирования в исполняемый код для компьютера. В отличие от кода приложений, безопасность самого компилятора часто бывает недооценена. Однако компилятор, как компьютерная программа, также может иметь уязвимости, которые в некоторых случаях могут представлять серьезные риски для безопасности.
Роль компилятора Solidity заключается в преобразовании кода смарт-контракта в машинный код команд Ethereum Virtual Machine ((EVM)). В отличие от уязвимостей самой EVM, уязвимости компилятора Solidity не влияют напрямую на сеть Ethereum, но могут привести к тому, что сгенерированный код EVM будет несовпадать с ожиданиями разработчиков, что, в свою очередь, может вызвать проблемы с безопасностью смарт-контрактов.
Вот несколько примеров реальных уязвимостей компилятора Solidity:
SOL-2016-9 ВысокийПорядокЧистогоХраненияБайтов
Уязвимость существует в ранних версиях компилятора Solidity (>=0.1.6 <0.4.4). В некоторых случаях компилятор неправильно очищает старшие байты, что приводит к случайному изменению значений переменных.
Уязвимость затрагивает компиляторы версий 0.8.13 до 0.8.15. Из-за неправильной обработки отдельных блоков assembly в процессе оптимизации компиляции, возможно, что операции с памятью будут ошибочно оптимизированы.
Уязвимость затрагивает компиляторы версий от 0.5.8 до 0.8.16. При выполнении операции abi.encode с массивом типа calldata некоторые данные были ошибочно очищены, что привело к изменению соседних данных.
В связи с уязвимостями компилятора Solidity предлагаются следующие меры безопасности:
Для разработчиков:
Используйте более новую версию компилятора Solidity
Улучшение юнит-тестов
Избегайте использования встроенной ассемблерной программы, сложной кодировки и декодирования ABI и других операций
Для сотрудников безопасности:
Учитывайте потенциальные риски безопасности, которые могут быть вызваны компилятором при аудитах.
В процессе разработки настоятельно рекомендуется обновить версию компилятора
Оцените фактическое влияние уязвимости компилятора на безопасность в зависимости от конкретной ситуации.
Некоторые полезные ресурсы:
Официальный блог предупреждений о безопасности Solidity
Список ошибок в репозитории Solidity на GitHub
Уведомление о уязвимости компилятора на странице кода контракта Etherscan
В общем, хотя уязвимости компилятора не должны вызывать избыточную панику, разработчики и специалисты по безопасности все же должны быть на чеку и принимать соответствующие меры для снижения связанных рисков.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
12 Лайков
Награда
12
5
Поделиться
комментарий
0/400
hodl_therapist
· 07-15 05:58
Внимание, мастера сворачивания, берегите здоровье.
Посмотреть ОригиналОтветить0
CommunitySlacker
· 07-15 05:49
Уязвимость снова обновили, надоело.
Посмотреть ОригиналОтветить0
GasGuru
· 07-15 05:45
Не осмеливаюсь заходить в контракт.
Посмотреть ОригиналОтветить0
SmartContractRebel
· 07-15 05:41
Слишком сладкий компилятор.
Посмотреть ОригиналОтветить0
PebbleHander
· 07-15 05:36
Как справиться с новым уязвимостями в контракте... не паникуйте
Анализ уязвимостей компилятора 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. Из-за неправильной обработки отдельных блоков assembly в процессе оптимизации компиляции, возможно, что операции с памятью будут ошибочно оптимизированы.
Уязвимость затрагивает компиляторы версий от 0.5.8 до 0.8.16. При выполнении операции abi.encode с массивом типа calldata некоторые данные были ошибочно очищены, что привело к изменению соседних данных.
В связи с уязвимостями компилятора Solidity предлагаются следующие меры безопасности:
Для разработчиков:
Для сотрудников безопасности:
Некоторые полезные ресурсы:
В общем, хотя уязвимости компилятора не должны вызывать избыточную панику, разработчики и специалисты по безопасности все же должны быть на чеку и принимать соответствующие меры для снижения связанных рисков.