Аналіз вразливості переповнення цілого числа в модулі безпеки Move
Ця стаття глибоко проаналізує нововиявлену у Move мові вразливість переповнення цілого числа. Ця вразливість існує в модулі перевірки безпеки посилань і може призвести до збоїв вузлів. Завдяки цьому поясненню читачі отримають більш глибоке розуміння Move мови.
Фон вразливості
Перед виконанням байт-коду мова Move проходить перевірку коду, яка ділиться на 4 етапи. Ця вразливість виникає під час етапу перевірки безпеки (reference_safety).
Основний процес перевірки безпеки є:
Визначення базових кодових блоків
Провести аналіз кожного базового блоку
Стан до і після злиття
Поширення стану до наступних блоків
Ключовим є підтримка структури AbstractState, яка містить locals і borrow graph для забезпечення безпеки посилань.
Деталі вразливості
Уразливість існує в функції join_. Коли довжина параметрів функції плюс довжина локальних змінних перевищує 256, через використання типу u8 для ітерації може виникнути переповнення цілого числа.
Конкретно кажучи:
iter_locals() повертає ітератор типу u8
Виникає переповнення, коли довжина параметра + довжина локальної змінної > 256
Розробник перевірив лише кількість локальних змінних, ігноруючи довжину параметрів.
Використання вразливостей
Можна побудувати базовий блок циклу, використовуючи переповнення для зміни стану:
Загальна довжина параметрів і локальних змінних більше 256
Після першого виконання, довжина нових locals переповнює менше.
Під час повторного виконання доступ до неіснуючого індексу locals викликав паніку
Демонстрація PoC
Надає відтворюваний код PoC, що містить базовий блок з безкінечним циклом. Встановивши відповідні параметри та довжину локальних змінних, можна викликати DoS.
Висновок
Ця уразливість ще раз підтверджує:
Не існує абсолютно безпечного коду
Важливість аудиту коду
Для виконання Move потрібні додаткові перевірки безпеки
Статичну верифікацію можна обійти, безпечність під час виконання також важлива
Як лідери в області досліджень безпеки мови Move, ми продовжимо глибше вивчати відповідні питання безпеки та ділитися результатами досліджень з громадою.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
21 лайків
Нагородити
21
8
Поділіться
Прокоментувати
0/400
WhaleMinion
· 07-26 05:03
Атака переповнення u8 вже прийшла
Переглянути оригіналвідповісти на0
MevTears
· 07-24 04:19
Цей код хто написав, не перевіривши десять разів.
Переглянути оригіналвідповісти на0
GasFeeCryer
· 07-23 13:34
Вразливості можна експлуатувати, і ще є DoS, смачно!
Переглянути оригіналвідповісти на0
TopEscapeArtist
· 07-23 05:47
Помилки — це повсякденність ведмежого ринку, а під час роботи з криптовалютою потрібно бути особливо обережним.
Переглянути оригіналвідповісти на0
TokenomicsTherapist
· 07-23 05:45
Цей баг справді страшний.
Переглянути оригіналвідповісти на0
TxFailed
· 07-23 05:43
лмфо класичний переповненіе цілого числа... навчився про це дорогим способом, якщо чесно
Переглянути оригіналвідповісти на0
SchrödingersNode
· 07-23 05:40
Це мене лякає, чому так багато проблем?
Переглянути оригіналвідповісти на0
AltcoinMarathoner
· 07-23 05:40
тримання під час шторми з переповненням цілого... ще одна контрольна точка в веб3 ультра
Глибина аналізу вразливості переповнення цілих чисел у модулі безпеки мови Move
Аналіз вразливості переповнення цілого числа в модулі безпеки Move
Ця стаття глибоко проаналізує нововиявлену у Move мові вразливість переповнення цілого числа. Ця вразливість існує в модулі перевірки безпеки посилань і може призвести до збоїв вузлів. Завдяки цьому поясненню читачі отримають більш глибоке розуміння Move мови.
Фон вразливості
Перед виконанням байт-коду мова Move проходить перевірку коду, яка ділиться на 4 етапи. Ця вразливість виникає під час етапу перевірки безпеки (reference_safety).
Основний процес перевірки безпеки є:
Ключовим є підтримка структури AbstractState, яка містить locals і borrow graph для забезпечення безпеки посилань.
Деталі вразливості
Уразливість існує в функції join_. Коли довжина параметрів функції плюс довжина локальних змінних перевищує 256, через використання типу u8 для ітерації може виникнути переповнення цілого числа.
Конкретно кажучи:
Використання вразливостей
Можна побудувати базовий блок циклу, використовуючи переповнення для зміни стану:
Демонстрація PoC
Надає відтворюваний код PoC, що містить базовий блок з безкінечним циклом. Встановивши відповідні параметри та довжину локальних змінних, можна викликати DoS.
Висновок
Ця уразливість ще раз підтверджує:
Як лідери в області досліджень безпеки мови Move, ми продовжимо глибше вивчати відповідні питання безпеки та ділитися результатами досліджень з громадою.