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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Посмотреть Оригинал
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Награда
  • 5
  • Поделиться
комментарий
0/400
FUD_Whisperervip
· 8ч назад
Почему так много уязвимостей? Это просто психоз.
Посмотреть ОригиналОтветить0
LadderToolGuyvip
· 07-06 19:13
Переполнение ошибок действительно немало.
Посмотреть ОригиналОтветить0
MetaverseMigrantvip
· 07-06 17:57
Снова заставляет меня почувствовать, что я вернулся к тестированию Solana в 2021 году.
Посмотреть ОригиналОтветить0
ETHReserveBankvip
· 07-06 17:45
move не так уж и хороша
Посмотреть ОригиналОтветить0
RuntimeErrorvip
· 07-06 17:32
Раньше заметил проблему.
Посмотреть ОригиналОтветить0
  • Закрепить