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.

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:
- 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.
- Depositou aproximadamente 12.880.000 tokens cAPE como garantia.
- Negociou aproximadamente 1.205 wstETH por cerca de 492.124 tokens APE e retirou 1.839.999 cAPE em tokens APE.
- 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%). - 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.
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.
Leia outros artigos desta série:
- Introdução: Os Dez Principais Incidentes de Segurança "Incríveis" de 2023
- #1: Colhendo Bots de MEV ao Explorar Vulnerabilidades no Flashbots Relay
- #2: Incidente da Euler Finance: O Maior Hack de 2023
- #3: Incidente da KyberSwap: Exploração Magistral de Erros de Arredondamento
- #4: Incidente da Curve: Erro de Compilador Produz Bytecode Defeituoso
- #5: Platypus Finance: Sobrevivendo a Três Ataques
- #6: Incidente da Hundred Finance: Explorações Relacionadas à Precisão
- #8: Incidente da SushiSwap: Uma Tentativa de Resgate Desajeitada
- #9: Bot de MEV 0xd61492: De Predador a Presa
- #10: Incidente da ThirdWeb: Incompatibilidade Entre Módulos Confiáveis
O Melhor Auditor de Segurança para Web3
Valide design, código e lógica de negócios antes do lançamento



