Arka Plan
17 Mart 2023'te, bir NFT borç verme platformu olan Paraspace (şu anda Parallel Finance), fiyat oracle'ındaki bir güvenlik açığı nedeniyle kritik bir saldırıya uğradı. Paraspace, kullanıcıların NFT'leri ve ERC-20 tokenlarını teminat olarak yatırarak ERC-20 tokenları ödünç almasına olanak tanır; bu sayede NFT'leri satmadan getiri elde etmek mümkün olur.

ParaSpace'in önemli bir özelliği, APE ödüllerini otomatik olarak birleştiren ApeStaking'dir. APE stake eden kullanıcılar, APE'nin cToken temsili olan cAPE tokenları alır; bu tokenlar USDC ve WETH gibi varlıklar ödünç almak için teminat olarak kullanılabilir. cAPE tokenları yatırmak, teminat değeri pcAPE miktarının rebasingIndex ile çarpılmasıyla hesaplanan pcAPE payları kazandırır.
rebasingIndex, aşağıdaki kod parçacıklarında gösterildiği gibi toplam havuzlanmış APE bakiyesinden ve toplam paylardan türetilir:
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;
}
_getTotalPooledApeBalance() fonksiyonu, ApeCoinStaking sözleşmesinden stake edilmiş APE tokenlarını, bekleyen ödülleri ve bir tampon bakiyeyi toplar.
Güvenlik Açığı Analizi
Güvenlik açığı, cAPE tokenlarının teminat değerini yapay olarak şişiren rebasingIndex'in manipülasyonunda yatmaktadır. Özellikle, ApeCoinStaking sözleşmesindeki depositApeCoin() fonksiyonu bir pozisyon için stakedAmount'u artırır. Bir saldırgan bunu, APE tokenlarını cAPE pozisyonuna yatırarak _getTotalPooledApeBalance() çıktısını ve dolayısıyla rebasingIndex'i şişirmek için istismar edebilir.
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();
}
Bu tasarım hatası, saldırganın cAPE'yi alıcı olarak belirleyerek depositApeCoin() aracılığıyla APE tokenları yatırıp teminat değerini şişirmesine olanak tanır.
Saldırı Analizi
Saldırgan, bu güvenlik açığını beş temel adımda bir flash loan saldırısı kullanarak istismar etti:
- Yaklaşık 47.352 wstETH flash loan aldı ve birden fazla sözleşme aracılığıyla cAPE ödünç almak için yaklaşık 46.018 wstETH sağladı.
- Teminat olarak yaklaşık 12.880.000 cAPE tokenı yatırdı.
- Yaklaşık 1.205 wstETH'yi yaklaşık 492.124 APE tokenına takas etti ve 1.839.999 cAPE'yi APE tokenlarına çekti.
ApeCoinStaking.depositApeCoin()çağrısıyla 2.332.214 APE tokenını cAPE pozisyonuna yatırdı; bu sayede protokolün stakedAmount değerini 851.662'den 3.183.876'ya (%373 artış) yükseltti.- Şişirilmiş teminatı kullanarak kâr amacıyla USDC ve WETH gibi varlıklardan büyük miktarlarda ödünç aldı.
Flash loan'lar aracılığıyla pcAPE fiyatının bu şekilde manipüle edilmesi, oracle hesaplamasında spot fiyatların kullanılmasını istismar etti.
Özet
ParaSpace olayı, DeFi protokollerinde oracle manipülasyonu ve flash loan saldırılarının risklerini gözler önüne sermektedir. Bu olay, sağlam ve manipülasyona dirençli fiyat oracle'larına ve lansman öncesi denetimlerinin ötesinde sürekli güvenlik izlemeye duyulan kritik ihtiyacı vurgulamaktadır.
BlockSec'in Phalcon Security sistemi, saldırıyı otomatik olarak engelleyerek ve kullanıcı varlıklarını koruyarak aktif tehdit tespiti ve önlemenin değerini ortaya koymuştur. Bu olay, DeFi protokollerine akıllı sözleşme denetimleri, altyapı denetimleri ve gerçek zamanlı izleme dahil kapsamlı güvenlik önlemleri uygulamaları için bir hatırlatma niteliğindedir.
DeFi güvenlik olayları ve en iyi uygulamalar hakkında daha fazla bilgi için Güvenlik Olayı Kütüphanemizi inceleyin ve Akıllı Sözleşme Denetimi ile Altyapı Denetimi hizmetlerimizi değerlendirin.
Bu serideki diğer makaleleri okuyun:
- Giriş: 2023'ün En İyi On "Müthiş" Güvenlik Olayı
- #1: Flashbots Relay'deki Güvenlik Açıklarını İstismar Ederek MEV Bot'larını Ele Geçirme
- #2: Euler Finance Olayı: 2023'ün En Büyük Hack'i
- #3: KyberSwap Olayı: Yuvarlama Hatalarının Ustalıklı İstismarı
- #4: Curve Olayı: Derleyici Hatası Hatalı Bytecode Üretiyor
- #5: Platypus Finance: Üç Saldırıdan Sağ Çıkmak
- #6: Hundred Finance Olayı: Hassasiyetle İlgili Açıklar
- #8: SushiSwap Olayı: Beceriksiz Bir Kurtarma Girişimi
- #9: MEV Bot 0xd61492: Avcıdan Avaya
- #10: ThirdWeb Olayı: Güvenilir Modüller Arasındaki Uyumsuzluk
Web3 için En İyi Güvenlik Denetçisi
Lansman öncesinde tasarımı, kodu ve iş mantığını doğrulayın



