返回部落格

重新檢視 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

訂閱最新動態
超越安全儲存:第 1 部分——設計安全的付款與簽署流程
Security Insights

超越安全儲存:第 1 部分——設計安全的付款與簽署流程

攻擊者未竊取私鑰,未經授權的操作如何取得有效簽章?《Beyond Secure Storage》第 1 部分以 Bitget、Bybit 和 Binance 等事件為例,檢視付款請求、交易建構、簽署、執行與結算各環節的授權失效問題。文章據此歸納防止未經授權操作及限制損失的設計原則,並說明如何透過審查、稽核、滲透測試與演練驗證這些防護措施。

NEAR Intents 遭攻擊:退款漏洞與資安教訓
Security Insights

NEAR Intents 遭攻擊:退款漏洞與資安教訓

NEAR Intents 遭到攻擊時,攻擊者利用金額過大的退款事件,在存入的資產退回後仍保留內部餘額。本文分析重建回執流程及 BNB Chain 上合計 3,865,021 USDT 的七筆出金,將這些資金流出與專案方所稱的資金全數追回區分開來,並概述開發及審計 NEAR 智能合約時應注意的安全事項。

損失約 557萬 USD:X100 Freezer、NEM 遭攻擊 | BlockSec 週報
Security Insights

損失約 557萬 USD:X100 Freezer、NEM 遭攻擊 | BlockSec 週報

本週報涵蓋 2026年10月19日–2026年10月25日 期間發生在 Ethereum 和 BNB Chain 上的兩起安全事件。報告分析了以閃電貸提供資金、奪取 X100 Freezer 治理權的事件,以及影響 BNB Chain 上某個 NEM 代幣流動性池的稅費結算缺陷。報告範圍內的估計損失合計約 557萬 USD:具代表性的 X100 交易造成約 475萬 USD 的損失,NEM 流動性池事件造成約 82.0萬 USD 的損失。此合計金額不包含另行報導的後續 X100 資金提取。

Web3 最佳安全審計方

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

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