返回部落格

#7:ParaSpace 事件:與時間賽跑,阻止業界最關鍵的一次攻擊

Code Auditing
2024年2月17日
閱讀約 6 分鐘
核心要點
  • 根本原因:cAPE 的 rebasingIndex 使用了總質押 APE(stakedAmount + 待領獎勵 + 緩衝區),攻擊者可透過 ApeCoinStaking.depositApeCoin() 注入資金以虛增抵押品價值。

  • 攻擊路徑:透過閃電貸借入約 47,352 wstETH,借入 cAPE 並將其存入作為抵押品,透過存入 APE 抬高抵押品價值,再以此借出其他資產。

背景

2023 年 3 月 17 日,NFT 借貸平台 Paraspace(現為 Parallel Finance)因其價格預言機存在漏洞而遭到嚴重攻擊。Paraspace 允許用戶存入 NFT 和 ERC-20 代幣作為抵押品來借入 ERC-20 代幣,使用戶無需出售 NFT 即可獲得收益。

點擊此處閱讀推文
點擊此處閱讀推文

ParaSpace 的一個關鍵功能是 ApeStaking,它可以自動複利 APE 獎勵。質押 APE 的用戶會收到 cAPE 代幣(APE 的 cToken 表示形式),該代幣可用作抵押品來借入 USDC 和 WETH 等資產。存入 cAPE 代幣可獲得 pcAPE 份額,其抵押價值是通過 pcAPE 數量乘以其 rebasingIndex 來計算的。

rebasingIndex 是根據總資金池 APE 餘額和總份額計算得出的,如下面的代碼片段所示:

function _scaledBalanceOf(address user, uint256 rebasingIndex)
    internal
    view
    returns (uint256)
{
    return super.scaledBalanceOf(user).rayMul(rebasingIndex);
}

function lastRebasingIndex() internal view override returns (uint256) {
  return ICApe(_underlyingAsset).getPooledApeByShares(WadRayMath.RAY);
}

function getPooledApeByShares(uint256 sharesAmount)
    public
    view
    returns (uint256)
{
    uint256 totalShares = _getTotalShares();
    if (totalShares == 0) {
        return 0;
    } else {
        return
            sharesAmount.mul(_getTotalPooledApeBalance()).div(totalShares);
    }
}

function _getTotalPooledApeBalance()
    internal
    view
    override
    returns (uint256)
{
    (uint256 stakedAmount, ) = apeStaking.addressPosition(address(this));
    uint256 rewardAmount = apeStaking.pendingRewards(
        APE_COIN_POOL_ID,
        address(this),
        0
    );
    return stakedAmount + rewardAmount + bufferBalance;
}

_getTotalPooledApeBalance() 函數匯總了來自 ApeCoinStaking 合約的質押 APE 代幣、待領取獎勵以及緩衝餘額。

漏洞分析

該漏洞在於對 rebasingIndex 的操縱,這人為抬高了 cAPE 代幣的抵押價值。具體來說,ApeCoinStaking 合約中的 depositApeCoin() 函數會增加頭寸的 stakedAmount。攻擊者可以通過將 APE 代幣存入 cAPE 頭寸來利用這一點,進而抬高 _getTotalPooledApeBalance() 的輸出結果,進而影響 rebasingIndex。

function depositApeCoin(uint256 _amount, address _recipient) public {
    if (_amount < MIN_DEPOSIT) revert DepositMoreThanOneAPE();
    updatePool(APECOIN_POOL_ID);

    Position storage position = addressPosition[_recipient];
    _deposit(APECOIN_POOL_ID, position, _amount);

    apeCoin.transferFrom(msg.sender, address(this), _amount);

    emit Deposit(msg.sender, _amount, _recipient);
}

function _deposit(uint256 _poolId, Position storage _position, uint256 _amount) private {
  Pool storage pool = pools[_poolId];
  _position.stakedAmount += _amount;
  pool.stakedAmount += _amount.toUint96();
  _position.rewardsDebt += (_amount * pool.accumulatedRewardsPerShare).toInt256();
}

