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。

參考文獻與進一步閱讀

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