Back to Blog

CashioApp Güvenlik Olayına Yeniden Bakış

Code Auditing
16 Mayıs 2022
5 min read

23.03.2022 16:20:08 UTC+8 tarihinde başlayan saldırıda, CashioApp istismar edilerek teminat token hesabı boşaltıldı ve yaklaşık 52 milyon tutarında kayba yol açıldı. Saldırı, girdi hesaplarının yetersiz kontrol edilmesi nedeniyle mümkün oldu; bu durum saldırganın hiçbir varlık yatırmadan 20 milyar $CASH tokeni mint etmesine olanak tanıdı. Aşağıda teknik ayrıntıları sunuyoruz.

Özet

Olay, Saber LP Arrows teminatıyla $CASH tokenlerinin mint ve burn işlemlerini yürütmek üzere tasarlanmış Brrr programındaki bir hatadan kaynaklandı. Kullanıcılar, Arrow LP tokenlerini yatırarak $CASH basabilir; bu da $CASH mint etmek anlamına gelir. Arrow LP tokeninin, dayanak token olarak Saber LP tokenini aldığını unutmayın. $CASH mint edebilen print_cash talimatı, Bank hesabı ve Collateral hesabı dahil olmak üzere bir hesap listesi alır. Bu hesaplar, $CASH mint etmek için kullanılmasına izin verilen teminatı (yani Arrow LP tokenlerini) kaydetmek ve izlemek için kullanılır. Tasarım gereği bu iki hesap yalnızca yönetici tarafından başlatılmalı ve yetkilendirilmelidir. Ancak program, Bank hesabının geçerliliğini kontrol etmez. Sonuç olarak saldırgan, Bank hesabı da dahil olmak üzere bir dizi sahte hesap oluşturup bunları print_cash talimatına girdi olarak verebilir ve neredeyse hiçbir maliyet olmadan (tek maliyet işlem ücretleridir) $CASH basabilir.

Ayrıntılar

Analize, aşağıdaki print_cash talimatında kullanılan hesaplardan başlayalım.

common niteliği (75. satır), programda türü BrrrCommon olan bir yapıdır. BrrrCommon içinde bank hesabı ve collateral hesabı yönetici tarafından başlatılır ve yetkilendirilir. crate_token, $CASH tokeninin hesabıdır; crate_mint hesabının açık anahtarı (107. satır), yönetici rollerinin açık anahtarları ve diğer bilgiler gibi $CASH hakkındaki bilgileri saklar. crate_collateral_tokens, kullanıcılardan aktarılan teminat tokenlerini tutan bir kasa hesabıdır. Teminatın, Saber LP tokenlerini alan Arrow LP tokenleri olması gerektiğinden, kullanıcıların saber_swap ile ilgili hesapları girmesi gerekir. BrrrCommon yapısındaki son iki nitelik, talimatta kullanılan hedef programların program kimlikleridir. PrintCash yapısındaki son dört niteliğin sırasıyla kullanıcının sistem hesabı (aynı zamanda işlemi imzalayan hesap), kullanıcının teminat hesabı, kullanıcının mint edilen $CASH tokenlerini alan $CASH token hesabı ve $CASH mint etme yetkisine sahip hesabın açık anahtarı olduğunu unutmayın.

Saldırı İşlemi

Yukarıdaki hesapların işlevini anladıktan sonra saldırı işlemini incelemeye geçelim: 0x4fgL…z2K5. Bu saldırı, 0x6D7f konumundaki saldırgan adresinden başlatılmıştır. PrintCash talimatındaki girdi hesaplarının listesi aşağıda gösterilmektedir.

Yukarıdaki Account #1 (0x5aha), Bank hesabına karşılık gelir. Bunun, CashioApp'in resmî web sitesinde verilen adresten (0xEm1P) farklı olduğunu fark ettik. Bu da Bank hesabının doğrulamasının yetersiz olduğu anlamına gelir!

Doğrulama

Bu kontrolün nasıl aşılabildiğini anlamak için koddaki BrrrCommon yapısının doğrulamasına daha yakından bakalım.

Girdi olarak verilen Bank hesabına yönelik tek kontrol, girdi olarak verilen Collateral hesabının Bank hesabıyla ilişkili olmasını sağlamaktır (12. satır). Ancak sahte bir Collateral hesabı da verilerek bu kontrol kolayca aşılabilir. Ayrıca saldırgan, gerçek teminat varlıklarını yatırmamak için sahte saber_swap hesapları da verdi. Saldırganın amacının, değerli $CASH tokenlerini basmak için değersiz teminat varlıkları yatırmak olduğunu unutmayın; bu nedenle saldırganın verdiği crate_token ve crate_mint gerçek adresler olmalıdır. Başka bir deyişle, Bank hesabının yetersiz kontrol edilmesi, saldırganın değersiz teminatla $CASH basmak üzere bir dizi sahte hesap oluşturmasını mümkün kılar.

Düzeltme

Düzeltme, assert_keys_eq!(self.bank.crate_mint, self.crate_mint) ifadesini eklemektir. Bu ifade, Bank hesabındaki crate_mint değerinin $CASH için doğru crate_mint olmasını sağlar. Peki bu, Bank hesabının geçerli olmasını nasıl sağlar? Yanıtı bulmak için bankman programındaki NewBank yapısına ve crate_token programındaki NewCrate yapısına bakalım.

