Back to Blog

路印協議 (LRC) 事件

Code AuditingPhalcon SecurityMetaSleuth
December 3, 2020
6 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, \text{其中 } b_i \in \{0, 1\}

在 2020 年 11 月,路印協議(Loopring)的 LRC 協議費用金庫(Protocol Fee Vault)出現了一項嚴重漏洞。攻擊者利用存取控制機制上的缺陷,透過閃電貸攻擊操縱了代幣價格。此事件凸顯了強大的存取控制與持續性的 DeFi 安全監控對於防止高昂代幣損失的重要性。

路印(LRC)協議事件介紹

2020 年底,包括 Pickle Finance 和 88mph 在內的多個以太坊 DeFi 平台經歷了安全事件。為了檢測此類漏洞,BlockSec 開發了 ThunderForecast 系統,該系統識別出了一些可疑交易,這些交易涉及異常巨大的交易匯率差異,且同一個外部擁有帳戶(EOA)獲得了一致的以太幣(Ether)收益。

利用我們的 EthScope 系統,我們分析了這些交易,並發現了一個針對路印金庫協議漏洞的攻擊,具體來說是針對 LRC 協議費用金庫(LRCPFV)。這篇部落格文章詳細介紹了該攻擊、其影響,以及 DeFi 安全社群從中汲取的教訓。


LRC 協議費用金庫概述

路印是一個在以太坊上的開源去中心化交易所(DEX)協議。其原生代幣 LRC (ERC-20) 用於該生態系統中。路印的金庫協議(稱為 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. 閃電貸: 從閃電貸服務商(0xEB7e...)借入 3,773.88 ETH。
  2. 初始兌換: 在 Uniswap V1-LRC 上以 1 ETH = 1.32878 LRC 的匯率將 3,773.88 ETH 兌換為 5,014.68 LRC。
  3. 金庫兌換: 透過呼叫存在漏洞的 sellTokenForLRC 函數,將 LRCPFV 中儲存的 0.231 ETH 費用兌換為 0.000219 LRC。這一未經授權的呼叫操縱了 Uniswap 上的 LRC 價格,極大地提升了其相對於 ETH 的價值(1 ETH = 0.00094 LRC)。
  4. 獲利兌換: 在 Uniswap V1-LRC 上將 5,014.68 LRC 換回 3,774.09 ETH,由於價格被操縱,額外獲得了 0.215 ETH。
  5. 歸還貸款: 歸還 3,773.88 ETH 的閃電貸。
  6. 轉移利潤: 將 0.215 ETH 的利潤發送到攻擊者的 EOA。

此漏洞利用了閃電貸攻擊,結合了價格操縱與金庫合約中缺乏存取控制的缺陷。


攻擊影響與規模

該分析交易發生於 2020 年 10 月 13 日。根據 CoinGecko 的數據,當時 LRC 的價格約為 0.0005175 ETH。

我們的調查發現:

  • 惡意合約: 攻擊者部署了 3 個合約(0xa896..., 0x414a..., 0xd91d...)。
  • 攻擊數量: 自 LRCPFV 部署所在的區塊 9,644,449 以來,攻擊者的 EOA(0x81e8...)發起了 90 筆交易。
  • 最大利潤: 單筆交易(0x33eab...)產生了 9.89 ETH 的利潤。
  • 總利潤: 約 80.97 ETH(截至 2020 年 10 月 1 日約為 48,849 美元)。

根本原因是 sellTokenForLRC 函數缺失存取控制,使得攻擊可以反覆進行。


開始使用 Phalcon Security

檢測所有威脅,預警關鍵風險,並阻擋攻擊。

立即免費試用

教訓與總結

隨著以太坊 DeFi 生態系統的成長,存取控制漏洞等安全挑戰變得日益關鍵。雖然備受矚目的攻擊往往能吸引目光,但正如本事件所展示的,較不顯眼的漏洞也可能造成重大的金融損失。

路印因這項漏洞損失了約 80.97 ETH,這強調了進行嚴格智慧合約審計與持續安全監控的必要性。

對於 DeFi 協議而言,實施嚴格的存取控制、利用如 BlockSec 的智慧合約審計Phalcon Security 等工具,以及主動的風險管理,是保護數位資產的核心關鍵。


探索 MetaSleuth 調查

追蹤資金流向,為審計調查建立證據

立即免費試用

事件時間軸

  • 2020/11/30: ThunderForecast 檢測到可疑交易。
  • 2020/12/01: 使用 EthScope 完成詳細分析。
  • 2020/12/02: 向路印團隊通報漏洞。
  • 2020/12/03: 確認漏洞;並完成修復。
  • 2020/12/03: 公開事件詳情。
  • 2021/01/03: 該漏洞被分配為 CVE-2020-35962。

參考文獻與進一步閱讀

Sign up for the latest updates

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