Разоблачение уязвимости переполнения целых чисел в языке Move: опасности валидации байт-кода

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

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

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

Процесс верификации байт-кода языка Move

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

Процесс верификации сначала будет идентифицировать основные блоки в коде. Основной блок — это последовательность кода, которая не содержит управляющих инструкций, кроме входных и выходных. Move определяет основные блоки, обходя байт-код и ищя все управляющие инструкции и циклы.

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

Безопасность ссылок в Move

Move поддерживает два типа ссылок: неизменяемые ссылки (&) и изменяемые ссылки (&mut). Модуль безопасности ссылок будет сканировать байт-код инструкций каждого базового блока в функции и проверять, законны ли все операции со ссылками.

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

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

Анализ уязвимостей

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

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

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

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

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

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

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

Используя этот переполнение, можно изменить состояние базового блока. В цикле кода состояние изменяется после выполнения базового блока. При следующем выполнении, если индекс, к которому обращается инструкция, не существует в новой локальной карте, это приведет к панике, что позволит осуществить DoS-атаку.

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

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

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

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

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

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

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

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

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

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

Резюме

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

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

Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 7
  • Поделиться
комментарий
0/400
RektButStillHerevip
· 07-11 04:35
Снова переполнение, тьфу-тьфу.
Посмотреть ОригиналОтветить0
consensus_failurevip
· 07-11 01:01
Какой же это баг!
Посмотреть ОригиналОтветить0
SchrodingersPapervip
· 07-09 07:32
move снова отправил? Все пошло не так, все пошло не так.
Посмотреть ОригиналОтветить0
DevChivevip
· 07-08 16:28
菜鸟被 разыгрывайте людей как лохов
Посмотреть ОригиналОтветить0
ProposalManiacvip
· 07-08 06:09
Ранее говорилось, что проверка параметров не должна быть только в документации.
Посмотреть ОригиналОтветить0
DegenWhisperervip
· 07-08 06:07
Переполнение немного пугает, не так ли?
Посмотреть ОригиналОтветить0
ApeWithAPlanvip
· 07-08 05:48
move Нин снова попал в беду
Посмотреть ОригиналОтветить0
  • Закрепить