Back to Blog

#6 Cork Protokolü Olayı: Birbirinden Bağımsız İki Açık, Tek Bir Yıkıcı İstismar Zincirine Dönüştü

Code Auditing
February 11, 2026
8 min read

28 Mayıs 2025'te Ethereum üzerindeki Cork Protokolü istismar edildi [1], bu durum yaklaşık 12 milyon dolarlık kayıpla sonuçlandı. Temel neden, vade sonu zamanındaki Tarihsel İma Edilen Getiri Ortalaması (HIYA) fiyat manipülasyonu ile Uniswap v4 hook geri çağrımındaki eksik erişim denetiminin birleşimiydi. HIYA risk primleri vadeye kalan süre sıfıra yaklaştıkça üstel olarak arttığından, son aşama takasları HIYA'yı şişirdi ve yeni başlatılan piyasaların Cover Token'ları ciddi ölçüde düşük fiyatlandırmasına neden oldu. Aynı zamanda, CorkHook.beforeSwap işlevinde msg.sender kimlik doğrulaması eksikti; bu durum, hazırlanmış parametrelerle keyfi çağrılara izin verdi. Saldırgan her iki açığı da istismar ederek yaklaşık ~3.760e18 CT ve DS çıkardı ve bunları wstETH karşılığında kullandı; böylece protokol rezervlerini tüketti.

0x1 Arka Plan

0x1.1 Token Ekonomisi

Cork Protocol [2], kripto kasa token'ları, getiri taşıyan stabilcoinler ve likit (yeniden) staking token'ları gibi zincir üstü varlıklar için programlanabilir bir risk katmanı olarak işlev gören, tokenize risk için yeni bir ilkel yapı tanıtır. Temel bileşen, piyasaların etrafında inşa edildiği mekanizma olan Cork Havuzudur. Her Cork Havuzu bir varlık çifti üzerine kurulur: Redemption Asset (RA) ve Pegged Asset (PA).

Cork Havuzu, kilitli tutulan Redemption Asset yatırımlarını alır. Karşılığında iki token basılır ve yatırımcıya iade edilir: Depeg Swap (DS) ve Cover Token (CT). Belirlenen vade tarihi öncesinde, 1 DS + 1 CT/PA geri verilerek 1 RA elde edilebilir; vade sonrasında ise 1 CT, havuzda kalan RA + PA'dan orantılı biçimde kullanılabilir.

PA+DS=RAPA + DS = RA

CT+DS=RACT + DS = RA

0x1.2 Sözleşme Uygulaması

Hem DS hem de CT işlem görülebilir. Kullanıcılar, CorkHook aracılığıyla özel bir AMM eğrisine dayalı NormalSwap kullanarak CT ve RA ticareti yapabilirken, DS ve RA, Router ve CorkHook üzerinden FlashSwap ile işlem görür.

NormalSwap [Özel AMM eğrisi]:

x1tyt=kx^{1-t} y^{t} = k

FlashSwap [FlashSwapRouter.swapDsforRa]: Bu mekanizma istismarın merkezindedir. Saldırgan daha sonra bu yolu, beforeSwap'a kimlik doğrulaması olmaksızın yapılan doğrudan bir çağrı aracılığıyla tetikler (Bölüm 0x2.2).

  1. Alıcı, RA'yı Router'a aktarır.

  2. İlk beforeSwap çağrısında, Router takas edilecek DS miktarını hesaplar. Gerekirse, Uniswap v4 havuzundan RA ve CT ödünç alır, ödünç alınan CT ile protokolün DS'ini RA'ya dönüştürür, gerekli RA'yı elinde tutar ve ödünç alınan RA'yı Uniswap havuzuna iade eder.

  3. İkinci beforeSwap çağrısında, Router, depositPsm aracılığıyla RA'yı CT ve DS'ye ayrıştırır, tüm DS'yi kullanıcıya aktarır, ödünç alınan CT'yi Uniswap havuzuna geri öder ve fazla CT'yi alıcıya iade eder.

İhraç Sonrası Fon Dağılımı:

RA+CT:AMMRA+CT: AMM

DS:RouterDS: Router

0x1.3 Yeni İhraç için Fiyatlandırma Mekanizması

Protokol, risk primlerini ölçmek ve vade sonunda başlangıç fiyatlarını ayarlamak amacıyla hacim (vTv_T) × risk primi (rTr_T) kümülatif toplamı olarak hesaplanan HIYA'yı (Tarihsel İma Edilen Getiri Ortalaması) kullanır. HIYA yüksekse, protokol daha yüksek bir depeg riski varsayar; bu da daha düşük başlangıç CT fiyatlandırmasına yol açar.

