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

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

Виявлення нової уразливості переповнення цілого числа в модулі безпеки Move мови

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

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

Механізм безпеки посилань Move мови

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

Процес перевірки переважно включає наступні етапи:

  1. Аналізуйте кожен основний блок
  2. Виконати код основного блоку для генерації пост-стану
  3. Об'єднання pre state та post state
  4. Оновіть стан блоку та розповсюдьте його на наступні блоки

Серед них state містить два ключові компоненти: locals і borrow graph, які забезпечують безпеку посилань у функції.

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

Деталі вразливості

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

Конкретно кажучи:

  • iter_locals() повертає ітератор типу u8
  • Коли довжина параметра + довжина локальної змінної перевищує 256, відбудеться переповнення
  • Розробники, здається, усвідомлюють необхідність перевірки цього, але фактичний код перевіряє лише кількість локальних змінних.

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

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

Використовуючи цю уразливість, можна створити циклічний кодовий блок:

  1. Перший запуск призводить до переповнення, змінює карту locals
  2. Під час другого виконання доступ до неіснуючого індексу locals викликав паніку

Це призведе до збоїв у вузлах, що призведе до атаки відмови в обслуговуванні.

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

Відтворення вразливості

Дослідники надали PoC для відтворення цього вразливості:

  1. Встановіть parameters та locals обидва на SignatureIndex(0), щоб num_locals дорівнював 264.
  2. Після першого виконання довжина нового локального мапи змінилася на 8
  3. При другому виконанні, copyloc(57) доступ до неіснуючого 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

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

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

Підсумок та рекомендації

Цей вразливість пояснює:

  1. Немає абсолютно безпечного коду, статична перевірка може бути обійдена
  2. Аудит коду дуже важливий, він може виявити недогляди розробників.
  3. Мова Move повинна додати перевірку під час виконання, а не лише покладатися на перевірки безпеки на етапі валідації.

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

Numen Cyber виявило ще одну небезпечну уразливість 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.
  • Нагородити
  • 7
  • Поділіться
Прокоментувати
0/400
SmartContractWorkervip
· 11год тому
Знову вийшло з каструлі, довелося повісити на ремонт.
Переглянути оригіналвідповісти на0
staking_grampsvip
· 07-06 05:24
Цей баг виглядає досить недосвідчено.
Переглянути оригіналвідповісти на0
ChainMaskedRidervip
· 07-06 05:22
Робота з кодом занадто неакуратна, чи не так?
Переглянути оригіналвідповісти на0
MissedTheBoatvip
· 07-06 05:20
Знову з'явився пролом, Move теж не дуже.
Переглянути оригіналвідповісти на0
GateUser-c799715cvip
· 07-06 05:19
Хто написав код? Чому він такий поганий?
Переглянути оригіналвідповісти на0
YieldChaservip
· 07-06 05:17
знову виникли проблеми
Переглянути оригіналвідповісти на0
BridgeJumpervip
· 07-06 05:09
Розробка не відповідає стандартам, дві сльози під час виправлення помилок.
Переглянути оригіналвідповісти на0
  • Закріпити