2 Ocak 2021 tarihinde (Pekin Saati 07:25), izleme sistemimiz ThunderForecast, yCREDIT akıllı sözleşmesine yönelik bir dizi şüpheli işlem bildirdi. Ardından, bu işlemleri analiz etmek ve bildirilen tüm işlemlerin kötü amaçlı olduğunu doğrulamak için araştırma ekibimiz tarafından geliştirilen EthScope sistemini kullandık. Bu blogda saldırının ayrıntılarını açıklıyoruz.
Ayrıntılar
Saldırı, basılan token sayısının amaçlanan miktarla tutarsız olmasından kaynaklanmaktadır. Bu sayede saldırgan, daha düşük bir fiyatla çok daha fazla yCREDIT token'ı elde edebilmektedir. Ardından bu token'lar kâr elde etmek amacıyla satılabilir.
Güvenlik açığı bulunan fonksiyon, StableYieldCredit sözleşmesinin _deposit fonksiyonunda yer almaktadır.
Aşağıda, tüm süreci açıklamak için bir saldırı işlemi kullanacağız.

Saldırgan önce 1e-8 WBTC ve 331.335 yCredit token'ını WBTC-yCREDIT Çift havuzuna aktardı. Ardından saldırgan, saldırıyı başlatmak için StableYieldCredit sözleşmesine 0.5 WBTC yatırdı.
Özellikle, _value değeri, ChainLink fiyat oracle sağlayıcısına dayalı olarak token (0x2260fac5e5542a773aa44fbcfedf7c193bc2c599 - WBTC) için amount (0.5) kullanılarak hesaplanmaktadır (satır 480, _value değeri 1466786010075'tir). Amaç, yatırılan WBTC'nin USD cinsinden değerini hesaplamaktır. Ardından sözleşme, WBTC'yi yatırana (saldırgana) _value - fee kadar yCREDIT token'ı aktaracaktır. Bunun nedeni, yCREDIT'in değerinin bir USD'ye eşit olarak tasarlanmış olmasıdır. Saldırganın küçük bir fee miktarı kaybetmesi dışında her şey yolundadır.
Ayrıca sözleşme, yatırılan WBTC'yi WBTC-yCREDIT Çift havuzuna ekleyecektir. Bunun nedeni, yatırılan WBTC sözleşmeye kilitlenirse likiditeyi kaybedecek olmasıdır. Bu nedenle önce havuza eklenecek token çiftinin (WBTC'den yCREDIT'e) değeri _addLiquidity fonksiyonu kullanılarak hesaplanır. Temel olarak bu değer, havuzun içindeki mevcut rezervlere dayanılarak hesaplanır. Havuzda yalnızca 1e-8 WBTC ve 331.335 yCREDIT token'ı bulunduğundan, hesaplanan amountA değeri 44'tür (amountB değeri 1466786010075'tir). Bu, saldırganın yalnızca 44e-8 WBTC harcadığı (satır 485) ve 14667.86010075 - fee = 14594.52080025 yCREDIT token'ı elde ettiği anlamına gelmektedir (satır 493). Aynı zamanda havuzda az miktarda WBTC (1e-8 + 44e-8) ve (331.335 + 14667.86010075) yCREDIT token'ı kalmaktadır.
Kâr elde etmek için saldırgan, kazandığı 14594.52080025 yCREDIT token'ını borsalarda kolayca takas edebilir. İlginç bir şekilde, bu işlemde kâr elde etme süreci gerekenden çok daha karmaşıktır. Diğer işlemlerde de akıllıca bir saldırı stratejisi gözlemledik.
Saldırıda yer alan bir dizi işlem bulunmakta olup bunlar aşağıdakileri kapsamaktadır (ancak bunlarla sınırlı değildir).
Güncelleme
2020/01/03: Güvenlik açığını gideren yeni bir akıllı sözleşme yayınlandı.
Zaman Çizelgesi
- 2021/01/01 23:25 UTC, saldırılar sistemimiz tarafından tespit edildi
- 2021/01/02 16:20 UTC, bu blog yayınlandı



