
自 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 等知名機構。
官方 Twitter 帳號:https://twitter.com/BlockSecTeam



