Back to Blog

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

Code Auditing
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

Sign up for the latest updates
Взлом Bitget на $387,5 млн вне блокчейна: не только ключи и контракты
Security Insights

Взлом Bitget на $387,5 млн вне блокчейна: не только ключи и контракты

24.09.2026 хакеры взломали сторонний продукт, похитили учётные данные и подделали выводы. Похищено ~$387,5 млн со счетов Bitget (Ethereum, EVM, XRP Ledger, Zcash, TRON); ключи целы. Обзор инцидента, конвертации активов, мер защиты и blockchain-пентеста.

Потеряно ~11,3 млн $: Multicall Router, Nostra | BlockSec Weekly
Security Insights

Потеряно ~11,3 млн $: Multicall Router, Nostra | BlockSec Weekly

Отчёт (14–20.09.2026): 2 инцидента, ~$11.3M потерь на Ethereum и Starknet. Мультиколл-роутер обманул Safe, выведя ~2900 aEthrsETH в пул Uniswap v4. Оракул Nostra оценил NSTR в ~$49.52, дав ~$3.5M займов под завышенный залог.

Потеряно ~320 млн $: взломы Liquid Network и Symbiosis | BlockSec
Security Insights

Потеряно ~320 млн $: взломы Liquid Network и Symbiosis | BlockSec

Отчёт за 2026/09/07–2026/09/13: два инцидента, ~$320М убытков. Эксплойт Liquid Network (кэш rangeproof без разделителей полей) дал 4000 незалогового L-BTC. На Bitcoin-маршруте Symbiosis отрицательная комиссия позволила выпустить триллионы syBTC — убыток ~9.97 BTC (~$770K).

Best Security Auditor for Web3

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

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