Ku¨mu¨latif HIYA=TrTvTKümülatif\ HIYA = \sum_T r_T v_T

Risk primi (rTr_T) hesaplaması iki bileşenden oluşur: yüksek CT fiyatları düşük rtr_t değerleriyle ilişkilidir (bu sezgiseldir) ve vade sonu zamanı T üstel bir büyütme etkisine sahiptir. Vade sonuna yakın, T sıfıra yaklaşır ve bu da 1/T1/T üssünün hızla büyümesine neden olur. Bu durum, küçük CT fiyat değişikliklerini bile büyük risk primi değerlerine dönüştürür.

rT=(F/pT)1/T1r_T = (F / p_T)^{1/T} - 1

  • FF, 1'dir

  • PTP_T, CT'nin fiyatıdır

  • TT, 1-0 arasında normalleştirilmiş vadeye kalan süredir

Büyütme etkisini örneklemek gerekirse: CT, pT=0.95p_T = 0.95 fiyatıyla işlem görürse (%5 iskonto), T=0.5T = 0.5'te (vade sonunun yarısında) risk primi şöyledir:

r0.5=(1/0.95)1/0.51=(1.053)210.108r_{0.5} = (1/0.95)^{1/0.5} - 1 = (1.053)^{2} - 1 \approx 0.108

T=0.01T = 0.01'de (vadeye yakın), aynı CT fiyatı şunu üretir:

r0.01=(1/0.95)1/0.011=(1.053)1001167r_{0.01} = (1/0.95)^{1/0.01} - 1 = (1.053)^{100} - 1 \approx 167

Aynı %5'lik CT iskontosu, vadeye yakın ~1.500 kat daha büyük bir risk primi üretir. Bu üstel duyarlılık, manipülasyon vektörüdür: vade sonundan kısa süre önce gerçekleştirilen bir takas, HIYA'yı orantısız biçimde şişirerek bir sonraki piyasanın başlangıç fiyatını bozar.

0x2 Güvenlik Açığı Analizi

Etkilenen piyasa aşağıdaki token'ları içermektedir:

Rol Token Açıklama
RA wstETH Redemption Asset
PA weETH Pegged Asset
DS weETH8DS-2 Depeg Swap
CT weETH8CT-2 Cover Token

Açıklık sağlamak amacıyla, bu raporun geri kalanında token'lara, ayrımın önem taşıdığı durumlar dışında somut isimleri yerine soyut rolleriyle (RA, DS, CT) atıfta bulunulmaktadır.

Saldırgan, iki farklı yöntem kullanarak hem DS hem de CT'yi AMM'den ve Router'dan çıkardı. DS + CT, RA karşılığında kullanılabildiğinden her ikisini birden elde etmek doğrudan kâr çıkarmayı mümkün kılmaktadır. Saldırı iki bileşenden oluşmaktadır.

0x2.1 Cover Token Çıkarımı: HIYA Manipülasyonunun Yapay Düşük Piyasa Başlangıç Fiyatlarına Yol Açması

Bir piyasa dönemi sona erdiğinde, protokol bir sonraki dönemi, AMM'deki CT/RA fiyat oranını belirlemek üzere önceki dönemin accumulatedHIYA değerini kullanarak başlatır. Daha yüksek bir HIYA, daha yüksek algılanan depeg riskine işaret eder ve bu da daha düşük bir başlangıç CT fiyatına dönüşür.

HIYA her takasta güncellenir ve risk primlerini (Bölüm 0x1.3) içerdiğinden, risk primleri T0T \to 0 olarak üstel biçimde büyüdüğünden, vadeye yakın gerçekleştirilen takaslar accumulatedHIYA'yı büyük mertebelerle şişirir. Saldırgan bunu, vadeye yakın SwapRaForDs() çağrısı yaparak istismar etti; bu sayede HIYA'ya birikim sağlayan büyük bir risk primi oluşturdu.

Yeni piyasa dönemi ardından başlatıldığında, protokol şişirilmiş HIYA'yı okudu, bunu aşırı depeg riski olarak yorumladı ve CT'nin başlangıç AMM fiyatını gerçek değerinin çok altında belirledi. Saldırgan daha sonra bu bozulmuş fiyattan RA karşılığı CT takas ederek büyük miktarda CT pozisyonu ucuza edindi.

0x2.2 Depeg Swap Çıkarımı: CorkHook.beforeSwap'ta Eksik Erişim Denetimi

