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

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

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

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

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

Язык Move проверяет единицы кода перед выполнением байт-кода, а весь процесс проверки делится на 4 шага. Обнаруженная уязвимость возникла на этапе reference_safety.

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

В языке Move базовый блок — это последовательность кода, которая не содержит инструкций ветвления, кроме входа и выхода. Система определяет базовые блоки, проходя по байт-коду и ища все инструкции ветвления и последовательности циклов.

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

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

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

В процессе валидации система выполняет генерацию кода базового блока для post state, а затем объединяет pre state и post state для обновления состояния блока. Если состояние изменяется и существует цикл, базовый блок будет выполняться повторно, пока post state не станет равным pre state или не произойдет ошибка.

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

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

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

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

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

Чтобы продемонстрировать эту уязвимость, мы можем построить базовый блок, содержащий безусловные инструкции ветвления. Установив соответствующие параметры и количество локальных переменных, можно вызвать переполнение длины locals map до 8. При второй попытке выполнения доступ к несуществующему offset приведет к панике.

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

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

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

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

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

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

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

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

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

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

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

MOVE-0.39%
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 6
  • Поделиться
комментарий
0/400
TokenUnlockervip
· 14ч назад
Почему снова переполнение целого числа?
Посмотреть ОригиналОтветить0
BearMarketGardenervip
· 21ч назад
с движением снова произошла проблема
Посмотреть ОригиналОтветить0
RunWithRugsvip
· 08-02 18:07
Почему снова возникла уязвимость в безопасности?
Посмотреть ОригиналОтветить0
TestnetFreeloadervip
· 08-02 18:07
Снова появилась поверхность атаки, ура!
Посмотреть ОригиналОтветить0
JustAnotherWalletvip
· 08-02 18:02
Снова произошла проблема, ответственность на проверке.
Посмотреть ОригиналОтветить0
LiquidityNinjavip
· 08-02 18:01
Снова нужно исправить move хе-хе
Посмотреть ОригиналОтветить0
  • Закрепить