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

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

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

Нещодавно, під час поглибленого вивчення мови Move, ми виявили новий вразливість переповнення цілого числа. Ця вразливість існує в процесі перевірки безпеки посилань, а процес її активації є досить цікавим. У цій статті ми детально проаналізуємо цю вразливість і розглянемо деякі відповідні знання про мову Move.

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

Модуль перевірки безпеки посилань визначає функцію перенесення для перевірки безпеки посилань суб'єкта процесу. Його зміст перевірки включає в себе перевірку на відсутність висячих посилань, чи є доступ до змінних посилань безпечним, чи є доступ до глобальних посилань безпечним тощо.

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

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

Move мова підтримує два типи посилань: незмінні посилання & та змінні посилання &mut. Незмінні посилання використовуються для читання даних, змінні посилання - для зміни даних. Розумне використання типів посилань допомагає підтримувати безпеку та ідентифікувати модулі читання.

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

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

Під час верифікації буде порівнюватися стан до і після виконання базового блоку, і за зміною join_result буде об'єднано pre state і post state. Якщо відбулася зміна, і в поточному блоці є зворотний зв'язок, що вказує на самого себе (що вказує на наявність циклу), буде виконано перехід назад на початок циклу, і продовжиться виконання цього базового блоку, доки post state не стане рівним pre state або не буде зупинено через помилку.

Вразливість виникає в процесі перевірки того, чи змінився результат об'єднання. Коли сума довжини параметрів та довжини локальних змінних перевищує 256, використання типу 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

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

MOVE-2.09%
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • 6
  • Поділіться
Прокоментувати
0/400
BagHolderTillRetirevip
· 07-22 09:41
Цей баг справді неймовірний, переповнення призвело до збоїв.
Переглянути оригіналвідповісти на0
MetaverseVagabondvip
· 07-21 19:40
Знову з'явилася уразливість переповнення, жахливо
Переглянути оригіналвідповісти на0
HeavenAndEarthAreBlevip
· 07-20 02:27
Йоб твою матір
Переглянути оригіналвідповісти на0
MemeTokenGeniusvip
· 07-20 00:50
Ой, цей баг справді вибухнув.
Переглянути оригіналвідповісти на0
GamefiHarvestervip
· 07-20 00:43
Ще не виправили вчасно? Залізні невдахи чекають, щоб їх обдурювали, як лохів.
Переглянути оригіналвідповісти на0
SerumSurfervip
· 07-20 00:40
О, знову виявили баг. Я пішов, пішов~
Переглянути оригіналвідповісти на0
  • Закріпити