Back to Blog

CashioAppのセキュリティインシデントを再検証する

Code Auditing
2022年5月16日
5 min read

2022年3月23日 16:20:08 UTC+8に始まった攻撃で、CashioAppの担保トークンアカウントから資産が流出し、約5,200万の損失が生じました。入力アカウントの検証が不十分だったため、攻撃者は何も預け入れずに200億の$CASHトークンを発行できました。以下、その技術的な詳細を示します。

概要

このインシデントは、Saber LP Arrowsを担保として$CASHトークンの発行とバーンを処理するよう設計されたBrrrプログラムのバグが原因でした。具体的には、ユーザーはArrow LPトークンを預け入れることで$CASHを発行できます。なお、Arrow LPトークンはSaber LPトークンを原資産として受け取ります。$CASHを発行できるprint_cash命令は、BankアカウントやCollateralアカウントを含むアカウントのリストを受け取ります。これらのアカウントは、$CASHの発行に使用できる担保、すなわちArrow LPトークンの記録と追跡に使われます。設計上、この2つのアカウントを初期化して権限を付与できるのは管理者だけであるべきです。しかし、プログラムはBankアカウントの有効性を確認していません。その結果、攻撃者はBankアカウントを含む一連の偽アカウントを作成してprint_cash命令に渡し、ほぼ無償で$CASHを発行できました(必要な費用はトランザクション手数料のみです)。

詳細

まず、以下のprint_cash命令で使用されるアカウントから分析を始めます。

属性common(75行目)は、プログラム内で型がBrrrCommonの構造体です。BrrrCommonでは、bankアカウントとcollateralアカウントが管理者によって初期化され、権限を付与されます。crate_tokenは$CASHトークンのアカウントであり、crate_mintの公開鍵(107行目)や管理者ロールの公開鍵など、$CASHに関する情報を格納します。crate_collateral_tokensは、ユーザーから送られた担保トークンを保管する保管庫アカウントです。担保はSaberのLPトークンを受け取るArrow LPトークンである必要があるため、ユーザーはsaber_swapの関連アカウントを入力しなければなりません。構造体BrrrCommonの最後の2つの属性は、この命令で使用される対象プログラムのプログラムIDです。なお、構造体PrintCashの最後の4つの属性は、ユーザーのシステムアカウント(トランザクションの署名者でもあります)、ユーザーの担保アカウント、発行された$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アカウントの有効性はどのように保証されるのでしょうか。答えを見つけるため、bankmanプログラムのNewBank構造体と、crate_tokenプログラムのNewCrate構造体を見てみましょう。

実際、Bankアカウントは、シードにcrate_tokenのアドレスを含むPDAです。一方、crate_tokenも、シードにcrate_mintのアドレスを含むPDAです。これにより、入力されたcrate_mintが有効であれば、Bankアカウントも有効であることが保証されます。正しいcrate_mintがなければ、攻撃者は$CASHを発行できず、攻撃を実行できません。

BlockSecについて

BlockSecは、世界的に著名なセキュリティ専門家のグループによって2021年に設立された、ブロックチェーンセキュリティの先駆的企業です。同社は、新興のWeb3世界の安全性と使いやすさを高め、その大規模な普及を促進することに取り組んでいます。この目的のため、BlockSecはスマートコントラクトとEVMチェーンのセキュリティ監査サービス、セキュリティ開発と脅威の先手を打ったブロックを行うPhalcon Securityプラットフォーム、資金の追跡と調査を行うMetaSleuthプラットフォーム、そしてWeb3の開発者が暗号資産の世界を効率的に探索するためのMetaSuites拡張機能を提供しています。

同社はこれまでに、MetaMask、Uniswap Foundation、Compound、Forta、PancakeSwapなど、300を超える著名な顧客にサービスを提供してきました。また、Matrix Partners、Vitalbridge Capital、Fenbushi Capitalなどの有力投資家から、2回の資金調達で数千万米ドルを調達しました。

公式ウェブサイト:https://blocksec.com/

公式Twitterアカウント:https://twitter.com/BlockSecTeam

Sign up for the latest updates
約387万 USDの損失:Autheo NetworkとUNCXへのハッキング | BlockSecウィークリー
Security Insights

約387万 USDの損失:Autheo NetworkとUNCXへのハッキング | BlockSecウィークリー

この週次レポートでは、2026年10月12日–2026年10月18日に発生した3件のセキュリティインシデントを取り上げます。推定損失額の合計は約387万 USDです。Autheo Networkでは秘密鍵の侵害により約176万 USD、Qubic Walletでは脆弱なシード生成により約130万 USDの損失が発生しました。また、Ethereum、BNB Chain、Base、Robinhood Chain上のUNCX NetworkのSmart Token Vesting V2コントラクトでは、会計処理上の誤りにより約80.7万 USDの損失が発生しました。重点的に取り上げるUNCXの分析では、シェア総数の計算に欠陥があり、異なるトークン対シェア比率で作成されたベスティングのトランシェが混同された結果、共通プールからの過剰な引き出しが可能になった仕組みを説明します。

約54万2,000ドルの損失:MakerDaoBotへの攻撃 | BlockSec週間ニュース
Security Insights

約54万2,000ドルの損失:MakerDaoBotへの攻撃 | BlockSec週間ニュース

本レポートは2026/10/05~10/11にEthereumで発生したセキュリティ事故1件を扱う。推定損失は約54.2万ドル。攻撃コントラクトは悪意あるアダプターを展開し、アクセス制御のないMakerDaoBot関数に渡して、ボット内部のMakerDAO残高への操作権限を付与させた。アダプターは旧ETH-Aオークション4件を決済し、ETH-A担保200単位をWETHに変換。攻撃コントラクトがWETHをETHに戻し、攻撃者へ200 ETHを送金した。

約4.18億ドル損失:Bitget、NEAR Intentsのエクスプロイト | BlockSec Weekly
Security Insights

約4.18億ドル損失:Bitget、NEAR Intentsのエクスプロイト | BlockSec Weekly

本隔週セキュリティレポートは、2026年9月21日から10月4日までの8件のインシデントを記録し、Ethereum、BNB Chain、Solana、Bitcoin、TRON、XRP Ledger、Zcash、Avalanche、NEARなどで約4億1840万ドルの損失が発生。詳細分析では、Bitgetの3.875億ドルのサードパーティ製品脆弱性と、NEAR Intentsの387万ドルの返金検証欠陥および状態ロールバック欠落を取り上げる。

Best Security Auditor for Web3

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

BlockSec Audit
CashioAppのセキュリティインシデントを再検証する