Back to Blog

Краткий анализ эксплуатации уязвимости CVE-2021–39137 в дикой природе

Code Auditing
August 28, 2021
3 min read

CVE-2021-39137 — это уязвимость, о которой было сообщено и которая была исправлена несколько дней назад. Однако не все узлы Ethereum применили патч. Мы наблюдаем, что эта уязвимость была использована злоумышленниками в транзакции.

Транзакция атаки

https://tx.blocksecteam.com/tx/0x1cb6fb36633d270edefc04d048145b4298e67b8aa82a9e5ec4aa1435dd770ce4

Эта транзакция содержит STATICCALL с адресом 0x4. Это предварительно скомпилированный смарт-контракт dataCopy. Аргументы выглядят следующим образом:

inOffset = 0, inSize = 32, retOffset = 7 и retSize = 32.

Смарт-контракт 0x4

Рисунок 1

Поскольку целью STATICCALL является предварительно скомпилированный контракт 0x4, он выполнит функцию RunPrecompiledContract, показанную на Рисунке 1.

Рисунок 2

Рисунок 3

Согласно Рисункам 2 и 3, смарт-контракт 0x4 просто возвращает ссылку на указатель in.

Рисунок 4

Рисунок 5

Рисунок 4 содержит код для опкода STATICCALL. В строке 751 args указывает на [inOffset ~ inOffset + inSize] памяти EVM, то есть на Mem[0:32].

Согласно Рисунку 5 и анализу логики кода 0x04 (Рисунки 2/3), возвращаемое значение (ret) является ссылкой на ту же область памяти, что и args. То есть оно также указывает на Mem[0:32].

Уязвимость

В уязвимом коде (версия 1.10.7) строка 762 копирует содержимое ret в Mem[retOffset : retOffset + retOffset], то есть копирует Mem[0:32] в Mem[7:7+32]. Эта операция непреднамеренно изменяет содержимое ret. Это означает, что возвращаемое значение предварительно скомпилированного контракта 0x4 было изменено.

В исправленной версии (1.10.8) создается копия ret (строка 766). Это устраняет уязвимость, поскольку копирование в строке 767 не может изменить содержимое ret.

Уязвимость CVE-2021–39137 была использована злоумышленниками из-за того, что узлы не обновили свои патчи вовремя. Этот дефект касался операций с памятью в виртуальной машине Ethereum (EVM), но был исправлен в версии 1.10.8. Для обеспечения безопасности системы рекомендуется всем узлам Ethereum немедленно обновиться до последней версии.

Авторы

Анализ атаки выполнен: Сивэй У (Siwei Wu), Юфэн Ху (Yufeng Hu), Лэй У (Lei Wu), Яцзинь Чжоу (Yajin Zhou) @BlockSec

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit