Blockchain güvenlik firması Zellic'in 19 Nisan tarihli bir raporuna göre, Gains Network kaldıraçlı alım satım protokolünün çatalındaki iki farklı hata, yatırımcıların alım satımı yapılan tokenin fiyatından bağımsız olarak her alım satımda %900 kar elde etmesine olanak tanımış olabilir. Hatalardan biri Gains'in önceki sürümünde mevcuttu ancak daha sonra düzeltildi. Diğeri ise yalnızca protokolün bir çatalında bulundu.

Zellic'e göre personeli, Gains fork'ları Gambit Trade, Holdstation Exchange ve Krav Trade'in geliştiricilerini güvenlik açığı konusunda bilgilendirdi ve bu geliştirme ekipleri, protokollerinin bu tür iki kusur içermemesini sağladı. Ancak Zellic, diğer Gains çatallarının hala savunmasız olabileceği konusunda uyardı.

Resmi web sitesine göre Gains Network, Polygon ve Arbitrum'daki merkezi olmayan finans (DeFi) ürünlerinden oluşan bir ekosistemdir. Kaldıraçlı ticaret uygulamasının resmi adı “gTrade”dir. Blockchain analiz platformu DefiLlama'ya göre, Mayıs 2023'teki başlangıcından bu yana 25 milyar doların üzerinde türev hacmini kolaylaştırdı.

Gains Network kaldıraçlı ticaret uygulaması gTrade için kullanıcı arayüzü. Kaynak: Kazanç Ağı

Zellic, yukarıda bahsedilen Gambit Trade ve Holdstation'ın yanı sıra diğer birçok protokol de dahil olmak üzere birçok popüler DeFi ticaret uygulamasının Gains Network'ün temel kodundan türetildiğini iddia etti. Bu istismarı belirli bir çatal üzerinde çalışırken keşfettiler ancak bunu hangi çatalda keşfettiklerini belirtmeyi reddettiler.

Rapora göre Gains Network sözleşmeleri, kullanıcıların piyasa, ters veya momentum ticaret emri açmasına olanak tanıyor. Piyasa emri, fiyattan bağımsız olarak bir varlığı anında alır veya satar.

Bir kullanıcı momentum veya geri dönüş ticareti açmak istediğinde akıllı sözleşme, kullanıcının hangi fiyattan işlem yapmak istediğiyle ilgili verileri içeren bir "emri" kaydeder. Bu fiyata ulaşıldığında, herhangi bir kullanıcı emri tamamlamak için executiveLimitOrder fonksiyonunu çağırabilir. Yürütmeyi çağıran kullanıcının emri veren kullanıcıyla aynı olması gerekmez. Yürütmeyi çağıran kullanıcılara, bu rolü yerine getirmeleri karşılığında küçük bir "yürütme ücreti" ödenir.

Bu, kullanıcıların merkezi bir borsada yaptıklarına benzer şekilde limit (momentum) ve stop-limit (geri alma) emirleri vermelerine olanak tanır, ancak emir tamamlamalarını gerçekleştirmek için merkezi bir varlığa ihtiyaç duymaz.

Kullanıcı bir emir verdiğinde kar alma fiyatı, zararı durdurma fiyatı veya her ikisini birden belirleyebilir. Bu tasarımın amacı, yatırımcıların kar alma noktasında karlı bir işlemden veya zararı durdurma noktasında kaybedilen bir işlemden otomatik olarak çıkmalarına olanak sağlamaktır.

Kazanç çatalındaki hata, satın alma emirlerinde %900 kar elde edilmesini sağladı

İncelediği Kazanç çatalında Zellic, bir emir açıldığında, zararı durdurma fiyatının, kar ve zararı hesaplamak için kullanılan "currentPrice" değişkeninde saklandığını keşfetti. Bu, eğer bir kullanıcı zararı durdurmayı açık fiyatın üzerine koyabilirse, herhangi bir işlemden otomatik olarak kar elde edebileceği anlamına geliyordu.

Örneğin, Bitcoin (BTC) fiyatının 63.000 $ olduğu ve kullanıcının açık fiyat olarak 62.000 $ ve zararı durdurma olarak 64.000 $ girdiği bir senaryoyu düşünün. Bu durumda fiyat 62.000$'a düşerse emir yerine getirilir. Ancak fiyat, stop-loss seviyesinin hemen altında olacak ve bu da otomatik bir çıkışı tetikleyecektir.

Ayrıca kullanıcı tarafından belirlenen stop-loss güncel fiyat olarak kaydedilecektir. Bu, doğru kârın yaklaşık 0 ABD doları olması gerekirken kullanıcının 2.000 ABD doları kâr edeceği anlamına geliyordu. Bu, bir saldırganın her ticaretten kar elde etmesine ve sonunda protokolün tüm fonlarını tüketmesine olanak tanıyabilirdi.

Bu istismarı önlemek için protokol, kullanıcının bir satın alma emrinde zararı durdurmayı açık fiyatının üzerinde ayarlamaya çalışması durumunda "wrong_sl" hatası veren bir kontrol içeriyordu.

Yanlış kâr almayı veya zararı durdurmayı önlemek için Ağ çatal kontrolü kazanır. Kaynak: Zellic

Ancak araştırmacılar bu kontrolün belirli durumlarda atlanabileceğini keşfettiler.

