Back to Blog

#5: Platypus Finance: Üç Saldırıdan Şansla Sağ Kurtuluş

Code Auditing
February 15, 2024
5 min read

Özet

Platypus Finance, Avalanche blok zinciri üzerinde bir AMM protokolüdür. Aşağıdaki şekilde üç kez saldırıya uğramıştır:

  • 17 Şubat 2023'te, hatalı bir ödeme gücü kontrolü nedeniyle yaklaşık 9,05 milyon dolarlık toplam kayıpla bir saldırıya maruz kaldı. Bu miktarın $2,4 milyonu BlockSec'in yardımıyla kurtarıldı. Yaklaşık 380 bin token Aave sözleşmesinde takılı kaldı ve daha sonra iade edildi.
  • 12 Temmuz 2023'te, stabilcoinler arasındaki fiyat farkının göz ardı edilmesi nedeniyle yaklaşık 50 bin dolar kayıpla saldırıya uğradı.
  • 12 Ekim 2023'te, yaklaşık 2,2 milyon dolar kayıpla fiyat manipülasyonu saldırılarına maruz kaldı. İstismarcıyla müzakere edilmesinin ardından çalınan fonların %90'ı iade edildi.

Proje, tüm bu saldırılardan sağ çıkabildiği için şanslıdır. Bu üç istismarın analizimiz, dikkatli bir denetim veya daha aktif güvenlik önlemleri kullanılsaydı mantıksal açıkların önlenebileceğini göstermektedir.

Birinci Saldırı

Bu güvenlik olayını anlamak için birkaç akıllı sözleşmenin iş akışını anlamak gerekmektedir. Kabaca süreç şu şekildedir:

  • Bir kullanıcı, LP olmak ve bir LP token almak için bir havuza token yatırabilir.
  • LP token, ödül almak için MasterPlatypus'a stake edilebilir. Bu süreçte LP token, MasterPlatypus sözleşmesine aktarılır.
  • LP token, varlık verimliliğini artırmak amacıyla diğer varlıkları ödünç almak için teminat olarak kullanılabilir.

Aşağıdaki şekil etkileşimleri göstermektedir.

Güvenlik Açığı Analizi

Güvenlik açığı, MasterPlatypus sözleşmesindeki emergencyWithdraw adlı bir fonksiyondan kaynaklanmaktadır. Acil durumlarda, bu fonksiyon MasterPlatypus sözleşmesindeki stake edilmiş LP tokenları çekmek için kullanılmalıdır. Bu fonksiyonda sözleşme, çekime izin vermek için kullanıcının Ödeme Gücüne Sahip olup olmadığını kontrol eder. Mantık, kullanıcıların herhangi bir kötü borcu olup olmadığını kontrol eder (yani teminatın borcu ödemek için kullanılıp kullanılamayacağını). Aksi takdirde kullanıcılar stake edilmiş LP tokenları çekebilir.

Ancak bu mantık hatalıdır. Kullanıcının Ödeme Gücüne Sahip olması yalnızca kullanıcının teminatının borcunu karşılayabileceği anlamına gelir. Ancak bu, kullanıcının stake edilmiş tokenları acil olarak çektikten sonra Ödeme Gücüne Sahip olmaya devam edip etmeyeceğini kontrol etmez. Bir saldırgan bu açığı kullanarak varlıkları ödünç alabilir ve ardından stake edilmiş LP tokenları da acil olarak çekebilir (borçları ödemeden). Immunefi'nin Blogundaki ayrıntılı analize bakınız.

Saldırı Analizi

Tüm saldırı sürecini göstermek için örnek olarak bir saldırı işlemi kullanıyoruz.

Adım 1: AAVE'den 44 milyon USDC Flashloan Ödünç Alma

Adım 2: LP-USDC Almak için Havuza 44 milyon USDC Yatırma

Adım 3: MasterPlatypus'a LP-USDC Yatırma

Adım 4: USP Ödünç Almak için LP-USDC'yi Teminat Olarak Kullanma

Adım 5: Saldırıyı Başlatmak için emergencyWithdraw Fonksiyonunu Çalıştırma

Saldırgan, USP borcunu ödemeden LP-USDC'yi ele geçirir.

Adım 6: USDC Almak için Havuzdan LP-USDC Çekme

Adım 7: Kâr Elde Etmek için USP Satma

Ancak kârlar saldırı sözleşmesinin içinde kalmaktadır. Aslında saldırgan, kâr elde etmek için takas işlemi için yeni bir alıcı adresi belirleyebilirdi.

BlockSec'in Kurtarma Operasyonu

Saldırganın kârları saldırı sözleşmesinin içinde bıraktığını fark ettik. Bunun yanı sıra saldırı sözleşmesinin içinde varlıkları çekmek için herhangi bir mantık bulunmuyordu. Ancak sözleşmenin içindeki varlıkların bir kısmını çekmek için kullanılabilecek saldırı sözleşmesinde bir güvenlik açığı tespit ettik.

Özellikle, flashloan geri çağırma fonksiyonunda erişim kontrolü bulunmaktadır; bu da herkesin bu geri çağırma fonksiyonunu çağırabileceği anlamına gelir. Bu aynı zamanda pek çok MEV botunun saldırıya uğramasının temel nedenidir.

Bunun yanı sıra, geri çağırma fonksiyonunun içinde saldırgan sözleşmesi USDC tokenını Platypus finance havuz sözleşmesine onaylamaktadır. Ve bu havuz sözleşmesi yükseltilebilir niteliktedir!

Önceki iki unsuru birleştirerek saldırı sözleşmesindeki USDC'yi şu yöntemle kurtarabildik:

  • Platypus finance havuz sözleşmesini, sözleşme içindeki USDC'yi çekme mantığını içerecek şekilde yükseltme
  • Saldırı sözleşmesinin geri çağırmasını, USDC'yi havuz sözleşmesine onaylamak için çalıştırma
  • Havuz sözleşmesinin herhangi bir fonksiyonun yerini alabilmesi (saldırı sözleşmesi tarafından yürütülecek olan) ile USDC'yi saldırı sözleşmesinden aktarma (saldırı sözleşmesi USDC'yi havuz sözleşmesine onayladığından).

İşte 2,4 milyon USDC'yi kurtaran işlem.

Diğer İki Saldırı

Diğer iki saldırı hakkında daha fazla ayrıntı için aşağıdaki bağlantılara bakınız.

Özet

Üç saldırı, protokoldeki farklı güvenlik açıklarından yararlandı. Bazı diğer satıcılar protokolü denetlemiş olsa da saldırgan yine de açığı buldu ve protokolü başarıyla istismar etti. Neyse ki bazı varlıklar kurtarıldı, ancak her zaman şanslı olmayı bekleyemeyiz. Protokolü ve kullanıcı varlıklarını güvence altına almak için saldırı izleme ve otomatik müdahale dahil olmak üzere daha fazla güvenlik önlemi benimsenmelidir.

Bu serideki diğer makaleleri okuyun:

Best Security Auditor for Web3

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

BlockSec Audit