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

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

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

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

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

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

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

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

Ключевым моментом является поддержание структуры AbstractState, которая включает locals и граф займов для обеспечения безопасности ссылок.

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

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

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

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

  • iter_locals() возвращает итератор типа u8
  • Переполнение происходит, когда длина параметра + длина локальной переменной > 256
  • Разработчик проверял только количество локальных переменных, игнорируя длину параметров.

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

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

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

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

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

Демонстрация PoC

Предоставлен воспроизводимый код PoC, содержащий базовый блок с бесконечным циклом. Установив соответствующие параметры и длину локальных переменных, можно вызвать DoS.

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

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

Вывод

Этот недостаток еще раз подчеркивает:

  1. Нет абсолютно безопасного кода
  2. Важность аудита кода
  3. Для выполнения языка Move требуется больше проверок безопасности
  4. Статическая проверка может быть обойдена, безопасность во время выполнения также важна.

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

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

MOVE-6.11%
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 8
  • Поделиться
комментарий
0/400
WhaleMinionvip
· 07-26 05:03
Пришли атаки переполнения u8
Посмотреть ОригиналОтветить0
MevTearsvip
· 07-24 04:19
Кто написал этот код, не проверив его десять раз?
Посмотреть ОригиналОтветить0
GasFeeCryervip
· 07-23 13:34
Уязвимости можно использовать, и есть DoS, классно!
Посмотреть ОригиналОтветить0
TopEscapeArtistvip
· 07-23 05:47
Ошибки – это повседневность медвежьего рынка, а при搬砖 нужно быть осторожным.
Посмотреть ОригиналОтветить0
TokenomicsTherapistvip
· 07-23 05:45
Этот баг просто ужасен.
Посмотреть ОригиналОтветить0
TxFailedvip
· 07-23 05:43
лmao классический переполнение целого числа... узнал об этом дорогим способом, честно говоря
Посмотреть ОригиналОтветить0
SchrödingersNodevip
· 07-23 05:40
Меня это сильно беспокоит, почему так много проблем?
Посмотреть ОригиналОтветить0
AltcoinMarathonervip
· 07-23 05:40
держимся сквозь бурю переполнения целых чисел... просто еще одна веха в ultra web3
Посмотреть ОригиналОтветить0
  • Закрепить