Розкриття вразливості переповнення цілих чисел у мові Move: небезпеки верифікації байт-коду

robot
Генерація анотацій у процесі

Аналіз вразливості переповнення цілого числа мови Move

Після глибокого дослідження мови Move ми виявили нову уразливість переповнення цілого числа. Ця уразливість виникає на етапі перевірки безпеки посилань у процесі верифікації байт-коду мови Move. У цій статті ми детально проаналізуємо процес спрацьовування цієї уразливості та обговоримо деякі основні концепції мови Move.

Процес верифікації байт-коду Move мови

Перед виконанням байт-коду мова Move проводить перевірку коду, яка ділиться на 4 етапи. Ця вразливість виникла на етапі reference_safety. Цей етап в основному відповідає за перевірку безпеки посилань, включаючи перевірку на наявність висячих посилань, чи безпечний доступ до змінних посилань тощо.

Процес верифікації спочатку визначає основні блоки в коді. Основний блок - це послідовність коду, яка не містить інструкцій розгалуження, крім входу та виходу. Move визначає основні блоки шляхом обходу байт-коду, шукаючи всі інструкції розгалуження та циклічні інструкції.

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

Безпека посилань у Move

Move підтримує два типи посилань: незмінне посилання (&) та змінне посилання (&mut). Модуль безпеки посилань перевіряє байт-код інструкцій кожного базового блоку у функції, щоб підтвердити, що всі операції з посиланнями є законними.

Процес верифікації використовує структуру AbstractState для представлення стану, яка містить граф позик та локальні змінні. Під час верифікації буде порівнюватися стан до та після виконання, а також об'єднуватися оновлені стани блоку.

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

Аналіз вразливостей

Уразливість виникає у функції join_. Ця функція використовується для об'єднання станів до та після виконання, оновлюючи карту locals та граф запозичень. Проблема полягає в тому, що ітератор locals повертає тип u8, і коли сума довжини параметрів та довжини локальних змінних перевищує 256, відбувається переповнення.

Хоча у Move є процес перевірки кількості локальних змінних, він перевіряє лише кількість локальних змінних, а не довжину параметрів.

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

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

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

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

Використання вразливостей

Використовуючи цей переповненість, можна змінити стан базового блоку. У циклі код виконується, після чого стан змінюється. Коли його виконують знову, якщо індекс, який доступний інструкцією, не існує в новій карті локальних змінних, це призведе до паніки, що реалізує DoS-атаку.

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

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

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

Демонстрація PoC

Надано відтворюваний код PoC, який викликає переповнення цілих чисел, спричиняючи збій програми, шляхом налаштування певних параметрів і кількості локальних змінних.

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

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

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

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

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

Підсумок

Ця уразливість ще раз підтверджує важливість аудитів коду. Для мови Move рекомендується додати більше перевірок безпеки під час виконання, а не лише покладатися на перевірки на етапі верифікації. Ми будемо продовжувати глибше досліджувати проблеми безпеки мови Move та вносити свій внесок у її розвиток.

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

Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • 7
  • Поділіться
Прокоментувати
0/400
RektButStillHerevip
· 07-11 04:35
Знову переповнено, тьфу-тьфу.
Переглянути оригіналвідповісти на0
consensus_failurevip
· 07-11 01:01
Виявляється, є ще цей баг
Переглянути оригіналвідповісти на0
SchrodingersPapervip
· 07-09 07:32
move знову відправив? Погрався і програв, погрався і програв
Переглянути оригіналвідповісти на0
DevChivevip
· 07-08 16:28
菜鸟被 обдурювати людей, як лохів
Переглянути оригіналвідповісти на0
ProposalManiacvip
· 07-08 06:09
Раніше говорили, що перевірка параметрів не може бути лише в документації.
Переглянути оригіналвідповісти на0
DegenWhisperervip
· 07-08 06:07
Переповнення трішки лякає, чи не так?
Переглянути оригіналвідповісти на0
ApeWithAPlanvip
· 07-08 05:48
move宁 знову сталася проблема
Переглянути оригіналвідповісти на0
  • Закріпити