返回部落格

重新檢視 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。請注意,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 是存放使用者轉入的抵押代幣的金庫帳戶。由於抵押品應為以 Saber 的 LP 代幣作為底層代幣的 Arrow 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 Security 平台、用於資金追蹤與調查的 MetaSleuth 平台,以及協助 web3 建設者在加密貨幣世界中高效率探索的 MetaSuites 擴充功能。

迄今,該公司已服務超過 300 家知名客戶,包括 MetaMask、Uniswap Foundation、Compound、Forta 和 PancakeSwap,並在兩輪融資中獲得數千萬美元資金,投資者包括 Matrix Partners、Vitalbridge Capital 和 Fenbushi Capital 等知名機構。

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

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

訂閱最新動態
損失約 54.2 萬美元:MakerDaoBot 遭駭事件|BlockSec 週報
Security Insights

損失約 54.2 萬美元:MakerDaoBot 遭駭事件|BlockSec 週報

本報告涵蓋 2026/10/05 至 2026/10/11 以太坊發生的 1 起安全事件,估計損失約 54.2 萬美元。攻擊合約部署惡意適配器,並將其傳入缺乏存取控制的 MakerDaoBot 函式,使機器人授予適配器操作其內部 MakerDAO 餘額的權限。適配器結算 4 場舊版 ETH-A 拍賣,將 200 單位 ETH-A 抵押品轉為 WETH;攻擊合約將其解除封裝,並把 200 ETH 轉給攻擊者。

損失約4.18億美元:Bitget、NEAR Intents遭利用 | BlockSec Weekly
Security Insights

損失約4.18億美元:Bitget、NEAR Intents遭利用 | BlockSec Weekly

本雙週安全報告記錄2026年9月21日至10月4日的八起事件,涉及以太坊、BNB Chain、Solana、比特幣、TRON、XRP Ledger、Zcash、Avalanche、NEAR等網絡,損失約4.184億美元。詳細分析涵蓋Bitget因第三方安全產品漏洞損失3.875億美元,及NEAR Intents因退款驗證缺陷與狀態回滾缺失損失387萬美元。

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

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

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

Web3 最佳安全審計方

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

BlockSec 審計
重新檢視 CashioApp 安全事件