Back to Blog

Инцидент с протоколом Loopring (LRC)

Code AuditingPhalcon SecurityMetaSleuth
December 3, 2020
4 min read
Key Insights

Hash(ti)(mod2248)=[b0,b1,,b247]T,где bi{0,1}\text{Hash}(t_i) \pmod{2^{248}} = [b_0, b_1, \dots, b_{247}]^T, где\ b_i \in \{0, 1\}

В ноябре 2020 года критическая уязвимость в хранилище комиссий протокола Loopring (LRC Protocol Fee Vault) позволила злоумышленникам воспользоваться недостатками контроля доступа и манипулировать ценами токенов с помощью атак с использованием мгновенных займов (flash loans). Этот инцидент подчеркивает важность надежного контроля доступа и непрерывного мониторинга безопасности DeFi для предотвращения дорогостоящих взломов.

Введение в инцидент с протоколом Loopring (LRC)

В конце 2020 года несколько DeFi-платформ на базе Ethereum, включая Pickle Finance и 88mph, столкнулись с инцидентами безопасности. Для обнаружения подобных уязвимостей компания BlockSec разработала систему ThunderForecast, которая выявила подозрительные транзакции с необычно большими расхождениями в курсах обмена и систематическим получением прибыли в Ether одним и тем же внешним адресом (EOA).

Используя нашу систему EthScope, мы проанализировали эти транзакции и обнаружили эксплойт, нацеленный на уязвимость в протоколе хранилища Loopring, а именно в LRC Protocol Fee Vault (LRCPFV). В этом блоге подробно описывается атака, ее последствия и уроки, извлеченные для сообщества безопасности DeFi.


Обзор LRC Protocol Fee Vault

Loopring — это протокол децентрализованной биржи (DEX) с открытым исходным кодом на базе Ethereum. Его нативный токен, LRC (ERC-20), используется внутри экосистемы. Протокол хранилища Loopring, известный как LRC Protocol Fee Vault (LRCPFV), хранит комиссии протокола и позволяет обменивать их на токены LRC.

Уязвимая функция в LRCPFV — sellTokenForLRC, которая позволяет обменивать токены на LRC без надлежащего контроля доступа, позволяя любому пользователю вызвать её.

function sellTokenForLRC(
    address token,
    uint amount
)
    external
    nonReentrant
{
    require(amount > 0, "ZERO_AMOUNT");
    require(token != lrcAddress, "PROHIBITED");

    address recipient = tokenSellerAddress == address(0) ? owner : tokenSellerAddress;

    if (token == address(0)) {
        recipient.sendETHAndVerify(amount, gasleft());
    } else {
        token.safeTransferAndVerify(recipient, amount);
    }

    require(
        tokenSellerAddress == address(0) ||
        ITokenSeller(tokenSellerAddress).sellToken(token, lrcAddress),
        "SELL_FAILURE"
    );

    emit TokenSold(token, amount);
}

Поскольку в этой функции отсутствует контроль доступа, злоумышленники могли неоднократно вызывать ее для манипулирования ценами токенов и извлечения прибыли из арбитражных возможностей.


Детали атаки

Мы проанализировали показательную транзакцию атаки: 0x00b2c.... Атака состояла из шести ключевых этапов:

  1. Мгновенный заем (Flash Loan): Заимствовано 3 773,88 ETH у провайдера мгновенных займов (0xEB7e...).
  2. Первоначальный обмен: Конвертировано 3 773,88 ETH в 5 014,68 LRC на Uniswap V1-LRC по курсу 1 ETH = 1,32878 LRC.
  3. Обмен в хранилище комиссий: Обменено 0,231 ETH комиссии, хранящейся в LRCPFV, на 0,000219 LRC путем вызова уязвимой функции sellTokenForLRC. Этот неавторизованный вызов манипулировал ценой LRC на Uniswap, резко увеличив ее стоимость по отношению к ETH (1 ETH = 0,00094 LRC).
  4. Прибыльный обмен: Обменено 5 014,68 LRC обратно на 3 774,09 ETH на Uniswap V1-LRC, получив дополнительно 0,215 ETH благодаря манипуляции ценой.
  5. Возврат займа: Возвращен мгновенный заем в размере 3 773,88 ETH.
  6. Перевод прибыли: 0,215 ETH прибыли переведено на EOA злоумышленника.

Этот эксплойт использовал атаку с мгновенным займом в сочетании с манипуляцией ценой и отсутствием контроля доступа в контракте хранилища.


Воздействие и масштаб атаки

Проанализированная транзакция произошла 13 октября 2020 года. Согласно данным CoinGecko, цена LRC в то время составляла приблизительно 0,0005175 ETH.

Наше расследование показало:

  • Вредоносные контракты: 3, развернутые злоумышленником (0xa896..., 0x414a..., 0xd91d...).
  • Объем атак: 90 транзакций, инициированных EOA злоумышленника (0x81e8...) начиная с блока 9 644 449, в котором был развернут LRCPFV.
  • Максимальная прибыль: Одна транзакция (0x33eab...) принесла 9,89 ETH прибыли.
  • Общая прибыль: Приблизительно 80,97 ETH (~48 849 долларов США по состоянию на 1 октября 2020 года).

Первопричиной стало отсутствие контроля доступа в функции sellTokenForLRC, что позволило многократно эксплуатировать уязвимость.


Начните работу с Phalcon Security

Обнаруживайте все угрозы, оповещайте о важном и блокируйте атаки.

Попробовать бесплатно

Уроки и заключение

По мере роста экосистемы Ethereum DeFi проблемы безопасности, такие как уязвимости контроля доступа, становятся все более критичными. Хотя громкие атаки часто привлекают внимание, менее заметные уязвимости могут привести к значительным финансовым потерям, как показал этот инцидент.

Loopring потеряла около 80,97 ETH из-за этого эксплойта, что подчеркивает необходимость строгого аудита смарт-контрактов и непрерывного мониторинга безопасности.

Для DeFi-протоколов внедрение строгого контроля доступа, использование инструментов, таких как аудит смарт-контрактов и Phalcon Security от BlockSec, а также проактивное управление рисками имеют важное значение для защиты цифровых активов.


Изучите расследования с MetaSleuth

Отслеживайте потоки средств и собирайте доказательства для расследований

Попробовать бесплатно

Хронология инцидента

  • 30.11.2020: Подозрительные транзакции обнаружены системой ThunderForecast.
  • 01.12.2020: Завершен детальный анализ с использованием EthScope.
  • 02.12.2020: Об уязвимости сообщено команде Loopring.
  • 03.12.2020: Уязвимость подтверждена; реализовано исправление.
  • 03.12.2020: Публичное раскрытие деталей инцидента.
  • 03.01.2021: Уязвимости присвоен идентификатор CVE-2020-35962.

Ссылки и дополнительные материалы

Best Security Auditor for Web3

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

BlockSec Audit

Get Real-Time Protection with Phalcon Security

Audits alone are not enough. Phalcon Security detects attacks in real time and blocks threats mid-flight.

phalcon security

Go Deeper with MetaSleuth Investigation

Extend your crypto compliance capabilities with Blocksec's MetaSleuth Investigation, the first platform for tracing funds, mapping transaction networks and revealing hidden on-chain relationships.

Move from detection to resolution faster with clear visual insights and evidence-ready workflows across the digital assets ecosystem.

MetaSleuth Investigation