Hintergrund
Am 17. März 2023 erlitt Paraspace (jetzt Parallel Finance), eine NFT-Kreditplattform, einen kritischen Angriff aufgrund einer Schwachstelle in seinem Preisorakel. Paraspace ermöglicht es Benutzern, NFTs und ERC-20-Token als Sicherheit zu hinterlegen, um ERC-20-Token zu leihen, was Renditen auf NFTs ohne deren Verkauf ermöglicht.

Ein Hauptmerkmal von ParaSpace ist ApeStaking, das APE-Belohnungen automatisch kompoundiert. Benutzer, die APE staken, erhalten cAPE-Token, eine cToken-Darstellung von APE, die als Sicherheit zur Aufnahme von Vermögenswerten wie USDC und WETH verwendet werden kann. Die Einzahlung von cAPE-Token gewährt pcAPE-Anteile, deren Sicherheitenwert durch Multiplikation des pcAPE-Betrags mit seinem Rebasierungsindex berechnet wird.
Der Rebasierungsindex leitet sich aus dem gesamten gepoolten APE-Saldo und den gesamten Anteilen ab, wie in den folgenden Code-Schnipseln gezeigt:
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;
}
Die Funktion _getTotalPooledApeBalance() summiert die gestakten APE-Token, ausstehenden Belohnungen und einen Puffer-Saldo aus dem ApeCoinStaking-Vertrag.
Schwachstellenanalyse
Die Schwachstelle liegt in der Manipulation des rebasingIndex, der den Sicherheitenwert von cAPE-Token künstlich aufbläht. Insbesondere erhöht die Funktion depositApeCoin() im ApeCoinStaking-Vertrag den stakedAmount für eine Position. Ein Angreifer kann dies ausnutzen, indem er APE-Token in die cAPE-Position einzahlt, was die Ausgabe von _getTotalPooledApeBalance() und damit den rebasingIndex aufbläht.
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();
}
Dieser Designfehler ermöglicht es dem Angreifer, den Sicherheitenwert durch die Einzahlung von APE-Token über depositApeCoin() mit cAPE als Empfänger aufzublähen.
Angriffsanalyse
Der Angreifer nutzte diese Schwachstelle mit einem Flash-Loan-Angriff in fünf Hauptschritten aus:
- Erhielt einen Flash-Loan von etwa 47.352 wstETH und lieferte etwa 46.018 wstETH, um über mehrere Verträge cAPE zu leihen.
- Hinterlegte rund 12.880.000 cAPE-Token als Sicherheit.
- Tauschte ungefähr 1.205 wstETH gegen etwa 492.124 APE-Token und zog 1.839.999 cAPE in APE-Token ab.
- Hinterlegte 2.332.214 APE-Token in der cAPE-Position, indem er
ApeCoinStaking.depositApeCoin()aufrief, was denstakedAmountdes Protokolls von 851.662 auf 3.183.876 erhöhte (eine Steigerung von 373 %). - Nutzte die aufgeblähte Sicherheit, um große Mengen an Vermögenswerten wie USDC und WETH zum Profit zu leihen.
Diese Manipulation des pcAPE-Preises über Flash-Loans nutzte die Verwendung von Spot-Preisen in der Orakelberechnung aus.
Zusammenfassung
Der Vorfall bei ParaSpace unterstreicht die Risiken von Orakelmanipulationen und Flash-Loan-Angriffen in DeFi-Protokollen. Er hebt die kritische Notwendigkeit robuster, manipulationsresistenter Preisorakel und kontinuierlicher Sicherheitsüberwachung über Audits vor dem Start hinaus hervor.
BlockSecs Phalcon Security System demonstrierte den Wert der aktiven Bedrohungserkennung und -prävention, indem es den Angriff automatisch blockierte und Benutzervermögen schützte. Dieser Vorfall dient als Erinnerung für DeFi-Protokolle, umfassende Sicherheitsmaßnahmen zu implementieren, einschließlich Smart Contract Audits, Infrastruktur-Audits und Echtzeitüberwachung.
Weitere Einblicke in DeFi-Sicherheitsvorfälle und Best Practices finden Sie in unserer Security Incident Library und erwägen Sie unsere Dienstleistungen für Smart Contract Audit und Infrastructure Audit.
Lesen Sie weitere Artikel in dieser Serie:
- Lead-In: Die zehn besten "fantastischen" Sicherheitsvorfälle im Jahr 2023
- #1: MEV-Bots durch Ausnutzung von Schwachstellen im Flashbots Relay ernten
- #2: Euler Finance-Vorfall: Der größte Hack des Jahres 2023
- #3: KyberSwap-Vorfall: Meisterhafte Ausnutzung von Rundungsfehlern
- #4: Curve-Vorfall: Compilerfehler erzeugt fehlerhaften Bytecode
- #5: Platypus Finance: Drei Angriffe überlebt
- #6: Hundred Finance-Vorfall: Präzisionsbezogene Exploits
- #8: SushiSwap-Vorfall: Ein ungeschickter Rettungsversuch
- #9: MEV-Bot 0xd61492: Vom Raubtier zur Beute
- #10: ThirdWeb-Vorfall: Inkompatibilität zwischen vertrauenswürdigen Modulen
Bester Sicherheitsauditor für Web3
Validieren Sie Design, Code und Geschäftslogik vor dem Start



