返回部落格

重回 CashioApp 安全事件

Code Auditing
2022年5月16日
閱讀約 5 分鐘

2022 年 3 月 23 日 16:20:08 (UTC+8),CashioApp 遭到攻擊,抵押品代幣帳戶被掏空,損失約 5,200 萬美元。此次駭客攻擊之所以能夠成功,是因為針對輸入帳戶的檢查不足,導致攻擊者無需任何抵押即可鑄造 200 億枚 $CASH 代幣。以下我們將說明相關技術細節。

概要

該事件是由 Brrr 程式中的一個錯誤所導致,該程式旨在透過 Saber LP Arrows 的抵押品來處理 $CASH 代幣的鑄造與銷毀。具體而言,使用者可以透過存入 Arrow LP 代幣來「列印」 $CASH,即鑄造 $CASH。請注意,Arrow LP 代幣接收 Saber LP 代幣 作為底層代幣。用於鑄造 $CASH 的 print_cash 指令會接收一系列帳戶,包括 Bank 帳戶和 Collateral 帳戶。這些帳戶用於記錄和追蹤允許用於鑄造 $CASH 的抵押品(即 Arrow LP 代幣)。按照設計,這兩個帳戶應僅由管理員初始化並授權。然而,該程式未能檢查 Bank 帳戶的有效性。因此,攻擊者可以偽造一系列虛假帳戶(包括 Bank 帳戶)並將其輸入 print_cash 指令,從而幾乎免費地(唯一成本是交易手續費)列印出 $CASH。

詳細資訊

讓我們從下方 print_cash 指令所使用的帳戶開始分析。

屬性 common(第 75 行)是一個結構體,其型別為程式中的 BrrrCommon。在 BrrrCommon 中,bank 帳戶和 collateral 帳戶是由管理員初始化並授權的。crate_token 是 $CASH 代幣的帳戶,儲存有關 $CASH 的資訊,例如 crate_mint 的公鑰(第 107 行)、管理員角色的公鑰等。crate_collateral_tokens 是一個金庫帳戶,用於持有從使用者處轉移的抵押代幣。由於抵押品應為 Arrow LP 代幣(即 Saber 的 LP 代幣),使用者必須輸入 saber_swap 的相關帳戶。BrrrCommon 結構體中的最後兩個屬性是指令中所使用目標程式的程式 ID。請注意,PrintCash 結構體中的最後四個屬性是使用者的系統帳戶(同時也是交易簽署人)、使用者的抵押品帳戶、接收鑄造後 $CASH 的使用者 $CASH 代幣帳戶,以及擁有鑄造 $CASH 權限的帳戶公鑰。

攻擊交易

在了解上述帳戶的功能後,我們開始分析攻擊交易:0x4fgL…z2K5。此攻擊是由攻擊者地址發起的(位於 0x6D7f),PrintCash 指令中的輸入帳戶列表如下所示。

上述的 Account #1 (0x5aha) 對應於 Bank 帳戶。我們注意到這與 CashioApp 官方網站上提供的地址 (0xEm1P) 不同,這意味著對 Bank 帳戶的驗證是不充分的!

驗證

讓我們仔細觀察程式碼中對 BrrrCommon 結構體的驗證,以了解繞過機制是如何運作的。

對輸入 Bank 帳戶唯一的檢查是確保輸入的 Collateral 帳戶與 Bank 帳戶相關聯(第 12 行)。然而,透過同時提供虛假的 Collateral 帳戶,這很容易被繞過。此外,為了避免支付真實的抵押資產,攻擊者還提供了虛假的 saber_swap 帳戶。請注意,攻擊者的目標是存入沒有價值的抵押資產來列印有價值的 $CASH 代幣,因此攻擊者提供的 crate_token 和 crate_mint 必須是真實地址。換句話說,對 Bank 帳戶檢查不足,使得攻擊者能夠偽造一系列虛假帳戶,從而利用沒有價值的抵押品來「列印」 $CASH。

修復方案

修復方法是添加 assert_keys_eq!(self.bank.crate_mint, self.crate_mint) 語句。該語句確保了 Bank 帳戶的 crate_mint 是 $CASH 正確的 crate_mint。然而,它是如何確保 Bank 帳戶有效的呢?讓我們看看 NewBank 結構體(在 bankman 程式中)和 NewCrate 結構體(在 crate_token 程式中)來尋找答案。

