Back to Blog

FEGtoken Güvenlik Olayının Analizi: Şeytan Ayrıntılarda Gizlidir

Code Auditing
18 Mayıs 2022
5 min read

15 Mayıs 2022'de yaklaşık saat 20:20'de (UTC), izleme sistemimiz FEGtoken projesinin FEGexPRO sözleşmesinin saldırıya uğradığını tespit etti. Saldırgan hem ETH hem de BSC ana ağında bir dizi saldırı gerçekleştirdi ve toplam etkilenen değer yaklaşık 1,3 milyon dolara ulaştı (proje tarafından zincir üzerinde gönderilen mesaja göre).

Bu olay hakkında daha fazla bilgiye projenin resmi Twitter hesabından ulaşılabilir. Bu raporda, olayın temel nedenini ortaya koymak için ayrıntılara derinlemesine inceleyeceğiz.

0x1 Güvenlik Açığı Analizi: İlk Bakış

Güvenlik açığı bulunan FEGexPRO sözleşmesi hem ETH hem de BSC üzerinde dağıtılmıştır ve sözleşmedeki güvenlik açıklı fonksiyon aşağıda gösterildiği gibi swapToSwap'tır:

Sosyal medyada da belirtildiği üzere, swapToSwap fonksiyonunun path adlı ilk parametresi fonksiyon çağırıcısı tarafından belirlenebilmektedir. Bu sayede saldırgan, rastgele onay elde etmek için bunu istismar edebildi (swapToSwap fonksiyonunun 682. satırına bakınız).

Şimdiye kadar yeni bir şey yok; zira bu, doğrulanmamış parametre(ler) içeren bir diğer vakadan ibarettir. Ancak saldırı izi, bu saldırının yalnızca rastgele onaya atfedilerek açıkça ortaya konulamayacağını göstermektedir. Aslında ince bir numara mevcuttur ve işte tam burada konular ilginçleşmektedir.

0x2 Saldırı Analizi

0x2.1 Ön Saldırı Analizi

Saldırı prosedürünü açıklamak için örnek olarak BSC üzerindeki bir saldırı işlemini ele alıyoruz; fBNB varlığını hedef alan karşılık gelen saldırı izi kısaca şu şekilde özetlenebilir:

  • Adım 1: Fon ve sahte path'lerin hazırlanması. Saldırgan, DVM'den flaş kredi olarak yaklaşık 915 BNB ödünç alır ve bunların bir kısmını 116 fBNB ile takas eder. Saldırgan daha sonra sahte path olarak kullanılacak bir grup sözleşme oluşturur.
  • Adım 2: İlk fonun yatırılması. Saldırgan, 115 fBNB'yi FEGexPRO sözleşmesine yatırarak kurban sözleşmedeki balances2 değerini artırır.
  • Adım 3: Rastgele onayın gerçekleştirilmesi. Saldırgan daha sonra swapToSwap fonksiyonunu çağırır ve ilk parametre olarak sahte bir path geçirir; bu durum FEGexPRO sözleşmesinin path'e 114 fBNB harcama yetkisi vermesine yol açar.
  • Adım 4: depositInternal fonksiyonu ve swapToSwap fonksiyonu çağrılarak başka bir onay yapılması. FEGexPRO sözleşmesi, başka bir path'e 114 fBNB harcama yetkisi verir.

Saldırgan, daha fazla onay elde etmek için Adım 4'ü tekrar tekrar gerçekleştirir. Son olarak saldırgan, onaylanan sahte path'leri kullanarak FEGexPRO'nun tüm fBNB'sini boşaltır ve flaş krediyi geri ödemek için bir kısmını BNB ile takas eder.

Açıkça görülebildiği üzere, sözleşmenin path parametresini kesinlikle kontrol etmesi gerekirdi.

ANCAK, bu saldırıyı tam olarak anlamak için ele alınması gereken bir sorun daha bulunmaktadır: FEGexPRO sözleşmesi sahte path'i onaylasa bile, approve işlemi kullanıcının balances2 değerinin hemen azaltılacağı gerçeğine dayanmaktadır (swapToSwap fonksiyonunun 684. satırı), yani onaylanan fon tam olarak Adım 3'te yatırılan miktardan gelmektedir. Diğer bir deyişle saldırgan, kendi yatırdığı fonu sahte path'e onaylamaktadır. Bunun ardından balances2'nin azalması nedeniyle saldırganın diğer sahte path'ler için onay yapamaması gerekmektedir.