這種設計缺陷允許攻擊者通過以 cAPE 作為接收者調用 depositApeCoin() 存入 APE 代幣,從而抬高抵押價值。

攻擊分析

攻擊者通過閃電貸攻擊利用了此漏洞,主要分為五個步驟:

  1. 獲得了約 47,352 wstETH 的閃電貸,並提供了約 46,018 wstETH 通過多個合約借入 cAPE。
  2. 存入約 12,880,000 個 cAPE 代幣作為抵押品。
  3. 將約 1,205 wstETH 兌換為約 492,124 APE 代幣,並將 1,839,999 cAPE 提取為 APE 代幣。
  4. 通過調用 ApeCoinStaking.depositApeCoin() 將 2,332,214 APE 代幣存入 cAPE 頭寸,使協議的質押總額從 851,662 增加到 3,183,876(增加了 373%)。
  5. 利用膨脹的抵押品借入大量 USDC 和 WETH 等資產以獲取利潤。

這種通過閃電貸操縱 pcAPE 價格的行為,利用了預言機計算中對現貨價格的依賴。

開始使用 Phalcon Security

檢測所有威脅,預警重要風險,並攔截攻擊。

立即免費試用

總結

ParaSpace 事件凸顯了 DeFi 協議中預言機操縱和閃電貸攻擊的風險。它強調了建立強大的、抗操縱價格預言機以及在預發布審計之外進行持續安全監控的迫切需求。

BlockSec 的 Phalcon Security 系統通過自動阻止攻擊並保護用戶資產,展示了主動威脅檢測與防禦的價值。此事件提醒各 DeFi 協議必須實施全面的安全措施,包括智能合約審計、基礎設施審計和實時監控。

如需了解更多關於 DeFi 安全事件和最佳實踐的見解,請查看我們的安全事件庫,並考慮使用我們的智能合約審計和基礎設施審計服務。

探索 MetaSleuth 調查

追蹤資金流向並為調查構建證據

立即免費試用

閱讀本系列的其他文章:

Web3 的最佳安全審計服務

在發布前驗證設計、代碼和業務邏輯

訂閱最新動態
超越安全儲存:第 1 部分——設計安全的付款與簽署流程
Security Insights

超越安全儲存:第 1 部分——設計安全的付款與簽署流程

攻擊者未竊取私鑰,未經授權的操作如何取得有效簽章?《Beyond Secure Storage》第 1 部分以 Bitget、Bybit 和 Binance 等事件為例,檢視付款請求、交易建構、簽署、執行與結算各環節的授權失效問題。文章據此歸納防止未經授權操作及限制損失的設計原則,並說明如何透過審查、稽核、滲透測試與演練驗證這些防護措施。

NEAR Intents 遭攻擊:退款漏洞與資安教訓
Security Insights

NEAR Intents 遭攻擊:退款漏洞與資安教訓

NEAR Intents 遭到攻擊時,攻擊者利用金額過大的退款事件,在存入的資產退回後仍保留內部餘額。本文分析重建回執流程及 BNB Chain 上合計 3,865,021 USDT 的七筆出金,將這些資金流出與專案方所稱的資金全數追回區分開來,並概述開發及審計 NEAR 智能合約時應注意的安全事項。

損失約 557萬 USD:X100 Freezer、NEM 遭攻擊 | BlockSec 週報
Security Insights

損失約 557萬 USD:X100 Freezer、NEM 遭攻擊 | BlockSec 週報

本週報涵蓋 2026年10月19日–2026年10月25日 期間發生在 Ethereum 和 BNB Chain 上的兩起安全事件。報告分析了以閃電貸提供資金、奪取 X100 Freezer 治理權的事件,以及影響 BNB Chain 上某個 NEM 代幣流動性池的稅費結算缺陷。報告範圍內的估計損失合計約 557萬 USD:具代表性的 X100 交易造成約 475萬 USD 的損失,NEM 流動性池事件造成約 82.0萬 USD 的損失。此合計金額不包含另行報導的後續 X100 資金提取。

Web3 最佳安全審計方

在上線之前驗證設計、程式碼與業務邏輯,對標業內最高安全標準。

BlockSec 審計