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

MOVE1.62%
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією 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
  • Закріпити