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

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

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

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

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

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

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

Функция входа для проверки безопасности вызывает analyze_function, чтобы проверить каждый базовый блок. Базовый блок - это последовательность кода, которая не содержит инструкций ветвления, кроме входа и выхода. Язык Move определяет базовые блоки, обходя байт-код и ищет все инструкции ветвления и последовательности циклов.

Язык Move поддерживает два типа ссылок: неизменяемые ссылки & и изменяемые ссылки &mut. Неизменяемые ссылки используются для чтения данных, изменяемые ссылки — для изменения данных. Рациональное использование типов ссылок помогает поддерживать безопасность и идентифицировать модули чтения.

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

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

В процессе верификации будет сравниваться состояние до и после выполнения базового блока, и с помощью изменения join_result будет объединено предшествующее состояние и последующее состояние. Если произошло изменение и текущий блок имеет обратное ребро, указывающее на себя (что означает наличие цикла), то будет выполнен возврат к началу цикла и продолжится выполнение этого базового блока, пока последующее состояние не станет равно предшествующему состоянию или выполнение не будет прервано из-за ошибки.

Уязвимость возникает в процессе проверки изменения результата join. Когда сумма длины параметров и длины локальных переменных превышает 256, использование типа u8 для итерации по локальным переменным может привести к переполнению целого числа. Хотя в Move есть процесс проверки количества локальных переменных, модуль проверки границ проверяет только локальные переменные и не учитывает длину параметров.

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

Эта уязвимость переполнения целого числа может привести к атаке типа отказ в обслуживании (DoS). Злоумышленник может создать циклический код и использовать переполнение для изменения состояния блока, что приведет к тому, что новая карта локальных переменных будет отличаться от предыдущей. При повторном выполнении функции execute_block анализ последовательности байт-кода в базовом блоке будет обращаться к новой карте локальных переменных. Если индекс, который необходимо получить в инструкции, отсутствует в новой карте локальных переменных AbstractState, это приведет к DoS.

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

Чтобы подтвердить этот уязвимость, можно воспроизвести PoC в git. Код в PoC содержит безусловную инструкцию ветвления, которая при каждом выполнении последней инструкции возвращается к первой инструкции, что приводит к многократным вызовам функций execute_block и join.

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

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

В качестве лидера в области исследований безопасности языка Move мы будем продолжать углубленное изучение вопросов безопасности 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

MOVE3.97%
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 6
  • Репост
  • Поделиться
комментарий
0/400
BagHolderTillRetirevip
· 07-22 09:41
Этот баг просто ужасен, переполнение приводит к сбою.
Посмотреть ОригиналОтветить0
MetaverseVagabondvip
· 07-21 19:40
Опять появилась уязвимость переполнения, ужасно
Посмотреть ОригиналОтветить0
HeavenAndEarthAreBlevip
· 07-20 02:27
На хуй ее мать
Посмотреть ОригиналОтветить0
MemeTokenGeniusvip
· 07-20 00:50
Ай-яй, этот баг действительно взорвался.
Посмотреть ОригиналОтветить0
GamefiHarvestervip
· 07-20 00:43
Еще не исправили? Железные неудачники ждут, чтобы их разыграли как лохов.
Посмотреть ОригиналОтветить0
SerumSurfervip
· 07-20 00:40
Черт, снова баг! Убегаю, убегаю~
Посмотреть ОригиналОтветить0
  • Закрепить