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

Під час процесу перевірки система виконує базовий блок коду, генеруючи пост-стан, а потім об'єднує попередній стан та пост-стан для оновлення стану блоку. Якщо стан змінюється і існує цикл, базовий блок буде виконуватись повторно, поки пост-стан не стане рівним попередньому стану або не виникне помилка.

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-2.82%
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • 6
  • Поділіться
Прокоментувати
0/400
TokenUnlockervip
· 20год тому
Чому знову переповнення цілого числа?
Переглянути оригіналвідповісти на0
BearMarketGardenervip
· 08-04 12:22
знову щось сталося з move
Переглянути оригіналвідповісти на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
  • Закріпити