Aslında Bank hesabı, tohumları crate_token adresini içeren bir PDA'dır. Aynı şekilde crate_token da tohumları crate_mint adresini içeren bir PDA'dır. Bu, girdi olarak verilen crate_mint geçerliyse Bank hesabının da geçerli olmasını sağlar. Saldırganlar, doğru bir crate_mint olmadan $CASH mint edemez ve saldırıları gerçekleştiremez.

BlockSec Hakkında

BlockSec, dünya çapında öne çıkan bir grup güvenlik uzmanı tarafından 2021 yılında kurulmuş, blokzincir güvenliği alanında öncü bir şirkettir. Şirket, gelişmekte olan Web3 dünyasının kitlesel olarak benimsenmesini kolaylaştırmak amacıyla bu dünyanın güvenliğini ve kullanılabilirliğini artırmaya kararlıdır. Bu doğrultuda BlockSec, akıllı sözleşmeler ve EVM zincirleri için güvenlik denetimi hizmetleri, güvenlik geliştirme ve tehditleri proaktif olarak engelleme amacıyla Phalcon Security platformunu, fon takibi ve araştırması için MetaSleuth platformunu ve kripto dünyasında verimli biçimde gezinmek isteyen web3 geliştiricileri için MetaSuites uzantısını sunmaktadır.

Şirket bugüne kadar MetaMask, Uniswap Foundation, Compound, Forta ve PancakeSwap gibi 300'den fazla saygın müşteriye hizmet vermiş ve Matrix Partners, Vitalbridge Capital ve Fenbushi Capital dahil olmak üzere önde gelen yatırımcılardan iki finansman turunda on milyonlarca ABD doları tutarında yatırım almıştır.

Resmî web sitesi: https://blocksec.com/

Resmî Twitter hesabı: https://twitter.com/BlockSecTeam

Sign up for the latest updates
Yaklaşık 5,57 milyon USD Kayıp: X100 Freezer ve NEM İstismarları | BlockSec Haftalık Bülteni
Security Insights

Yaklaşık 5,57 milyon USD Kayıp: X100 Freezer ve NEM İstismarları | BlockSec Haftalık Bülteni

Bu haftalık rapor, 19.10.2026–25.10.2026 tarihleri arasında Ethereum ve BNB Chain'de yaşanan iki güvenlik olayını ele alıyor. X100 Freezer'ın flaş krediyle finanse edilen yönetişim kontrolünün ele geçirilmesini ve BNB Chain'deki bir NEM tokeninin likidite havuzunu etkileyen vergi hesaplaşması kusurunu inceliyor. Raporun kapsamındaki tahmini kayıplar toplam yaklaşık 5,57 milyon USD: temsili X100 işleminden ~4,75 milyon USD, NEM havuzu olayından ise ~820 bin USD. Bu toplama, ayrıca bildirilen sonraki X100 fon çıkışları dahil değil.

Yaklaşık 3,87 milyon USD kayıp: Autheo Network ve UNCX saldırıları | BlockSec Haftalık Bülteni
Security Insights

Yaklaşık 3,87 milyon USD kayıp: Autheo Network ve UNCX saldırıları | BlockSec Haftalık Bülteni

Bu haftalık rapor, 12.10.2026–18.10.2026 tarihleri arasındaki 3 güvenlik olayını ve toplamda yaklaşık 3,87 milyon USD tutarındaki tahmini kaybı ele alıyor. Autheo Network, yaklaşık 1,76 milyon USD tutarında kayba yol açan bir özel anahtar ele geçirilmesi olayı yaşadı; Qubic Wallet, zayıf seed oluşturma nedeniyle yaklaşık 1,30 milyon USD kaybetti. UNCX Network’ün Smart Token Vesting V2 sözleşmelerinde ise Ethereum, BNB Chain, Base ve Robinhood Chain üzerinde yaklaşık 807 bin USD tutarında bir muhasebe hatası meydana geldi. Öne çıkarılan UNCX analizi, hatalı toplam pay hesaplamasının farklı token/pay oranlarıyla oluşturulan hak ediş dilimlerini nasıl birbirine karıştırdığını ve ortak havuzlardan hak edilenden fazla çekim yapılmasına nasıl olanak tanıdığını açıklıyor.

~542 bin dolar kayıp: MakerDaoBot Açığı | BlockSec Haftalık Bülteni
Security Insights

~542 bin dolar kayıp: MakerDaoBot Açığı | BlockSec Haftalık Bülteni

Ethereum'da 2026/10/05-2026/10/11 döneminde 1 güvenlik olayı yaşandı; kayıp yaklaşık 542 bin $. Kötü amaçlı adaptör, erişim kontrolü olmayan MakerDaoBot işleviyle botun MakerDAO bakiyelerinde yetki aldı; 4 eski ETH-A ihalesini kapatıp 200 ETH-A teminatını WETH'ye çevirdi. WETH, 200 ETH olarak saldırgana gönderildi.

Best Security Auditor for Web3

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

BlockSec Audit