5 Aralık 2023'te, önde gelen Web3 geliştirme platformu Thirdweb, önceden oluşturulmuş sözleşmelerini etkileyen önemli akıllı sözleşme güvenlik açıklarını ifşa etti. Bu kritik kusur, söz konusu savunmasız sözleşmeler kullanılarak dağıtılan tüm ERC-20, ERC-721 ve ERC-1155 token'larını etkiledi. İfşaatın ardından geçen günlerde, savunmasız sözleşmelerle dağıtılan token'lar bir dizi saldırıda aşamalı olarak istismar edildi; bu durum, temel uyumsuzluğun ciddiyetini gözler önüne serdi.
ThirdWeb Akıllı Sözleşme Güvenlik Açığını Anlamak
ThirdWeb olayının temel nedeni, akıllı sözleşme geliştirmenin iki temel bileşeni arasındaki beklenmedik etkileşimde yatmaktadır: ERC-2771 ve OpenZeppelin'in Multicall uygulaması. Güvenlik açığını tam olarak kavramak için her bir bileşeni ayrı ayrı ve ardından etkileşimlerinin nasıl istismar edilebilir bir yol oluşturduğunu anlamak gerekmektedir.
ERC-2771: Meta-İşlemler ve Güvenilir Yönlendiriciler
EIP-2771, Alıcı sözleşmelerin güvenilir Yönlendirici sözleşmeleri aracılığıyla meta-işlemleri kabul etmesini sağlayan sözleşme düzeyinde bir protokol tanımlar. Bu standart, üçüncü tarafların (yönlendiriciler) kullanıcılar adına gaz ücretlerini ödemesine izin vererek kullanıcıların yerel blokzincir token'larına sahip olma zorunluluğunu ortadan kaldırmak ve böylece kullanıcı deneyimini iyileştirmek açısından kritik öneme sahiptir.
Pratikte, OpenZeppelin'in ERC2771Context'i yaygın olarak benimsenen bir uygulamadır. Temel işlevi, güvenilir bir yönlendiriciden gelen calldata'nın son 20 baytını etkin _msgSender() olarak değerlendirmektir. Bu kütüphaneyi kullanan geliştiriciler için yaygın uygulama, meta-işlemlerle uyumluluğu sağlamak amacıyla msg.sender'ın tüm doğrudan kullanımlarını _msgSender() ile değiştirmektir. Benzer şekilde, _msgData() eklenen gönderici bilgisini hariç tutarak orijinal işlem verilerini almak için kullanılır.
function _msgSender() internal view virtual override returns (address) {
uint256 calldataLength = msg.data.length;
uint256 contextSuffixLength = _contextSuffixLength();
if (isTrustedForwarder(msg.sender) && calldataLength >= contextSuffixLength) {
return address(bytes20(msg.data[calldataLength - contextSuffixLength:]));
} else {
return super._msgSender();
}
}
function _msgData() internal view virtual override returns (bytes calldata) {
uint256 calldataLength = msg.data.length;
uint256 contextSuffixLength = _contextSuffixLength();
if (isTrustedForwarder(msg.sender) && calldataLength >= contextSuffixLength) {
return msg.data[:calldataLength - contextSuffixLength];
} else {
return super._msgData();
}
}
Multicall: Verimlilik İçin İşlemleri Toplu Hâle Getirme
Multicall işlevi, kullanıcıların birden fazla fonksiyon çağrısını tek bir işlemde bir araya getirmesine olanak tanır; bu sayede gaz maliyetleri önemli ölçüde azalır ve işlem verimliliği artar. OpenZeppelin'in MulticallUpgradeable'ı bu amaçla kullanılan popüler bir uygulamadır. Bir calldata bayt dizisi alır ve her giriş için çağıran sözleşmenin bağlamında yürütülen bir delegatecall gerçekleştirir.
function multicall(bytes[] calldata data) external virtual returns (bytes[] memory results) {
results = new bytes[](data.length);
for (uint256 i = 0; i < data.length; i++) {
results[i] = _functionDelegateCall(address(this), data[i]);
}
return results;
}
(Not: Burada ele alınan hata, OpenZeppelin'in Multicall'ının sonraki sürümlerinde düzeltilmiştir.)
Uyumsuzluk: ERC-2771 ve Multicall Çakışması
ThirdWeb olayındaki akıllı sözleşme güvenlik açığının özü, calldata'nın ERC-2771 ve Multicall tarafından işlenme biçimindeki kritik tutarsızlıktan kaynaklanmaktadır. ERC-2771, güvenilir yönlendiricinin mesaj verilerini ve gönderici bilgisini bir arada paketlemesini bekler. Alıcı sözleşme daha sonra bu bilgileri doğru şekilde açmak için _msgData() ve _msgSender() kullanır.
Ancak Multicall fonksiyonu, savunmasız uygulamasında ERC-2771'in meta-işlemler için verileri paketleme biçimiyle uyumlu olacak şekilde tasarlanmamıştı. Özellikle Multicall bir çağrı grubunu işlerken, ilk meta-işlemden _msgSender()'ı doğru şekilde çıkarması ve ardından her bir çağrıyı yürütmeden önce bu gönderici bilgisini her bir çağrının calldata'sına eklemesi gerekirdi. Bu kritik adım eksikti.
Gönderici bilgisinin Multicall tarafından işlenen her alt çağrı içindeki calldata'ya doğru şekilde eklenmemesi nedeniyle, hedef sözleşmedeki ERC-2771 bağlamı, gönderici bilgisini alt çağrının _msgData()'sının son 20 baytından çıkarmaya çalışacaktı. Kritik olan husus, bir saldırganın bu son 20 baytı kontrol edebilmesiydi. Bu durum, kötü niyetli bir kişinin Multicall tarafından işlendiğinde ve ardından ERC-2771 etkin bir sözleşme tarafından yorumlandığında, manipüle edilmiş bir _msgSender() değeriyle (örneğin, saldırgan tarafından kontrol edilen bir adres veya hatta bir protokolün kendi havuz adresi) keyfi mantığı yürütecek belirli calldata'lar oluşturmasına imkân tanıdı. Bu durum, amaçlanan güvenlik kontrollerini etkin biçimde atlattı, her iki spesifikasyonun beklentilerini ihlal etti ve yetkisiz işlemlere yol açtı.
ThirdWeb Olayı: Saldırı Analizi ve İstismar
BlockSec'in Phalcon platformu tarafından analiz edilen bir saldırı işlemini kullanarak ThirdWeb olayındaki akıllı sözleşme güvenlik açığı istismarının gerçek dünyadan bir örneğini inceleyelim.
Saldırganın stratejisi, bir Uniswap havuzunun kimliğine bürünmek ve token bakiyesini tüketmek için _msgSender()'ı manipüle etmeyi içeriyordu.
-
Adım 1: İlk Token Edinimi. Saldırgan, merkezi olmayan bir borsada 5 WETH karşılığında 3.455.399.346 TIME token'ı takas ederek işe başladı. Bu, sonraki manipülasyon için gerekli token'ları sağladı.
-
Adım 2: Kötü Amaçlı Multicall Yürütümü. Bu, istismarın özüdür. Saldırgan, ERC-2771/Multicall uyumsuzluğunu istismar etmek üzere tasarlanmış özenle hazırlanmış calldata ile güvenilir bir yönlendiriciyi çağırdı. Bu calldata
Multicallfonksiyonu tarafından ayrıştırıldığında, TIME token sözleşmesininburnfonksiyonunun çağrılmasıyla sonuçlandı. Kritik olarak, güvenlik açığı nedeniyle_msgSender()yanlışlıkla Uniswap Havuzu adresi olarak yorumlandı. Bu durum, saldırganın gerçek bir yetkilendirme olmaksızın Uniswap havuzu tarafından tutulan TIME token'larının önemli bir bölümünü etkin biçimde yakmasına olanak tanıdı. BlockSec Phalcon platformu, bu akışı görselleştirmek için ayrıntılı işlem izleme imkânı sunmaktadır.
Kötü amaçlı multicall'u gösteren işlem izleme Yukarıdaki görsel, saldırganın
Forwarder.executeçağrısının nasıl işlendiğini göstermektedir.multicallfonksiyonu bir bayt dizisi alır ve bu dizi, manipüle edilmiş_msgSender()ileburnfonksiyonunun çağrılmasına yol açar.
Multicall ayrıştırma ve burn fonksiyonu çağrısının ayrıntılı görünümü Phalcon'dan alınan bu ayrıntılı görünüm, sözleşmeyi çağırmak için veri olarak uzunluğu 1 olan
bytes[]'ın kullanıldığını ve bunun sahte_msgSender()altındaburnfonksiyonunun yürütülmesine yol açtığını göstermektedir. -
Adım 3: Fiyat Manipülasyonu. Saldırgan, Uniswap havuzundan büyük miktarda TIME token'ı yakarak havuzun TIME likiditesini büyük ölçüde azalttı. Bu yapay kıtlık, havuz içinde TIME'ın WETH karşısındaki fiyatının fırlamasına neden oldu.
-
Adım 4: Kârlı Arbitraj. TIME fiyatı yapay olarak şişirilmişken saldırgan, kalan 3.455.399.346 TIME token'ını 94 WETH karşılığında geri takas ederek manipüle edilmiş fiyattan kayda değer bir kâr elde etti.
Bu olaylar dizisi, modül uyumsuzluğundan kaynaklanan ince bir akıllı sözleşme güvenlik açığından yararlanan sofistike bir saldırıyı gözler önüne sermektedir.
BlockSec ile Akıllı Sözleşmelerinizi Güvence Altına Alın
Gizli uyumsuzlukların projenizi riske atmasına izin vermeyin. Uzman denetçilerimiz, güvenlik açıklarını istismar edilmeden önce tespit edip gidermek amacıyla kapsamlı akıllı sözleşme denetimleri gerçekleştirmektedir.
Web3 için En İyi Güvenlik Denetçisi
Lansmandan önce tasarımı, kodu ve iş mantığını doğrulayın
ThirdWeb Olayından Çıkarılan Temel Dersler
ThirdWeb olayı, özellikle üçüncü taraf kütüphanelerin etkileşimi söz konusu olduğunda Web3 güvenliğinde var olan karmaşıklıkların kritik bir hatırlatıcısı niteliğindedir.
- Birlikte Çalışabilirlik Riskleri: Hızla gelişen DeFi alanında projeler, üçüncü taraf kütüphane ve modüllerden oluşan bir yığına büyük ölçüde güvenmektedir. Bu bileşenler geliştirmeyi hızlandırırken etkileşimleri beklenmedik ve gizli güvenlik açıkları yaratabilir. ThirdWeb olayı, OpenZeppelin'in
ERC2771Context'i veMulticallUpgradeable'ı gibi yaygın olarak kullanılan ve sağlam görünen bileşenlerin bile entegrasyonları titizlikle ele alınmadığında kritik güvenlik boşlukları yaratabileceğini açıkça ortaya koymaktadır. - Derin Teknik Denetim Zorunludur: Bu tür akıllı sözleşme güvenlik açıkları yüzeysel kontrollerle kolayca tespit edilemez. Farklı modüllerin verileri, özellikle calldata'yı nasıl işlediğini ve yorumladığını analiz etmek ve olası tutarsızlıkları belirlemek için derin teknik uzmanlık gerekmektedir. Modüller arası etkileşimlere ve uç durumlara odaklanan kapsamlı akıllı sözleşme denetimi son derece önemlidir.
- Sürekli İzleme ve Olay Müdahalesi: Güçlü denetimlere rağmen yeni saldırı vektörleri ortaya çıkabilir. BlockSec'in Phalcon'u gibi sürekli blokzincir güvenlik izlemesi, şüpheli etkinliği gerçek zamanlı olarak tespit etmek ve hasarı en aza indirmek için hızlı olay müdahalesini etkinleştirmek açısından kritik öneme sahiptir.
- Bireysel Modül Güvenliğinin Ötesinde: Geliştiriciler, bireysel bileşenlerin güvenliğinin ötesinde düşünerek tüm akıllı sözleşme sistemlerinin bütüncül güvenlik duruşunu göz önünde bulundurmalıdır. Verilerin farklı modüller arasında nasıl aktığı, bağlamların nasıl korunduğu veya değiştirildiği ve harici çağrıların nasıl ele alındığı, tümü kritik değerlendirmelerdir.
ThirdWeb olayı, blokzincir güvenliğine proaktif ve kapsamlı bir yaklaşımın önemini vurgulamaktadır. Yalnızca bireysel kütüphanelerin itibarına güvenmek yeterli değildir; aralarındaki etkileşimler titizlikle incelenmelidir.
Phalcon ile Zincir Üstü Olayları İnceleyin
BlockSec'in Phalcon'u, gerçek zamanlı izleme, olay müdahalesi ve derinlemesine işlem analizi için önde gelen Web3 güvenlik platformudur. ThirdWeb olayı gibi karmaşık istismarları benzersiz bir netlikle anlayın.
Bu serideki diğer makaleleri okuyun:
- Giriş: 2023'ün En "Dikkat Çekici" On Güvenlik Olayı
- #1: Flashbots Relay'deki Güvenlik Açıklarını İstismar Ederek MEV Bot'larını Avlamak
- #2: Euler Finance Olayı: 2023'ün En Büyük Hack'i
- #3: KyberSwap Olayı: Son Derece İnce Hesaplamalarla Yuvarlama Hatalarının Ustaca İstismarı
- #4: Curve Olayı: Derleyici Hatası Masum Kaynak Koddan Hatalı Bayt Kodu Üretiyor
- #5: Platypus Finance: Şans Eseri Üç Saldırıdan Sağ Çıkmak
- #6: Hundred Finance Olayı: Savunmasız Çatallanmış Protokollerde Hassasiyetle İlgili İstismar Dalgasını Tetiklemek
- #7: ParaSpace Olayı: Sektörün Şimdiye Kadarki En Kritik Saldırısını Engellemek İçin Zamanla Yarış
- #8: SushiSwap Olayı: Beceriksiz Bir Kurtarma Girişimi Bir Dizi Taklitçi Saldırıya Yol Açıyor
- #9: MEV Bot 0xd61492: Ustaca Bir İstismarda Avcıdan Avlanana