事實上,Bank 帳戶是一個 PDA,其種子包含 crate_token 的位址。同時,crate_token 也是一個 PDA,其種子包含 crate_mint 的位址。這確保了如果輸入的 crate_mint 有效,那麼 Bank 帳戶就是有效的。如果沒有正確的 crate_mint,攻擊者就無法鑄造 $CASH,也無法發動攻擊。

關於 BlockSec

BlockSec 是一家開創性的區塊鏈安全公司,由一群全球傑出的安全專家於 2021 年成立。公司致力於提升新興 Web3 世界的安全性和可用性,以促進其大規模採用。為此,BlockSec 提供智慧合約與 EVM 鏈安全審計服務、用於安全開發及防範威脅的 Phalcon 平台、用於資金追蹤與調查的 MetaSleuth 平台,以及協助 Web3 構建者在加密世界中高效航行的 MetaSuites 擴展程式。

迄今為止,公司已服務超過 300 家知名客戶,如 MetaMask、Uniswap Foundation、Compound、Forta 和 PancakeSwap,並從 Matrix Partners、Vitalbridge Capital 和分佈資本 (Fenbushi Capital) 等知名投資者處獲得了兩輪數千萬美元的融資。

官方網站:https://blocksec.com/

官方 Twitter 帳號:https://twitter.com/BlockSecTeam

訂閱最新動態
Bitget 3.875億美元鏈下違規事件:超越金鑰與合約的範疇
Security Insights

Bitget 3.875億美元鏈下違規事件:超越金鑰與合約的範疇

2026年9月24日,攻擊者利用第三方安全產品漏洞,獲取內部憑證並偽造提款指令,導致約3.875億美元從Bitget部分營運錢包(涵蓋Ethereum、其他EVM網絡、XRP Ledger、Zcash及TRON)轉出;私鑰及冷錢包未受影響。本文深入梳理事件路徑與資金流向,分析快速轉換為原生資產及生態恢復應對,提出機構縱深防禦框架,並說明授權區塊鏈滲透測試如何驗證跨層假設。

約1130萬美元損失:Multicall Router、Nostra|BlockSec Weekly
Security Insights

約1130萬美元損失:Multicall Router、Nostra|BlockSec Weekly

本報告涵蓋2026/09/14至2026/09/20期間,探討以太坊與Starknet上兩起合計損失約1130萬美元的安全事件。較大一起中,多重呼叫路由器將自身位址接受為分派目標,導致巢狀呼叫以路由器自身已授權身分而非外部呼叫者身分進入Safe錢包的Gateway模組,約2900枚`aEthrsETH`被轉出至攻擊者建立的Uniswap v4池。在Starknet上,Nostra預言機整合僅要求最少一個聚合來源,當三個設定價格來源中僅兩個達成聚合時,操縱的薄池報價與正常報價平均後將`NSTR`估值約49.52美元,支撐約350萬美元以高估抵押品借貸。

损失約3.2億美元:Liquid Network與Symbiosis遭攻擊事件 | BlockSec
Security Insights

损失約3.2億美元:Liquid Network與Symbiosis遭攻擊事件 | BlockSec

本報告涵蓋2026/09/07至2026/09/13,探討兩起造成約3.2億美元損失的安全事件,包括前份報告未提及、發生於2026/09/06的Liquid Network漏洞事件。較大者為該Liquid Network漏洞:Elements中的rangeproof驗證快取藉由雜湊四個欄位(其中兩個長度可變)串接而成金鑰,且未標示欄位邊界,導致某輸出的驗證結果被錯誤套用至另一個未經檢驗證明的輸出,使攻擊者得以憑空創造4,000枚無擔保L-BTC,並將幾乎全數兌回比特幣。在橫跨BNB Smart Chain、Ethereum與Rootstock的Symbiosis跨鏈橋比特幣路徑中,讀取比特幣存款的鏈下程式碼從存款人可自行控制的欄位取得其身份,並在未檢查手續費是否為負值的情況下自存款中扣除,使330聰的存款鑄造出`46,116,860,184.27388234 syBTC`;其須賣出所經之資金池僅有11.26 syBTC,致使流動性提供者與用戶損失約9.97 BTC(約77萬美元)。

Web3 最佳安全審計方

在上線之前驗證設計、程式碼與業務邏輯,對標業內最高安全標準。

BlockSec 審計