Hintergrund
Am 17. März 2023 erlitt Paraspace (heute Parallel Finance), eine NFT-Kreditplattform, einen kritischen Angriff aufgrund einer Schwachstelle in ihrem Preis-Orakel. Paraspace ermöglicht es Benutzern, NFTs und ERC-20-Token als Sicherheit zu hinterlegen, um ERC-20-Token zu leihen, wodurch Renditen auf NFTs erzielt werden können, ohne diese verkaufen zu müssen.

Ein Hauptmerkmal von ParaSpace ist ApeStaking, das APE-Belohnungen automatisch reinvestiert (auto-compounding). Benutzer, die APE staken, erhalten cAPE-Token, eine cToken-Repräsentation von APE, die als Sicherheit für das Leihen von Vermögenswerten wie USDC und WETH verwendet werden können. Die Hinterlegung von cAPE-Token gewährt pcAPE-Anteile, deren Besicherungswert durch Multiplikation des pcAPE-Betrags mit seinem rebasingIndex berechnet wird.
Der rebasingIndex wird aus dem gesamten gepoolten APE-Guthaben und den gesamten Anteilen abgeleitet, wie in den folgenden Code-Snippets dargestellt:
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, ausstehende Belohnungen und ein Pufferguthaben aus dem ApeCoinStaking-Vertrag.
Schwachstellenanalyse
Die Schwachstelle liegt in der Manipulation des rebasingIndex, der den Besicherungswert der cAPE-Token künstlich aufbläht. Speziell 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 das Ergebnis von _getTotalPooledApeBalance() und somit den rebasingIndex in die Höhe treibt.
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 Besicherungswert aufzublähen, indem er APE-Token über depositApeCoin() mit cAPE als Empfänger einzahlt.
Angriffsanalyse
Der Angreifer nutzte diese Schwachstelle mithilfe eines Flash-Loan-Angriffs in fünf entscheidenden Schritten aus:
- Erhielt einen Flash Loan von etwa 47.352 wstETH und stellte etwa 46.018 wstETH bereit, um über mehrere Verträge cAPE zu leihen.
- Hinterlegte etwa 12.880.000 cAPE-Token als Sicherheit.
- Tauschte etwa 1.205 wstETH gegen rund 492.124 APE-Token und zog 1.839.999 cAPE in APE-Token ab.
- Einzahlte 2.332.214 APE-Token in die cAPE-Position durch Aufruf von
ApeCoinStaking.depositApeCoin(), wodurch der stakedAmount des Protokolls von 851.662 auf 3.183.876 erhöht wurde (ein Anstieg von 373%). - Nutzte die aufgeblähte Sicherheit, um große Mengen an Vermögenswerten wie USDC und WETH für einen Gewinn zu leihen.
Diese Manipulation des pcAPE-Preises mittels Flash Loans nutzte die Verwendung von Spot-Preisen in der Orakel-Berechnung aus.
Zusammenfassung
Der ParaSpace-Vorfall unterstreicht die Risiken von Orakel-Manipulationen und Flash-Loan-Angriffen in DeFi-Protokollen. Er verdeutlicht die entscheidende Notwendigkeit für robuste, manipulationsresistente Preis-Orakel und eine kontinuierliche Sicherheitsüberwachung über Audits vor dem Start hinaus.
Das Phalcon Security-System von BlockSec demonstrierte den Wert aktiver 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 Überwachung in Echtzeit.
Für weitere Einblicke in Sicherheitsvorfälle im DeFi-Bereich und bewährte Verfahren erkunden Sie unsere Security Incident Library und ziehen Sie unsere Dienste für Smart Contract Audit und Infrastruktur-Audit in Betracht.
Lesen Sie weitere Artikel in dieser Serie:
- Lead-In: Top Ten "Awesome" Sicherheitsvorfälle im Jahr 2023
- #1: Ernten von MEV-Bots durch die Ausnutzung von Schwachstellen im Flashbots Relay
- #2: Euler Finance-Vorfall: Der größte Hack des Jahres 2023
- #3: KyberSwap-Vorfall: Meisterhafte Ausnutzung von Rundungsfehlern
- #4: Curve-Vorfall: Compiler-Fehler erzeugt fehlerhaften Bytecode
- #5: Platypus Finance: Überleben von drei Angriffen
- #6: Hundred Finance-Vorfall: Präzisionsbezogene Exploits
- #8: SushiSwap-Vorfall: Ein ungeschickter Rettungsversuch führt zu einer Reihe von Nachahmer-Angriffen
- #9: MEV Bot 0xd61492: Vom Raubtier zur Beute
- #10: ThirdWeb-Vorfall: Inkompatibilität zwischen vertrauenswürdigen Modulen legt Schwachstelle offen
Bester Sicherheits-Auditor für Web3
Validieren Sie Design, Code und Geschäftslogik vor dem Start



