Antecedentes
El 17 de marzo de 2023, Paraspace (ahora Parallel Finance), una plataforma de préstamos de NFT, sufrió un ataque crítico debido a una vulnerabilidad en su oráculo de precios. Paraspace permite a los usuarios depositar NFTs y tokens ERC-20 como garantía para tomar prestados tokens ERC-20, lo que permite obtener rendimientos sobre los NFTs sin venderlos.

Una característica clave de ParaSpace es ApeStaking, que capitaliza automáticamente las recompensas de APE. Los usuarios que hacen staking de APE reciben tokens cAPE, una representación cToken de APE, que puede usarse como garantía para tomar prestados activos como USDC y WETH. Depositar tokens cAPE otorga participaciones pcAPE, cuyo valor de garantía se calcula multiplicando la cantidad de pcAPE por su rebasingIndex.
El rebasingIndex se deriva del saldo total de APE agrupado y el total de participaciones, como se muestra en los siguientes fragmentos de código:
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;
}
La función _getTotalPooledApeBalance() suma los tokens APE en staking, las recompensas pendientes y un saldo de reserva del contrato ApeCoinStaking.
Análisis de la Vulnerabilidad
La vulnerabilidad reside en la manipulación del rebasingIndex, que infla artificialmente el valor de garantía de los tokens cAPE. Específicamente, la función depositApeCoin() en el contrato ApeCoinStaking incrementa el stakedAmount de una posición. Un atacante puede explotar esto depositando tokens APE en la posición cAPE, inflando la salida de _getTotalPooledApeBalance() y, por tanto, el 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();
}
Este fallo de diseño permite al atacante inflar el valor de garantía depositando tokens APE a través de depositApeCoin() con cAPE como destinatario.
Análisis del Ataque
El atacante explotó esta vulnerabilidad mediante un ataque de préstamo flash en cinco pasos clave:
- Obtuvo un préstamo flash de aproximadamente 47,352 wstETH y suministró alrededor de 46,018 wstETH para tomar prestado cAPE a través de múltiples contratos.
- Depositó aproximadamente 12,880,000 tokens cAPE como garantía.
- Intercambió aproximadamente 1,205 wstETH por unos 492,124 tokens APE y retiró 1,839,999 cAPE en tokens APE.
- Depositó 2,332,214 tokens APE en la posición cAPE llamando a
ApeCoinStaking.depositApeCoin(), aumentando el stakedAmount del protocolo de 851,662 a 3,183,876 (un incremento del 373%). - Aprovechó la garantía inflada para tomar prestadas grandes cantidades de activos como USDC y WETH con fines de lucro.
Esta manipulación del precio de pcAPE mediante préstamos flash explotó el uso de precios spot en el cálculo del oráculo.
Resumen
El incidente de ParaSpace subraya los riesgos de la manipulación de oráculos y los ataques de préstamos flash en los protocolos DeFi. Destaca la necesidad crítica de oráculos de precios robustos y resistentes a la manipulación, así como de una monitorización de seguridad continua más allá de las auditorías previas al lanzamiento.
El sistema Phalcon Security de BlockSec demostró el valor de la detección y prevención activa de amenazas al bloquear automáticamente el ataque y proteger los activos de los usuarios. Este incidente sirve como recordatorio para que los protocolos DeFi implementen medidas de seguridad integrales, incluyendo auditorías de contratos inteligentes, auditorías de infraestructura y monitorización en tiempo real.
Para obtener más información sobre incidentes de seguridad en DeFi y mejores prácticas, explora nuestra Biblioteca de Incidentes de Seguridad y considera nuestros servicios de Auditoría de Contratos Inteligentes y Auditoría de Infraestructura.
Lee otros artículos de esta serie:
- Introducción: Los Diez Principales Incidentes de Seguridad "Increíbles" de 2023
- #1: Cosechando Bots MEV Explotando Vulnerabilidades en Flashbots Relay
- #2: Incidente de Euler Finance: El Mayor Hackeo de 2023
- #3: Incidente de KyberSwap: Explotación Magistral de Errores de Redondeo
- #4: Incidente de Curve: Un Error del Compilador Produce Bytecode Defectuoso
- #5: Platypus Finance: Sobreviviendo a Tres Ataques
- #6: Incidente de Hundred Finance: Exploits Relacionados con la Precisión
- #8: Incidente de SushiSwap: Un Torpe Intento de Rescate
- #9: MEV Bot 0xd61492: De Depredador a Presa
- #10: Incidente de ThirdWeb: Incompatibilidad Entre Módulos de Confianza
El Mejor Auditor de Seguridad para Web3
Valida el diseño, el código y la lógica de negocio antes del lanzamiento