Bu durumda şu soru ortaya çıkmaktadır: Saldırganın ek kâr elde etmek amacıyla diğer onayları yapabilmek için oynadığı kesin numara nedir?

0x2.2 Gelişmiş Saldırı Analizi

Bu soruyu yanıtlamak için swapToSwap fonksiyonuna geri dönmemiz gerekmektedir. Kodu dikkatlice incelediğimizde, burada oynanan numaranın yalnızca sahte bir path değil aynı zamanda sahte bir swap olduğunu ve bunun kurban sözleşmenin bakiyesinin gerçek değeri ile kaydedilen değeri arasında bir tutarsızlığa yol açtığını tespit ettik. Sonuç olarak bu tutarsızlık, saldırganın yatırım miktarını geri yükleyerek depositInternal fonksiyonunu çağırmak suretiyle tekrar tekrar onay yapılmasında kullanılabilmektedir.

Özellikle, depositInternal fonksiyonu bir kullanıcının balances2 değerini esas olarak sözleşmenin Main.balanceOf değeri ile _totalSupply2 arasındaki farka göre değiştirir (depositInternal fonksiyonunun 651. satırı).

swapToSwap'a geçirilen path adresi saldırgan tarafından kontrol edilen sahte bir path olduğundan, gerçekte hiçbir şey transfer edilmez. Sonuç olarak Main.balanceOf dönüş değeri Adım 3'tekiyle aynı kalmaktadır. _totalSupply2'nin swapToSwap fonksiyonunda azaltıldığını göz önünde bulundurduğumuzda, saldırgan yatırım yaptığı sürece artan balance2 değeri kaçınılmaz olarak gerçekte yatırılan miktardan daha yüksek olacaktır.

Dolayısıyla Adım 4'te saldırgan önce depositInternal fonksiyonunu çağırarak yatırım miktarını geri yükler, ardından swapToSwap fonksiyonunu çağırarak onay ve sahte swap işlemini gerçekleştirir. Saldırgan tarafından kullanılan yatırım miktarının yalnızca neredeyse 0 (yani 1 / 1e18) fBNB olduğunu; bu nedenle depositInternal fonksiyonunun, yukarıda açıklandığı şekilde (bir sonraki onayın izinden de görüldüğü üzere) saldırganın balances2 değerini Adım 3'tekiyle neredeyse aynı miktara geri yükleyeceğini belirtmek gerekir.

Saldırgan, Adım 4'ü tekrar tekrar uygulayarak elde ettiği kazancı artırabilir.

Son olarak belirtmek gerekir ki, yukarıda açıkladığımız saldırı, saldırgan tarafından istismar edilen saldırı yollarından yalnızca biridir. Aynı saldırı işleminde saldırgan aynı zamanda FEG varlığını da hedef almaktadır:

0x3 Temel Neden

Bu saldırının temel nedenini şu şekilde özetleyebiliriz:

  • Birincisi, swapToSwap fonksiyonundaki doğrulanmamış parametreden kaynaklanan rastgele onay.
  • İkincisi, swapToSwap fonksiyonundaki sahte swap nedeniyle kurban sözleşmenin bakiyesinin gerçek değeri ile kaydedilen değeri arasındaki tutarsızlık. Bu, saldırganın yatırım miktarı geri yüklenerek tekrar tekrar onay yapılmasında kullanılmaktadır.

Bunları bir araya getirerek saldırgan, kurban sözleşmedeki tüm fonları başarıyla boşalttı.

0x4 Diğer İlgili Saldırılar

Bu yazının kaleme alındığı sırada, başka bir saldırgan tarafından gerçekleştirilen daha fazla ilgili saldırı da gözlemledik.

Yine hem Ethereum hem de BSC üzerinde dağıtılmış sözleşmeler saldırıya uğradı. İlginç bir şekilde, saldırı izleri az önce ele aldığımızdan farklıdır. Kurban sözleşmeler açık kaynaklı olmasa da saldırganın benzer bir saldırı yöntemiyle aynı güvenlik açığını istismar ettiğinden kuvvetle şüphelenmekteyiz.

0x5 Çıkarımlar

Bir DeFi projesini güvenli kılmak kolay bir iş değildir. Kod denetiminin yanı sıra, topluluğun proje durumunu izlemek için proaktif bir yöntem benimsemesi ve saldırı gerçekleşmeden önce engellenmesi gerektiğini düşünüyoruz.

BlockSec Hakkında

