Back to Blog

#7: Incidente ParaSpace: Uma Corrida Contra o Tempo para Frustrar o Ataque Mais Crítico da Indústria

Code Auditing
17 de fevereiro de 2024
5 min read
Key Insights
  • Causa raiz: o rebasingIndex do cAPE usava o total de APE em pool (stakedAmount + recompensas pendentes + buffer), que os atacantes podiam inflar via ApeCoinStaking.depositApeCoin() para aumentar o valor do colateral.

  • Caminho do ataque: obter cerca de 47.352 wstETH via flash loan, tomar cAPE emprestado e depositá-lo como garantia, inflar seu valor por meio de um depósito de APE e depois tomar outros ativos emprestados com essa garantia.

Contexto

Em 17 de março de 2023, a Paraspace (atualmente Parallel Finance), uma plataforma de empréstimos de NFTs, sofreu um ataque crítico devido a uma vulnerabilidade em seu oráculo de preços. A Paraspace permite que usuários depositem NFTs e tokens ERC-20 como garantia para tomar emprestado tokens ERC-20, possibilitando retornos sobre NFTs sem vendê-los.

Clique aqui para ler o tweet
Clique aqui para ler o tweet

Uma funcionalidade importante da ParaSpace é o ApeStaking, que combina automaticamente as recompensas de APE. Usuários que fazem staking de APE recebem tokens cAPE, uma representação cToken do APE, que pode ser usada como garantia para tomar emprestado ativos como USDC e WETH. Depositar tokens cAPE concede cotas pcAPE, cujo valor de garantia é calculado multiplicando a quantidade de pcAPE pelo seu rebasingIndex.

O rebasingIndex é derivado do saldo total de APE em pool e do total de cotas, conforme mostrado nos trechos de código a seguir:

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;
}

A função _getTotalPooledApeBalance() soma os tokens APE em staking, as recompensas pendentes e um saldo de buffer do contrato ApeCoinStaking.

Análise da Vulnerabilidade

A vulnerabilidade está na manipulação do rebasingIndex, que infla artificialmente o valor de garantia dos tokens cAPE. Especificamente, a função depositApeCoin() no contrato ApeCoinStaking aumenta o stakedAmount para uma posição. Um atacante pode explorar isso depositando tokens APE na posição cAPE, inflando a saída de _getTotalPooledApeBalance() e, consequentemente, o 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();
}

Essa falha de design permite que o atacante inflate o valor de garantia depositando tokens APE via depositApeCoin() usando cAPE como destinatário.

Análise do Ataque

O atacante explorou essa vulnerabilidade usando um ataque de flash loan em cinco etapas principais:

  1. Obteve um flash loan de aproximadamente 47.352 wstETH e forneceu cerca de 46.018 wstETH para tomar emprestado cAPE por meio de múltiplos contratos.
  2. Depositou aproximadamente 12.880.000 tokens cAPE como garantia.
  3. Negociou aproximadamente 1.205 wstETH por cerca de 492.124 tokens APE e retirou 1.839.999 cAPE em tokens APE.
  4. Depositou 2.332.214 tokens APE na posição cAPE chamando ApeCoinStaking.depositApeCoin(), aumentando o stakedAmount do protocolo de 851.662 para 3.183.876 (um aumento de 373%).
  5. Aproveitou a garantia inflada para tomar emprestado grandes quantias de ativos como USDC e WETH para obter lucro.

Essa manipulação do preço de pcAPE via flash loans explorou o uso de preços spot no cálculo do oráculo.

Comece a usar o Phalcon Security

Detecte cada ameaça, alerte o que importa e bloqueie ataques.

Experimente gratuitamente

Resumo

O incidente da ParaSpace ressalta os riscos de manipulação de oráculos e ataques de flash loan em protocolos DeFi. Ele destaca a necessidade crítica de oráculos de preços robustos e resistentes à manipulação, além de monitoramento contínuo de segurança além das auditorias pré-lançamento.

O sistema Phalcon Security da BlockSec demonstrou o valor da detecção e prevenção ativa de ameaças ao bloquear automaticamente o ataque e proteger os ativos dos usuários. Este incidente serve como um lembrete para que os protocolos DeFi implementem medidas de segurança abrangentes, incluindo auditorias de contratos inteligentes, auditorias de infraestrutura e monitoramento em tempo real.

Para mais informações sobre incidentes de segurança em DeFi e melhores práticas, explore nossa Biblioteca de Incidentes de Segurança e considere nossos serviços de Auditoria de Contratos Inteligentes e Auditoria de Infraestrutura.

Explore a Investigação com o MetaSleuth

Rastreie fluxos e construa evidências para investigações

Experimente gratuitamente

Leia outros artigos desta série:

O Melhor Auditor de Segurança para Web3

Valide design, código e lógica de negócios antes do lançamento

Sign up for the latest updates
Perdas de ~5,57 milhões USD: exploração de falhas no X100 Freezer e no NEM | Boletim semanal da BlockSec
Security Insights

Perdas de ~5,57 milhões USD: exploração de falhas no X100 Freezer e no NEM | Boletim semanal da BlockSec

Este relatório semanal aborda dois incidentes de segurança na Ethereum e na BNB Chain no período de 19/10/2026–25/10/2026. Ele examina uma tomada de controle da governança do X100 Freezer financiada por um empréstimo-relâmpago e uma falha na liquidação de impostos que afetou um pool de liquidez de um token NEM na BNB Chain. As perdas estimadas no escopo do relatório totalizam aproximadamente 5,57 milhões USD: cerca de 4,75 milhões USD da transação representativa do X100 e cerca de 820 mil USD do incidente no pool do NEM. O total exclui as extrações subsequentes do X100 relatadas separadamente.

Perdas de ~3,87 milhões USD: ataques à Autheo Network e à UNCX | Resumo semanal da BlockSec
Security Insights

Perdas de ~3,87 milhões USD: ataques à Autheo Network e à UNCX | Resumo semanal da BlockSec

Este relatório semanal aborda 3 incidentes de segurança no período de 12/10/2026–18/10/2026, com perdas totais estimadas em aproximadamente 3,87 milhões USD. A Autheo Network sofreu um comprometimento de chave privada com perdas de cerca de 1,76 milhões USD, a Qubic Wallet perdeu cerca de 1,30 milhões USD devido à geração de seeds fracas, e os contratos Smart Token Vesting V2 da UNCX Network sofreram um erro contábil de cerca de 807 mil USD nas redes Ethereum, BNB Chain, Base e Robinhood Chain. A análise em destaque da UNCX explica como um cálculo incorreto do total de cotas misturou parcelas de vesting criadas com diferentes proporções entre tokens e cotas, permitindo saques acima do devido de pools compartilhados.

~US$ 542 mil perdidos: ataque ao MakerDaoBot | Boletim semanal da BlockSec
Security Insights

~US$ 542 mil perdidos: ataque ao MakerDaoBot | Boletim semanal da BlockSec

O relatório cobre 1 incidente no Ethereum (05–11/10/2026), com perda estimada de US$ 542 mil. Um adaptador malicioso obteve acesso aos saldos MakerDAO via função desprotegida do MakerDaoBot, liquidou 4 leilões ETH-A e converteu 200 ETH-A em WETH, depois enviados como ETH ao atacante.

Best Security Auditor for Web3

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

BlockSec Audit