背景
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 代幣,從而抬高抵押價值。
攻擊分析
攻擊者通過閃電貸攻擊利用了此漏洞,主要分為五個步驟:
- 獲得了約 47,352 wstETH 的閃電貸,並提供了約 46,018 wstETH 通過多個合約借入 cAPE。
- 存入約 12,880,000 個 cAPE 代幣作為抵押品。
- 將約 1,205 wstETH 兌換為約 492,124 APE 代幣,並將 1,839,999 cAPE 提取為 APE 代幣。
- 通過調用
ApeCoinStaking.depositApeCoin()將 2,332,214 APE 代幣存入 cAPE 頭寸,使協議的質押總額從 851,662 增加到 3,183,876(增加了 373%)。 - 利用膨脹的抵押品借入大量 USDC 和 WETH 等資產以獲取利潤。
這種通過閃電貸操縱 pcAPE 價格的行為,利用了預言機計算中對現貨價格的依賴。
總結
ParaSpace 事件凸顯了 DeFi 協議中預言機操縱和閃電貸攻擊的風險。它強調了建立強大的、抗操縱價格預言機以及在預發布審計之外進行持續安全監控的迫切需求。
BlockSec 的 Phalcon Security 系統通過自動阻止攻擊並保護用戶資產,展示了主動威脅檢測與防禦的價值。此事件提醒各 DeFi 協議必須實施全面的安全措施,包括智能合約審計、基礎設施審計和實時監控。
如需了解更多關於 DeFi 安全事件和最佳實踐的見解,請查看我們的安全事件庫,並考慮使用我們的智能合約審計和基礎設施審計服務。
閱讀本系列的其他文章:
- 導讀:2023 年十大「精彩」安全事件
- #1:通過利用 Flashbots Relay 中的漏洞來獲取 MEV 機器人
- #2:Euler Finance 事件:2023 年最大的駭客攻擊
- #3:KyberSwap 事件:對捨入誤差的高超利用
- #4:Curve 事件:編譯器錯誤產生了錯誤的位元組碼
- #5:Platypus Finance:倖存於三次攻擊
- #6:Hundred Finance 事件:與精度相關的漏洞利用
- #8:SushiSwap 事件:一次拙劣的救援嘗試引發的一系列模仿攻擊
- #9:MEV 機器人 0xd61492:從掠食者到獵物
- #10:ThirdWeb 事件:可信模組之間的不兼容暴露了漏洞
Web3 的最佳安全審計服務
在發布前驗證設計、代碼和業務邏輯