BlockSec, 2021 yılında küresel alanda tanınmış bir grup güvenlik uzmanı tarafından kurulmuş öncü bir blok zinciri güvenlik şirketidir. Şirket, kitlesel benimsenmesini kolaylaştırmak amacıyla gelişmekte olan Web3 dünyasının güvenliğini ve kullanılabilirliğini artırmaya adanmıştır. Bu doğrultuda BlockSec; akıllı sözleşme ve EVM zinciri güvenlik denetim hizmetleri, tehditleri proaktif biçimde geliştirmek ve engellemek için Phalcon platformu, fon takibi ve araştırması için MetaSleuth platformu ve web3 geliştiricilerinin kripto dünyasında verimli gezinmesi için MetaDock eklentisi sunmaktadır.

Bugüne kadar şirket, MetaMask, Uniswap Foundation, Compound, Forta ve PancakeSwap gibi 300'den fazla saygın müşteriye hizmet vermiş; Matrix Partners, Vitalbridge Capital ve Fenbushi Capital gibi önde gelen yatırımcılardan iki tur finansmanda on milyonlarca ABD doları yatırım almıştır.

Resmi web sitesi: https://blocksec.com/

Resmi Twitter hesabı: https://twitter.com/BlockSecTeam

Sign up for the latest updates
Yaklaşık 5,57 milyon USD Kayıp: X100 Freezer ve NEM İstismarları | BlockSec Haftalık Bülteni
Security Insights

Yaklaşık 5,57 milyon USD Kayıp: X100 Freezer ve NEM İstismarları | BlockSec Haftalık Bülteni

Bu haftalık rapor, 19.10.2026–25.10.2026 tarihleri arasında Ethereum ve BNB Chain'de yaşanan iki güvenlik olayını ele alıyor. X100 Freezer'ın flaş krediyle finanse edilen yönetişim kontrolünün ele geçirilmesini ve BNB Chain'deki bir NEM tokeninin likidite havuzunu etkileyen vergi hesaplaşması kusurunu inceliyor. Raporun kapsamındaki tahmini kayıplar toplam yaklaşık 5,57 milyon USD: temsili X100 işleminden ~4,75 milyon USD, NEM havuzu olayından ise ~820 bin USD. Bu toplama, ayrıca bildirilen sonraki X100 fon çıkışları dahil değil.

Yaklaşık 3,87 milyon USD kayıp: Autheo Network ve UNCX saldırıları | BlockSec Haftalık Bülteni
Security Insights

Yaklaşık 3,87 milyon USD kayıp: Autheo Network ve UNCX saldırıları | BlockSec Haftalık Bülteni

Bu haftalık rapor, 12.10.2026–18.10.2026 tarihleri arasındaki 3 güvenlik olayını ve toplamda yaklaşık 3,87 milyon USD tutarındaki tahmini kaybı ele alıyor. Autheo Network, yaklaşık 1,76 milyon USD tutarında kayba yol açan bir özel anahtar ele geçirilmesi olayı yaşadı; Qubic Wallet, zayıf seed oluşturma nedeniyle yaklaşık 1,30 milyon USD kaybetti. UNCX Network’ün Smart Token Vesting V2 sözleşmelerinde ise Ethereum, BNB Chain, Base ve Robinhood Chain üzerinde yaklaşık 807 bin USD tutarında bir muhasebe hatası meydana geldi. Öne çıkarılan UNCX analizi, hatalı toplam pay hesaplamasının farklı token/pay oranlarıyla oluşturulan hak ediş dilimlerini nasıl birbirine karıştırdığını ve ortak havuzlardan hak edilenden fazla çekim yapılmasına nasıl olanak tanıdığını açıklıyor.

~542 bin dolar kayıp: MakerDaoBot Açığı | BlockSec Haftalık Bülteni
Security Insights

~542 bin dolar kayıp: MakerDaoBot Açığı | BlockSec Haftalık Bülteni

Ethereum'da 2026/10/05-2026/10/11 döneminde 1 güvenlik olayı yaşandı; kayıp yaklaşık 542 bin $. Kötü amaçlı adaptör, erişim kontrolü olmayan MakerDaoBot işleviyle botun MakerDAO bakiyelerinde yetki aldı; 4 eski ETH-A ihalesini kapatıp 200 ETH-A teminatını WETH'ye çevirdi. WETH, 200 ETH olarak saldırgana gönderildi.

Best Security Auditor for Web3

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

BlockSec Audit