0x0. Güvenlik Açığı
İç analiz aracımız, 5 Nisan'da Tether Gold sözleşmesinde bir saldırganın herhangi birinin XAUt (Tether Gold) token'ını önceden tanımlanmış bir adrese transfer etmesine olanak tanıyan bir hata keşfetti. Ekip raporumuzu aldı ve bu sorunu dahili olarak tespit ettiklerini söyledi. Bugün sorunun giderildiğini öğrendik ve ayrıntıları burada paylaşmak istiyoruz. Ayrıca, bu güvenlik açığının PoC'unu geliştirmek ve hata ayıklamak için Phalcon Fork'un nasıl kullanılacağını göstereceğiz.
0x0. Güvenlik Açığı

Sözleşmenin transferFrom fonksiyonunda, herhangi biri bu fonksiyonu çağırarak diğer kullanıcıların token'larını, token Sahibi tarafından tanımlanmış güvenilir bir alıcıya transfer edebilir. Bu güvenlik açığı doğrudan saldırganın hesabına token transferi için kullanılamasa da, saldırgan yine de havuzun token'larını transfer ederek havuzdaki (örneğin WETH-XAUt havuzu) token fiyatını manipüle edip kâr elde edebilir.
Bu güvenlik açığının düzeltmesi, aşağıda gösterildiği gibi oldukça basittir.

0x1. Güvenlik Açığından Nasıl Yararlanılır
PoC'u yazmak ve hata ayıklamak için Phalcon Fork'u bu amaçla kullanabiliriz. Öncelikle, güvenlik açığı yamalanmadan önce bir Fork oluşturabiliriz. Fork'u Fork API aracılığıyla oluştururken 17038763 blok yüksekliğini kullandım.

Adım I: Yeterli Miktarda Ether Hazırlayın
İlk adım, saldırgan için gas ücreti ödemek amacıyla yeterli miktarda Ether temin etmektir. Hesapta Ether bulunmuyorsa, vitalik.eth'den Ether gönderen işlem başlatılacaktır.
Adım II: Tether Gold Sözleşmesinin Sahipliğini Transfer Edin
Tether Gold sözleşmesinin sahibi bir çoklu imza cüzdanıdır (0xC6CDE7C39eB2f0F0095F41570af89eFC2C1Ea828). Sahipliği saldırgana devretmek için bir çoklu imza işlemi göndermemiz ve ardından işlemi onaylamamız gerekmektedir.

Adım III: Tether Gold Sözleşmesine Ayrıcalıklı Bir Hesap Ekleyin
0x189e7947a9d9210eec3a41dcf5f536bb1d7726f5 adresini ayrıcalıklı bir hesap olarak ekledik. Ardından, XAUt token'ını bir kurban hesabından ayrıcalıklı hesaba transfer etmek için transferFrom fonksiyonunu çağırıyoruz.

0x2. PoC
PoC'u bu GitHub bağlantısında bulabilirsiniz:



