Back to Blog

#5: Platypus Finance:3度の攻撃を幸運で乗り切る

Code Auditing
2024年2月15日
6 min read

概要

Platypus Financeは、Avalancheブロックチェーン上のAMMプロトコルです。これまでに以下のように3回攻撃を受けています。

  • 2023年2月17日、誤ったソルベンシーチェックによりハッキングされ、合計約905万ドルの損失が発生しました。このうち、240万ドルはBlockSecの支援により救出されました。約38万トークンがAaveコントラクトに滞留していましたが、その後返還されました。
  • 2023年7月12日、ステーブルコイン間の価格差を無視したことにより、約5万ドルの損失を伴うハッキングが発生しました。
  • 2023年10月12日、価格操作攻撃を受け、約220万ドルの損失が発生しました。攻撃者との交渉の結果、盗まれた資金の90%が返還されました。

このプロジェクトがこれらすべての攻撃を生き延びたのは幸運と言えます。これら3件のエクスプロイトの分析から、綿密な監査やより積極的なセキュリティ対策が講じられていれば、論理的な欠陥を回避できた可能性があることが示されています。

攻撃1

このセキュリティインシデントを理解するには、いくつかのスマートコントラクトのワークフローを理解する必要があります。おおまかなプロセスは以下の通りです。

  • ユーザーはトークンをプールにデポジットしてLPとなり、LPトークンを受け取ることができます。
  • LPトークンはMasterPlatypusにステークして報酬を受け取ることができます。このプロセス中、LPトークンはMasterPlatypusコントラクトに転送されます。
  • LPトークンは担保として使用され、資産効率を向上させるために他の資産を借り入れることができます。

以下の図はその相互作用を示しています。

脆弱性分析

この脆弱性は、MasterPlatypusコントラクト内のemergencyWithdrawという名前の関数に存在します。緊急時には、この関数を使用してMasterPlatypusコントラクトにステークされたLPトークンを引き出す必要があります。この関数では、コントラクトはユーザーがSolvent(支払い能力がある)かどうかをチェックし、引き出しを許可します。このロジックは、ユーザーに不良債権があるかどうか(つまり、担保が負債を返済するために使用できるかどうか)をチェックします。もしなければ、ユーザーはステークされたLPトークンを引き出すことができます。

しかし、このロジックには欠陥があります。ユーザーがSolventであるということは、ユーザーの担保がその負債を返済できることを意味するにすぎません。しかし、これはステークされたトークンを緊急引き出しした後もユーザーがSolventのままであるかどうかをチェックしません。攻撃者はこの欠陥を利用して資産を借り入れ、その後(負債を返済することなく)ステークされたLPトークンも緊急引き出しすることができます。Immunefiのブログでの詳細な分析を参照してください。

攻撃分析

ここでは1つの攻撃トランザクションを例に、攻撃の全プロセスを示します。

ステップ1:AAVEから4400万USDCのフラッシュローンを借り入れ

ステップ2:4400万USDCをプールにデポジットしてLP-USDCを取得

ステップ3:LP-USDCをMasterPlatypusにデポジット

ステップ4:LP-USDCを担保としてUSPを借り入れ

ステップ5:emergencyWithdraw関数を実行して攻撃を開始

攻撃者はUSPの負債を返済せずにLP-USDCを取得します。

ステップ6:プールからLP-USDCを引き出してUSDCを取得

ステップ7:USPを売却して利益を得る

しかし、利益は攻撃コントラクト内に残されたままでした。実際には、攻撃者はスワップのために新しい受取アドレスを設定して利益を得ることができます。

BlockSecによる救出

攻撃者が利益を攻撃コントラクト内に残していたことが判明しました。さらに、攻撃コントラクト内には資産を引き出すロジックがありませんでした。しかし、私たちは攻撃コントラクト内に脆弱性を発見し、それを利用してハックバックし、コントラクト内の資産の一部を引き出すことができました。

具体的には、フラッシュローンのコールバック関数にアクセス制御があり、これは誰でもこのコールバック関数を呼び出せることを意味します。これは多くのMEVボットが攻撃を受ける根本原因でもあります。

さらに、コールバック関数内で、攻撃者コントラクトはUSDCトークンをPlatypus financeのプールコントラクトに承認します。そして、このプールコントラクトはアップグレード可能です!

前述の2点を組み合わせることで、以下の手順で攻撃コントラクト内のUSDCを救出することができます。

  • Platypus financeのプールコントラクトをアップグレードし、コントラクト内のUSDCを引き出すロジックを含めます
  • 攻撃コントラクトのコールバックを呼び出して、USDCをプールコントラクトに承認させます
  • プールコントラクトは(攻撃コントラクトによって実行される)任意の関数を置き換えて、攻撃コントラクトからUSDCを転送できます(攻撃コントラクトがUSDCをプールコントラクトに承認しているため)。

こちらが240万USDCを救出したトランザクションです。

その他2件の攻撃

その他2件の攻撃の詳細については、以下のリンクを参照してください。

まとめ

3件の攻撃はいずれもプロトコルの異なる脆弱性を悪用したものでした。他の一部のベンダーがプロトコルを監査していたにもかかわらず、攻撃者は依然として抜け穴を見つけ、プロトコルの攻撃に成功しました。幸いにも一部の資産は救出されましたが、常に幸運に恵まれると期待することはできません。プロトコルとユーザー資産を保護するために、攻撃の監視と自動対応を含む、より多くのセキュリティ対策を採用すべきです。

このシリーズの他の記事を読む:

Sign up for the latest updates
約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万ドルの返金検証欠陥および状態ロールバック欠落を取り上げる。

BitgetのオフチェーンでのUSD 3億8,750万ドル流出:鍵とコントラクトを超えて
Security Insights

BitgetのオフチェーンでのUSD 3億8,750万ドル流出:鍵とコントラクトを超えて

2026年9月24日、攻撃者がサードパーティ製セキュリティ製品の脆弱性を悪用し内部認証情報を取得、出金命令を偽造。Ethereum、他のEVMネットワーク、XRP Ledger、Zcash、TRON上のBitget運用ウォレットから約3億8750万ドルが流出。秘密鍵とコールドウォレットは無事。本稿は攻撃経路と資金フロー、即時換金とエコシステムの回復対応を整理し、組織向けの体系的な多層防御策を提案、認可済みブロックチェーン侵入テストによる層間検証手法を解説する。

約1,130万ドル(11.3M)の損失:Multicall Router、Nostra | BlockSec Weekly
Security Insights

約1,130万ドル(11.3M)の損失:Multicall Router、Nostra | BlockSec Weekly

2026/09/14-20のレポート。Ethereum・Starknetで計約1130万ドル被害の2件を分析。1件目はマルチコールルーターが自身を宛先と誤認し、Safeのゲートウェイがルーターの権限で約2,900 aEthrsETHを攻撃者のUniswap v4プールへ流出。2件目はNostraのオラクルが最小1ソースで集約可能なため、3つ中2ソースの平均値がNSTRを約49.52ドルと過大評価し、約350万ドルの借入を許した。

Best Security Auditor for Web3

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

BlockSec Audit