Standart Uniswap v4 hook tasarımında, beforeSwap yalnızca bir takas sırasında PoolManager tarafından çağrılır. Cork'un uygulaması bu kısıtlamayı zorunlu kılmıyordu:

// Eksik: require(msg.sender == address(poolManager));
function beforeSwap(
    address sender,
    PoolKey calldata key,
    IPoolManager.SwapParams calldata params,
    bytes calldata hookData
) external override returns (bytes4, BeforeSwapDelta, uint24) {
    ...
}

Bu kontrol olmadan, herhangi bir harici sözleşme beforeSwap'ı doğrudan keyfi hookData ile çağırabilir. hookData boş olmadığında, işlev FlashSwap yürütme yoluna girer (Bölüm 0x1.2); bu yol depositPsm aracılığıyla RA'yı CT ve DS'ye ayrıştırır. Saldırgan bunu, sahte bir piyasanın token'larını belirten hazırlanmış hookData ile beforeSwap'ı doğrudan çağırarak istismar etti; böylece protokolün token'ları ayrıştırmasına ve sonuçları saldırgana aktarmasına neden oldu.

0x2.3 İki Açığın Birbirini Nasıl Tamamladığı

İki güvenlik açığından hiçbiri tek başına tam 12 milyonu çıkarmak için yeterli değildir.

HIYA manipülasyonu saldırgana ucuz CT sağlar; ancak CT tek başına RA karşılığında kullanılamaz. Kullanım formülü her iki token'ı da gerektirir: CT + DS = RA. Saldırganın DS elde etmesi için ayrıca bir yola ihtiyacı vardır.

beforeSwap'taki eksik erişim denetimi bu yolu sağlar. Saldırgan, beforeSwap'ı doğrudan hazırlanmış hookData ile çağırarak FlashSwap ayrıştırma yolunu keyfi parametrelerle tetikleyebilir. Bu yol aracılığıyla gerçek DS elde etmek için saldırgan, gerçek DS'yi kendi RA'sı olarak belirleyen sahte bir piyasa kurar; ardından o "RA"yı (gerçek DS) sahte CT ve sahte DS'ye ayrıştırmak için beforeSwap'ı çağırır; bunlar sahte piyasa üzerinden gerçek DS'ye geri takas edilebilir.

Hem CT (HIYA manipülasyonundan) hem de DS (sahte piyasa üzerinden kimliği doğrulanmamış beforeSwap çağrısından) elde edilen saldırgan, bunları 1:1 oranında RA (wstETH) karşılığında kullandırır.

0x3 Saldırı Analizi

Saldırı, her biri bir aşamaya karşılık gelen üç işlem boyunca gerçekleşir: HIYA'yı şişirme, ucuz CT edinme ve kullanım çiftini tamamlamak için DS çıkarma.

0x3.1 Hazırlık: HIYA'yı Şişirme

Bu işlemde, saldırgan piyasa vadesi dolmadan kısa süre önce SwapRaForDs() çağrısı yaptı. TT sıfıra yakın olduğundan, bu takas orantısız biçimde büyük bir risk primi üretti (Bölüm 0x1.3) ve accumulatedHIYA'yı şişirdi.

