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

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

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

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

Процес верифікації мови Move

Мова Move перевіряє одиниці коду перед виконанням байт-коду, цей процес складається з 4 етапів. Виявлена уразливість була знайдена на етапі reference_safety.

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

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

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

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

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

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

  1. Виконати код основного блоку
  2. Стан до та після об'єднання виконання
  3. Оновлення стану блоку
  4. Поширення пост умов на наступні блоки

Цей процес подібний до ідеї Sea of Nodes у V8 turbofan.

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

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

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

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

Цей переповнення цілого числа може призвести до атаки відмови в обслуговуванні ( DoS ). Зловмисник може створити циклічний код, використовуючи переповнення для зміни стану блоку. Коли базовий блок виконується знову, якщо індекс, до якого потрібно звернутися в інструкції, не існує в новому стані, це призведе до аварії програми.

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

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

Ми створили концептуальне підтвердження (PoC), щоб продемонструвати цю вразливість:

  1. Створіть базовий блок, що містить умовні команди, щоб він виконувався кілька разів.
  2. Встановіть загальну кількість параметрів і локальних змінних на 264, що призводить до переповнення довжини нового відображення локальних змінних на 8.
  3. При повторному виконанні базового блоку спроба доступу до неіснуючого індексу локальної змінної викликає panic.

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

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

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

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

Висновок

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

Щодо майбутнього розвитку мови Move, ми рекомендуємо:

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

Як піонери у дослідженні безпеки мови Move, ми продовжимо поглиблене вивчення питань безпеки 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.
  • Нагородити
  • 3
  • Поділіться
Прокоментувати
0/400
SnapshotLaborervip
· 10год тому
Навчався п'ять хвилин, а потім пішов шукати баги.
Переглянути оригіналвідповісти на0
RadioShackKnightvip
· 10год тому
перемістити бруд, що не піднімається на стіну
Переглянути оригіналвідповісти на0
LayerZeroHerovip
· 11год тому
Є що сказати, move також не так вже й круто.
Переглянути оригіналвідповісти на0
  • Закріпити