Back to Blog

Nr. 7: ParaSpace-Vorfall: Ein Wettlauf gegen die Zeit zur Abwehr des bisher kritischsten Angriffs der Branche

Code Auditing
February 17, 2024
5 min read
Key Insights

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.

Klicken Sie hier, um den Tweet zu lesen
Klicken Sie hier, um den Tweet zu lesen

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:

  1. Erhielt einen Flash Loan von etwa 47.352 wstETH und stellte etwa 46.018 wstETH bereit, um über mehrere Verträge cAPE zu leihen.
  2. Hinterlegte etwa 12.880.000 cAPE-Token als Sicherheit.
  3. Tauschte etwa 1.205 wstETH gegen rund 492.124 APE-Token und zog 1.839.999 cAPE in APE-Token ab.
  4. 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%).
  5. 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.

Starten Sie mit Phalcon Security

Erkennen Sie jede Bedrohung, alarmieren Sie bei Wichtigem und blockieren Sie Angriffe.

Jetzt kostenlos testen

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.

Erkunden Sie die MetaSleuth-Untersuchung

Verfolgen Sie Geldflüsse und bauen Sie Beweise für Untersuchungen auf

Jetzt kostenlos testen

Lesen Sie weitere Artikel in dieser Serie:

Bester Sicherheits-Auditor für Web3

Validieren Sie Design, Code und Geschäftslogik vor dem Start

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit