Анализ уязвимости переполнения целочисленного типа в безопасном модуле Move языка
В этой статье будет подробно проанализирована недавно обнаруженная уязвимость переполнения целого числа в языке Move. Эта уязвимость существует в модуле проверки безопасности ссылок и может привести к сбою узла. Благодаря объяснению в этой статье читатели получат более глубокое понимание языка Move.
Фон уязвимости
Язык Move выполняет проверку кода перед выполнением байт-кода, которая состоит из 4 этапов. Эта уязвимость возникает на этапе проверки ссылки безопасности (reference_safety).
Основной процесс проверки безопасности заключается в следующем:
Определение основных блоков кода
Проведение анализа каждого базового блока
Состояние до и после объединения
Распространение состояния в последующие блоки
Ключевым моментом является поддержание структуры AbstractState, которая включает locals и граф займов для обеспечения безопасности ссылок.
Подробности уязвимости
Уязвимость существует в функции join_. Когда длина параметров функции плюс длина локальных переменных превышает 256, возникает переполнение целого числа из-за использования типа u8 для итерации.
Конкретно говоря:
iter_locals() возвращает итератор типа u8
Переполнение происходит, когда длина параметра + длина локальной переменной > 256
Разработчик проверял только количество локальных переменных, игнорируя длину параметров.
Эксплуатация уязвимости
Можно создать базовый блок цикла, используя переполнение для изменения состояния:
Установите общую длину параметров и локальных переменных больше 256
После первого выполнения длина новых локальных переменных уменьшилась из-за переполнения.
При повторном выполнении обращение к несуществующему индексу locals приводит к панике
Демонстрация PoC
Предоставлен воспроизводимый код PoC, содержащий базовый блок с бесконечным циклом. Установив соответствующие параметры и длину локальных переменных, можно вызвать DoS.
Вывод
Этот недостаток еще раз подчеркивает:
Нет абсолютно безопасного кода
Важность аудита кода
Для выполнения языка Move требуется больше проверок безопасности
Статическая проверка может быть обойдена, безопасность во время выполнения также важна.
В качестве лидера в области исследований безопасности языка Move, мы будем продолжать углубленно исследовать связанные проблемы безопасности и делиться результатами исследований с сообществом.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
21 Лайков
Награда
21
8
Поделиться
комментарий
0/400
WhaleMinion
· 07-26 05:03
Пришли атаки переполнения u8
Посмотреть ОригиналОтветить0
MevTears
· 07-24 04:19
Кто написал этот код, не проверив его десять раз?
Посмотреть ОригиналОтветить0
GasFeeCryer
· 07-23 13:34
Уязвимости можно использовать, и есть DoS, классно!
Посмотреть ОригиналОтветить0
TopEscapeArtist
· 07-23 05:47
Ошибки – это повседневность медвежьего рынка, а при搬砖 нужно быть осторожным.
Посмотреть ОригиналОтветить0
TokenomicsTherapist
· 07-23 05:45
Этот баг просто ужасен.
Посмотреть ОригиналОтветить0
TxFailed
· 07-23 05:43
лmao классический переполнение целого числа... узнал об этом дорогим способом, честно говоря
Посмотреть ОригиналОтветить0
SchrödingersNode
· 07-23 05:40
Меня это сильно беспокоит, почему так много проблем?
Посмотреть ОригиналОтветить0
AltcoinMarathoner
· 07-23 05:40
держимся сквозь бурю переполнения целых чисел... просто еще одна веха в ultra web3
Глубина анализа уязвимости переполнения целого числа в модуле безопасности языка Move
Анализ уязвимости переполнения целочисленного типа в безопасном модуле Move языка
В этой статье будет подробно проанализирована недавно обнаруженная уязвимость переполнения целого числа в языке Move. Эта уязвимость существует в модуле проверки безопасности ссылок и может привести к сбою узла. Благодаря объяснению в этой статье читатели получат более глубокое понимание языка Move.
Фон уязвимости
Язык Move выполняет проверку кода перед выполнением байт-кода, которая состоит из 4 этапов. Эта уязвимость возникает на этапе проверки ссылки безопасности (reference_safety).
Основной процесс проверки безопасности заключается в следующем:
Ключевым моментом является поддержание структуры AbstractState, которая включает locals и граф займов для обеспечения безопасности ссылок.
Подробности уязвимости
Уязвимость существует в функции join_. Когда длина параметров функции плюс длина локальных переменных превышает 256, возникает переполнение целого числа из-за использования типа u8 для итерации.
Конкретно говоря:
Эксплуатация уязвимости
Можно создать базовый блок цикла, используя переполнение для изменения состояния:
Демонстрация PoC
Предоставлен воспроизводимый код PoC, содержащий базовый блок с бесконечным циклом. Установив соответствующие параметры и длину локальных переменных, можно вызвать DoS.
Вывод
Этот недостаток еще раз подчеркивает:
В качестве лидера в области исследований безопасности языка Move, мы будем продолжать углубленно исследовать связанные проблемы безопасности и делиться результатами исследований с сообществом.