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

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

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

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

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

Механизм безопасной ссылочной системы языка Move

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

Процесс верификации в основном включает в себя следующие шаги:

  1. Проведите анализ каждого базового блока
  2. Выполнение кода основного блока для генерации пост-состояния
  3. Объединить pre state и post state
  4. Обновить состояние блока и распространить его на последующие блоки

В данном случае, state содержит два ключевых компонента: locals и borrow graph, которые предназначены для обеспечения безопасности ссылок в функции.

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

Детали уязвимости

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

Конкретно говоря:

  • iter_locals() возвращает итератор типа u8
  • Переполнение произойдет, когда длина параметра + длина локальной переменной > 256
  • Разработчики, похоже, осознали необходимость проверки этого, но фактический код проверяет только количество локальных переменных.

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

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

Используя эту уязвимость, можно создать циклический блок кода:

  1. При первом выполнении возникает переполнение, изменяется карта locals
  2. При повторном выполнении доступ к несуществующему индексу locals приводит к панике

Это может привести к сбою узлов и вызвать атаку отказа в обслуживании.

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

Воспроизведение уязвимости

Исследователи предоставили PoC для воспроизведения этой уязвимости:

  1. Установите параметры и локальные переменные как SignatureIndex(0), чтобы num_locals было равно 264
  2. После первого выполнения длина новой карты locals становится 8
  3. При втором выполнении, copyloc(57) доступ к несуществующему 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

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

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

Резюме и рекомендации

Этот уязвимость говорит о:

  1. Нет абсолютно безопасного кода, статическая проверка может быть обойдена.
  2. Аудит кода очень важен, он может выявить упущения разработчиков.
  3. Язык Move должен добавить проверки во время выполнения, а не полагаться только на проверки безопасности на стадии валидации.

Исследователи призвали разработчиков языка 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.
  • Награда
  • 7
  • Поделиться
комментарий
0/400
SmartContractWorkervip
· 9ч назад
Снова на выходе! При ремонте придется повозиться.
Посмотреть ОригиналОтветить0
staking_grampsvip
· 07-06 05:24
Этот уязвимость слишком примитивна, не так ли?
Посмотреть ОригиналОтветить0
ChainMaskedRidervip
· 07-06 05:22
Наверное, мастерство написания кода слишком неаккуратно.
Посмотреть ОригиналОтветить0
MissedTheBoatvip
· 07-06 05:20
Снова обнаружена уязвимость, Move тоже не очень.
Посмотреть ОригиналОтветить0
GateUser-c799715cvip
· 07-06 05:19
Кто написал код? Какой он плохой.
Посмотреть ОригиналОтветить0
YieldChaservip
· 07-06 05:17
u8 снова возникла проблема
Посмотреть ОригиналОтветить0
BridgeJumpervip
· 07-06 05:09
Нерациональная разработка, две слезы на исправление ошибок
Посмотреть ОригиналОтветить0
  • Закрепить