Уязвимость переполнения целого числа в модуле безопасности Move языка может привести к отказу узла в обслуживании

robot
Генерация тезисов в процессе

Уязвимость переполнения целого числа в модуле безопасности Move языка

Недавно исследователи в области безопасности обнаружили серьезную уязвимость переполнения целого числа при глубоком анализе языка Move. Эта уязвимость существует в модуле проверки безопасности ссылок и может привести к атакам отказа в обслуживании. В этой статье подробно рассматриваются принципы и последствия этой уязвимости.

Фон уязвимости

Язык Move проводит проверку кода перед выполнением байт-кода, включая проверку безопасности ссылок. Этот процесс делится на несколько этапов, а обнаруженная уязвимость возникла на этапе проверки reference_safety.

Основной процесс проверки безопасности включает в себя:

  1. Разделите код на базовые блоки
  2. Провести анализ каждого основного блока
  3. Состояние до и после объединения анализа
  4. Распространение результатов на последующие блоки

В этом используется структура AbstractState для представления состояния анализа, содержащая информацию о локальных переменных и графе заимствований.

Numen Cyber эксклюзивно обнаружил еще одну уязвимость в языке move

Подробности уязвимости

Уязвимость возникает в функции join_ в состоянии объединенного анализа. Эта функция использует тип u8 для итерации по локальным переменным, но если сумма длины параметров и длины локальных переменных превышает 256, происходит переполнение целого числа.

Конкретно говоря:

  • использование self.iter_locals() для итерации по locals в функции join_
  • iter_locals() возвращает итератор типа u8
  • Если длина параметров + длина локальных переменных > 256, итератор переполнится

Хотя в Move есть процесс проверки количества локальных переменных, он проверяет только количество локальных переменных и не включает длину параметров.

Numen Cyber эксклюзивно обнаружил еще одну уязвимость в языке move

Numen Cyber эксклюзивно обнаружил еще одну уязвимость в языке move

Numen Cyber эксклюзивно обнаружил еще одну уязвимость в языке move

Numen Cyber эксклюзивно обнаружил еще одну уязвимость в языке move

Numen Cyber эксклюзивно обнаружил еще одну высокую уязвимость в языке move

Numen Cyber эксклюзивно обнаружил еще одну уязвимость в языке move

Numen Cyber эксклюзивно обнаружил еще одну уязвимость высокого уровня в языке move

Numen Cyber эксклюзивно обнаружил еще одну уязвимость в языке move

Numen Cyber эксклюзивно обнаружил еще одну уязвимость в языке move

Numen Cyber эксклюзивно обнаружил еще одну высокую уязвимость в языке move

Эксплуатация уязвимостей

Атакующий может создать циклический кодовый блок, используя переполнение для изменения состояния блока:

  1. Общее количество параметров и локальных переменных больше 256
  2. После первого выполнения длина новой карты locals будет переполнена и уменьшится
  3. Повторное выполнение приведет к панике, если обратиться к несуществующему индексу locals.

Это может вызвать отказ в обслуживании узла.

Numen Cyber эксклюзивно обнаружил еще одну уязвимость в языке move

Numen Cyber эксклюзивно обнаружил ещё одну уязвимость в языке move

Numen Cyber эксклюзивно обнаружил еще одну высокоуровневую уязвимость в языке move

Влияние уязвимости

Этот уязвимость может привести к:

  1. Краш верфикатора байт-кода Move
  2. Узлы блокчейна, зависящие от Move, отказываются в обслуживании
  3. Обойти некоторые проверки безопасности

Рекомендации по исправлению

  1. Добавить проверку длины параметров в проверку границ locals
  2. Используйте более крупные целочисленные типы, такие как u16, для итерации по locals
  3. Добавление дополнительных проверок безопасности во время выполнения

Итог

Этот недостаток еще раз подтверждает, что даже самые тщательно спроектированные языки могут иметь уязвимости. Для языка Move рекомендуется добавить необходимые проверки безопасности не только на этапе верификации, но и во время выполнения. Специалисты по безопасности продолжат углубленный анализ языка Move, чтобы выявить больше потенциальных проблем.

Numen Cyber эксклюзивно обнаружил еще одну уязвимость в языке move

MOVE3.16%
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 6
  • Репост
  • Поделиться
комментарий
0/400
BackrowObservervip
· 08-11 11:51
move снова провалился
Посмотреть ОригиналОтветить0
MidnightTradervip
· 08-10 07:32
Это опять какой-то новичок написал код, я на коленях.
Посмотреть ОригиналОтветить0
MevShadowrangervip
· 08-10 07:30
Снова играем с переполнением целых чисел
Посмотреть ОригиналОтветить0
WagmiOrRektvip
· 08-10 07:29
Хорошо, что я раньше закрыл все позиции Move.
Посмотреть ОригиналОтветить0
CommunityWorkervip
· 08-10 07:27
move снова собирается взорваться? Чего паниковать?
Посмотреть ОригиналОтветить0
CryingOldWalletvip
· 08-10 07:26
Снова уязвимость? move уже не так привлекателен, не правда ли?
Посмотреть ОригиналОтветить0
  • Закрепить