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

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

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

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

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

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

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

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

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

Уязвимость возникает в функции join_. Когда сумма длины параметров и длины локальных переменных превышает 256, функция iter_locals() возвращает итератор типа 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 добавить больше проверочного кода во время выполнения, чтобы предотвратить неожиданные ситуации. В настоящее время безопасность в основном проверяется на этапе верификации, но этого может быть недостаточно. Если верификация будет обойдена, недостаточная защита на этапе выполнения может привести к более серьезным проблемам.

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

MOVE0.89%
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 5
  • Репост
  • Поделиться
комментарий
0/400
GasFeeWhisperervip
· 08-16 04:23
move снова упал
Посмотреть ОригиналОтветить0
StopLossMastervip
· 08-16 03:33
Опять яма, выкопанная своими же.
Посмотреть ОригиналОтветить0
LiquidationWatchervip
· 08-16 03:31
Снова обнаружили уязвимость.
Посмотреть ОригиналОтветить0
ZKProofEnthusiastvip
· 08-16 03:28
Этот баг разросся.
Посмотреть ОригиналОтветить0
ZenMinervip
· 08-16 03:08
Это токсично, move снова нужно будет исправлять.
Посмотреть ОригиналОтветить0
  • Закрепить