Back to Blog

Piyasa Riskinin Ötesinde: SushiSwap'ın KashiPairMediumRiskV1 Sözleşmesinde Tespit Edilen Bir Mantık Hatası

Code Auditing
December 15, 2022
3 min read

08 Kasım 2022'de, Sushi'nin resmi KashiPairMediumRiskV1 sözleşmesi üzerine (veya ondan fork edilen bazı sözleşmeler) kurulu havuzlardan bazı saldırıların başarıyla varlık çektiğini tespit ettik. Yaptığımız araştırma sonucunda, temel nedenin token fiyatlarının yanlış hesaplanmasına yol açan bir mantık hatasından kaynaklandığını bulduk.

Derhal Sushi'nin güvenlik ekibiyle iletişime geçtik ve bulgularımızı doğruladılar. Sevindirici olan, değerli ancak savunmasız bazı havuzları saldırılardan korumak için harekete geçmiş olmalarıydı. Bunun yanı sıra, açıktan fon kaybedenleri tazmin etmek için prosedürler de sağladılar. Bu nedenle, güvenlik açığı ve saldırılara ilişkin ayrıntıları açıklamanın artık güvenli olduğuna inanıyoruz. Bu raporda ayrıntılı bir analiz sunmak istiyoruz.

Güvenlik Açığı Analizi

KashiPairMediumRiskV1 sözleşmesinin kaynak kodunu inceledikten sonra, bu hatanın borrow fonksiyonunda yer aldığı sonucuna vardık. Bu fonksiyon, solvent değiştiricisindeki borç payını doğrulamak için güncel olmayan exchangeRate değerini kullanmaktadır. Özellikle, doğrulama işlemi _isSolvent fonksiyonundaki exchangeRate'in mevcut değerine göre gerçekleştirilecektir.

liquidate fonksiyonunda ise updateExchangeRate fonksiyonu en başta çağrılmaktadır. Dolayısıyla doğrulama ve hesaplama işlemleri güncellenmiş değere göre gerçekleştirilecektir.

Açıkça görülmektedir ki bu hata, (büyük) bir fiyat farkına yol açmak için istismar edilebilir.

Saldırı Analizi

İki saldırı gözlemledik:

  1. 0xcf8f242ea83100b6d43e659f7f53a698d304fc6ac2ca6fe79e3e07ee05fefe58: Kurban KashiPairMediumRiskV1 sözleşmesini kullanmaktadır ve kayıp yaklaşık 9.466 USDC'dir.
  2. 0x3d163bfbec5686d428a6d43e45e2626a220cc4fcfac7620c620b82c1f2537c78: Kurban, CauldronMediumRiskV1 (KashiPairMediumRiskV1'in fork'u) kullanan bir strateji sözleşmesidir ve kayıp yaklaşık 110.911 MIM'dir.

Birinci saldırı işleminin, orijinal saldırı işlemini öne geçen bir bot tarafından başlatıldığını unutmayın: 0x7a845d8d2af7919f5b9e22dd5571305cb5347d17986a8402715c1463d515fc18, orijinal saldırgan adresi 0xb7ea0f0f8c6df7a61bf024db21bbe85ac5688005'tir.

Aşağıdaki adımlardan oluşan ilk saldırı işlemini örnek olarak alıyoruz:

  1. Balancer'dan 40.900 BADGER ve 121.904 USDC tutarında bir flaş kredi almak.
  2. BentoBox'a 40.900 BADGER ve 113.599 USDC yatırmak.
  3. 40.900.000.000.000.000.000.000 adet BADGER payı yatırmak için kmBADGER/USDC-LINK'in addCollateral fonksiyonunu çağırmak.
  4. 112.529.000.000 adet USDC payı yatırmak için kmBADGER/USDC-LINK'in addAsset fonksiyonunu çağırmak.
  5. 120.755.095.093 adet USDC payı ödünç almak için borrow fonksiyonunu çağırmak.
  6. UpdateExchangeRate fonksiyonunu çağırmak.
  7. Kendini tasfiye etmek için liquidate fonksiyonunu çağırmak.
  8. BentoBox'tan 40.899 BADGER ve 123.006 USDC çekmek.
  9. Flaş krediyi geri ödemek ve yaklaşık 9.466 USDC kâr elde etmek.
  1. adımın zorunlu olmadığını unutmayın, çünkü borrow fonksiyonu UpdateExchangeRate fonksiyonunu zaten çağırmaktadır.

Temel adımlar şu şekildedir:

borrow fonksiyonunda kullanılan exchangeRate değerinin liquidate fonksiyonunda kullanılan değerden saptığını anlamak güç değildir:

  • borrow fonksiyonunda: 250.997.938.545.109.237.740.214.705.193
  • liquidate fonksiyonunda: 328.266.883.541.864.569.505.752.156.794

Etki

Bu hatadan etkilenebilecek düzinelerce havuz (hem Ethereum hem de BSC üzerinde) bulunmaktadır. Bu sorunu hafifletmek için geçici bir yöntem, UpdateExchangeRate fonksiyonunu zaman zaman (veya periyodik olarak) çağırarak sapmayı azaltmak veya ortadan kaldırmaktır. Bu yöntem, etkilenen birçok proje tarafından zaten benimsenmiştir ve ilgili işlemler zincir üzerinde gözlemlenebilmektedir.

Çı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 dünya genelinde tanınan güvenlik uzmanlarından oluşan bir ekip tarafından kurulmuş öncü bir blok zinciri güvenlik şirketidir. Şirket, kitlesel benimsemeyi kolaylaştırmak amacıyla gelişmekte olan Web3 dünyasının güvenliğini ve kullanılabilirliğini artırmaya kendini adamıştır. Bu doğrultuda BlockSec; akıllı sözleşme ve EVM zinciri güvenlik denetim hizmetleri, güvenli geliştirme ve tehditleri proaktif olarak engelleme için Phalcon platformu, fon takibi ve soruşturma için MetaSleuth platformu ve kripto dünyasında web3 geliştiricilerinin verimli gezinmesi için MetaDock uzantısı sunmaktadır.

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

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

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

Best Security Auditor for Web3

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

BlockSec Audit