Kullanıcı ilk emri açtığında, işlemi açmak istediği fiyatı belirler ve bu fiyat daha sonra "openPrice" değişkenine kaydedilir. Bu noktada kontrol gerçekleştirildi. Ancak bir emri gerçekleştirmek için kullanılan işlev, bu değişkeni mevcut fiyat artı açılan emrin fiyat etkisi olan "a.Fiyat" değerine değiştirdi.

Bu, kullanıcının son derece yüksek bir açılış fiyatı girmesi durumunda, icracının sadece emri yerine getirerek kontrolü atlayabileceği anlamına geliyordu. Bu aynı zamanda icracının emri başlangıçta belirlenen fiyatın altında bir açık fiyatla doldurmasına da olanak tanıdı.

Örnek olarak Zellic, 100000e10 (1 katrilyon dolar) tutarında bir token satın almak için emir veren ve zararı bundan 1 dolar daha az veya 999,999999999999 trilyon dolar olarak belirleyen bir saldırganın fikrini değerlendirdi. Emir verildikten sonra saldırgan kendi emrini yürütür ve openPrice'ın 100000e10$'dan, işlemin fiyat etkisi dikkate alındıktan sonra mevcut fiyat ne olursa olsun değişmesine neden olur.

İşlem daha sonra yürütülür ve açık hale gelir. Ortaya çıkan açılış fiyatı, başlangıçta belirlenen zararı durdurma seviyesinin altında olduğu sürece, artık zararı durdurma uygulanarak kapatılabilir. Saldırgan kendi zararı durdurma işlemini gerçekleştirdiğinde, kapanış fiyatı ile zararı durdurma fiyatı arasındaki farktan kar elde eder.

Zellic, takasın saldırgan için %900 kârla sonuçlanacağını iddia etti.

Çatal istismarı örneği kazanır. Kaynak: Zellic

Bu kusur, Zellic ekibinin keşfettiği sırada Gains Network'te mevcut değildi. Yalnızca araştırdığı çatallı versiyonda mevcuttu. Ancak bu konuyu inceleme sürecinde Gains'in önceki bir sürümünde mevcut olan ikinci bir kusurla karşılaştı.

İkinci hata, satış emirlerinde %900 kar elde edilmesine izin verdi

İkinci hata, yatırımcıların fiyat hareketinden bağımsız olarak satış emirlerinden %900 kar elde etmelerine olanak sağladı.

Kazanç çatalında bir işlem kapatıldığında, kullanıcının zararı durdurma veya kar alma puanını "int" adı verilen bir değişkene dönüştürdü ve daha sonra bunu yüzde cinsinden karı hesaplamak için kullandı. Ancak kullanıcı tam olarak 2^256-1 olan bir zararı durdur veya kar al değeri girerse, ortaya çıkan hesaplamalar "int"in negatif olmasına neden olurdu.

Bunun nedeni, 2^256-1'in Ethereum'daki pozitif sayılar için maksimum değer olması, bunun üzerindeki herhangi bir değerin "taşmasına" veya sıfırdan başlamasına neden olması ve hesaplamanın açık fiyatı toplama eklemesiydi. Solidity programlama dilinde 2^256-1 aynı zamanda "type(uint256).max" olarak da bilinir.

Zellic'e göre bir saldırgan 9 kattan fazla kaldıraç kullandığı sürece bu istismardan %900 kâr elde edebilir:

“CurrentPrice tipinin (uint256).max olduğu bir satış emrini ele alalım. diff'in sonuç değeri openPrice + 1 (int(type(uint256).max) = -1) olacaktır ve dolayısıyla kâr yüzdesi neredeyse 100 * kaldıraca eşit olacaktır. Dolayısıyla kaldıraç 9’dan büyükse fonksiyon kârı %900 olarak döndürecek.”

Sözleşmede 2^256-1'in kar alma olarak girilmesini engellemeye çalışan bir çek vardı. Ancak bu kontrol yalnızca emrin ilk açıldığı anda gerçekleştirildi. Kullanıcı, emir açıldıktan sonra kar alma puanını değiştirirse, kontrolü atlayabilir ve kar alma olarak 2^256-1 girebilir, böylece her işlem yaptığında otomatik olarak %900 kar elde edebilir.

Bu ikinci kusur, Gains'in önceki bir sürümünde mevcuttu ancak daha sonra yamandı. Mevcut sürümde bu kusur bulunmuyor, çünkü kar alma ve zararı durdurma işlemlerinin güncellenmesinin yanı sıra ilk ayarlandığında da kontrol yapılıyor.

Zellic'in yukarıdaki tüm çatalları bu iki güvenlik açığı hakkında bilgilendirdiği ve bunlardan etkilenebilecek diğer protokolleri bulmak amacıyla Kripto Güvenlik Birliği ile temasa geçtiği bildirildi. Ancak bazı Gains forklarının hala bu hataları içerebileceği ve kullanıcıların fonlarının tükenme riskiyle karşı karşıya kalabileceği konusunda uyardı.

Cointelegraph, yorumlarını almak için Gains Network, Gambit Trade, Holdstation Exchange ve Krav Trade ile iletişime geçti ancak haberin yayınlandığı tarihte herhangi bir yanıt alamadı.

Gains Network, kalıcı sözleşmelere dayanan daha az doğru fiyatlar olarak gördüğü fiyatların aksine, listelenen varlıkların "gerçek spot fiyatını" sağladığını iddia ediyor. Ayrıca rakiplerine kıyasla üstün forex ticareti sunduğunu iddia ediyor.

İlgili: Libra ile ilgili Sui blockchain, 'milyarlarca kişiyi' riske atan kritik hatayı düzeltti