Уязвимость переполнения целого числа в модуле безопасности Move языка
Недавно исследователи в области безопасности обнаружили серьезную уязвимость переполнения целого числа при глубоком анализе языка Move. Эта уязвимость существует в модуле проверки безопасности ссылок и может привести к атакам отказа в обслуживании. В этой статье подробно рассматриваются принципы и последствия этой уязвимости.
Фон уязвимости
Язык Move проводит проверку кода перед выполнением байт-кода, включая проверку безопасности ссылок. Этот процесс делится на несколько этапов, а обнаруженная уязвимость возникла на этапе проверки reference_safety.
Основной процесс проверки безопасности включает в себя:
Разделите код на базовые блоки
Провести анализ каждого основного блока
Состояние до и после объединения анализа
Распространение результатов на последующие блоки
В этом используется структура AbstractState для представления состояния анализа, содержащая информацию о локальных переменных и графе заимствований.
Подробности уязвимости
Уязвимость возникает в функции join_ в состоянии объединенного анализа. Эта функция использует тип u8 для итерации по локальным переменным, но если сумма длины параметров и длины локальных переменных превышает 256, происходит переполнение целого числа.
Конкретно говоря:
использование self.iter_locals() для итерации по locals в функции join_
iter_locals() возвращает итератор типа u8
Если длина параметров + длина локальных переменных > 256, итератор переполнится
Хотя в Move есть процесс проверки количества локальных переменных, он проверяет только количество локальных переменных и не включает длину параметров.
Эксплуатация уязвимостей
Атакующий может создать циклический кодовый блок, используя переполнение для изменения состояния блока:
Общее количество параметров и локальных переменных больше 256
После первого выполнения длина новой карты locals будет переполнена и уменьшится
Повторное выполнение приведет к панике, если обратиться к несуществующему индексу locals.
Это может вызвать отказ в обслуживании узла.
Влияние уязвимости
Этот уязвимость может привести к:
Краш верфикатора байт-кода Move
Узлы блокчейна, зависящие от Move, отказываются в обслуживании
Обойти некоторые проверки безопасности
Рекомендации по исправлению
Добавить проверку длины параметров в проверку границ locals
Используйте более крупные целочисленные типы, такие как u16, для итерации по locals
Добавление дополнительных проверок безопасности во время выполнения
Итог
Этот недостаток еще раз подтверждает, что даже самые тщательно спроектированные языки могут иметь уязвимости. Для языка Move рекомендуется добавить необходимые проверки безопасности не только на этапе верификации, но и во время выполнения. Специалисты по безопасности продолжат углубленный анализ языка Move, чтобы выявить больше потенциальных проблем.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
22 Лайков
Награда
22
6
Репост
Поделиться
комментарий
0/400
BackrowObserver
· 08-11 11:51
move снова провалился
Посмотреть ОригиналОтветить0
MidnightTrader
· 08-10 07:32
Это опять какой-то новичок написал код, я на коленях.
Посмотреть ОригиналОтветить0
MevShadowranger
· 08-10 07:30
Снова играем с переполнением целых чисел
Посмотреть ОригиналОтветить0
WagmiOrRekt
· 08-10 07:29
Хорошо, что я раньше закрыл все позиции Move.
Посмотреть ОригиналОтветить0
CommunityWorker
· 08-10 07:27
move снова собирается взорваться? Чего паниковать?
Посмотреть ОригиналОтветить0
CryingOldWallet
· 08-10 07:26
Снова уязвимость? move уже не так привлекателен, не правда ли?
Уязвимость переполнения целого числа в модуле безопасности Move языка может привести к отказу узла в обслуживании
Уязвимость переполнения целого числа в модуле безопасности Move языка
Недавно исследователи в области безопасности обнаружили серьезную уязвимость переполнения целого числа при глубоком анализе языка Move. Эта уязвимость существует в модуле проверки безопасности ссылок и может привести к атакам отказа в обслуживании. В этой статье подробно рассматриваются принципы и последствия этой уязвимости.
Фон уязвимости
Язык Move проводит проверку кода перед выполнением байт-кода, включая проверку безопасности ссылок. Этот процесс делится на несколько этапов, а обнаруженная уязвимость возникла на этапе проверки reference_safety.
Основной процесс проверки безопасности включает в себя:
В этом используется структура AbstractState для представления состояния анализа, содержащая информацию о локальных переменных и графе заимствований.
Подробности уязвимости
Уязвимость возникает в функции join_ в состоянии объединенного анализа. Эта функция использует тип u8 для итерации по локальным переменным, но если сумма длины параметров и длины локальных переменных превышает 256, происходит переполнение целого числа.
Конкретно говоря:
Хотя в Move есть процесс проверки количества локальных переменных, он проверяет только количество локальных переменных и не включает длину параметров.
Эксплуатация уязвимостей
Атакующий может создать циклический кодовый блок, используя переполнение для изменения состояния блока:
Это может вызвать отказ в обслуживании узла.
Влияние уязвимости
Этот уязвимость может привести к:
Рекомендации по исправлению
Итог
Этот недостаток еще раз подтверждает, что даже самые тщательно спроектированные языки могут иметь уязвимости. Для языка Move рекомендуется добавить необходимые проверки безопасности не только на этапе верификации, но и во время выполнения. Специалисты по безопасности продолжат углубленный анализ языка Move, чтобы выявить больше потенциальных проблем.