Bu aşama sonunda saldırganın elinde: takasdan elde edilen DS (Aşama 0x3.3'te kullanılacak) ve zincir üzerinde depolanan şişirilmiş accumulatedHIYA.

0x3.2 Başlatma: Ucuz CT Edinme

Bu işlemde, yeni piyasa dönemi başlatıldı. Protokol, şişirilmiş accumulatedHIYA'yı okuyarak AMM'de bozulmuş bir CT/RA fiyat oranı belirledi ve CT'yi gerçek değerinin çok altında fiyatlandırdı. Saldırgan daha sonra bu düşürülmüş fiyattan ~0.000003e18 RA karşılığında 3.760e18 CT takas etti.

Bu aşama sonunda saldırganın elinde: büyük bir CT pozisyonu (manipüle edilmiş başlangıç fiyatı aracılığıyla ucuza edinilmiş).

0x3.3 Çıkarım: Sahte Piyasa Üzerinden DS Elde Etme

Bu aşama, RA kullanımı için gereken CT + DS çiftini tamamlayan DS'yi çıkarmak amacıyla erişim denetimi güvenlik açığını (Bölüm 0x2.2) kullanır. Temel teknik, gerçek DS'yi kendi redemption asset'i olarak değerlendiren sahte bir piyasadır:

Sahte Piyasa Rolü Gerçek Token Amaç
Sahte RA Gerçek DS (weETH8DS-2) Gerçek DS'nin ayrıştırma yoluna girmesini sağlar
Sahte CT Sahte RA ayrıştırmasından basılmış Ara; gerçek DS için geri takas edilir
Sahte DS Sahte RA ayrıştırmasından basılmış Ara; gerçek DS için geri takas edilir

Saldırı işleminin temel adımları:

  1. Saldırgan önce meşru piyasada RA karşılığı DS takas etti.

    Saldırganın elinde: gerçek DS.

  2. Saldırgan sahte piyasayı kurdu ve başlattı; gerçek DS'yi sahte RA olarak belirledi.

  3. Saldırgan, beforeSwap'ı doğrudan boş olmayan hookData ile çağırdı (eksik erişim denetimini istismar ederek) ve sahte piyasaya karşı FlashSwap yürütme yolunu tetikledi. hookData içinde saldırgan, paymentToken olarak sahte CT'yi belirtti; bu sayede protokolün RA ayrıştırma mantığını sahte piyasaya karşı yürütmesine neden oldu.

  4. Protokol tüm sahte RA'yı (yani gerçek DS'yi) sahte CT ve sahte DS'ye ayrıştırdı. Sahte DS'nin tamamı saldırgana aktarıldı ve sahte CT kısmı (minimal bir paymentAmount düşülerek) iade edildi.

    Saldırganın elinde: 3.761e18 sahte CT + 3.761e18 sahte DS (her ikisi de gerçek DS'den türetilmiş).

  5. Saldırgan, sahte CT ve sahte DS'yi sahte piyasa içinde sahte RA'ya geri takas ederek gerçek DS'yi geri kazandı.

    Saldırganın elinde: 3.761e18 gerçek DS (geri kazanıldı).

  6. Saldırgan, geri kazanılan DS'yi Bölüm 0x3.2'de elde edilen CT ile birleştirerek RA (wstETH) karşılığında kullandırdı ve kâr çıkarmayı tamamladı.

    Saldırganın elinde: 3.760e18 RA (wstETH) kâr (yani 12 milyon dolar).

Özet

Bu olay, protokolden 12 milyon doların boşaltıldığı tek bir istismar zincirine dönüşen, tek başına hiçbiri yeterli olmayan iki bağımsız açığı bir araya getirdi.

  • Vade sonuna yakın üstel risk primi. HIYA fiyatlandırma formülü, vadeye kalan süre sıfıra yaklaştıkça risk primlerini büyütür; bu durum son aşama takaslarını piyasa yeniden başlatma fiyatları için bir manipülasyon vektörüne dönüştürür.
  • Hook geri çağrımlarında eksik gönderen doğrulaması. CorkHook.beforeSwap, msg.sender'ın PoolManager olduğunu zorunlu kılmıyordu; bu durum keyfi parametrelerle doğrudan çağrıya izin vererek saldırganın FlashSwap yürütme yolunu taklit etmesini mümkün kıldı.
  • Kör nokta olarak modüller arası etkileşim. Ekonomik tasarım (HIYA tabanlı fiyatlandırma) ve erişim denetimi açığı (kimliği doğrulanmamış hook geri çağrımı) ayrı modüllerde yer alıyordu. Bunların etkileşimi, tek modül analizinin tespit etmesinin pek mümkün olmadığı bir istismar edilebilir yol ortaya çıkardı.

Referans

  1. https://www.cork.tech/blog/post-mortem

  2. https://docs.cork.tech/core-concepts/cork-pool


BlockSec Hakkında

BlockSec, tam kapsamlı bir blok zinciri güvenliği ve kripto uyumluluk sağlayıcısıdır. Müşterilerin protokoller ve platformların tam yaşam döngüsü boyunca kod denetimi (akıllı sözleşmeler, blok zinciri ve cüzdanlar dahil) gerçekleştirmesine, saldırıları gerçek zamanlı olarak engellenmesine, olayları analiz etmesine, yasadışı fonları takip etmesine ve AML/CFT yükümlülüklerini yerine getirmesine yardımcı olan ürün ve hizmetler geliştiriyoruz.

BlockSec, prestijli konferanslarda birden fazla blok zinciri güvenliği makalesi yayımlamış, çeşitli DeFi uygulamalarına yönelik birkaç sıfır gün saldırısı raporlamış, 20 milyonu aşkın doları kurtarmak için birden fazla saldırıyı engellemiş ve milyarlarca kripto para birimini güvence altına almıştır.

Best Security Auditor for Web3

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

BlockSec Audit