Back to Blog

市場リスクを超えて:SushiSwapのKashiPairMediumRiskV1コントラクトにおける論理バグの特定

Code Auditing
2022年12月15日
4 min read

2022年11月8日、Sushiの公式KashiPairMediumRiskV1コントラクト(またはそれをフォークしたコントラクト)の上に構築された一部のプールから、攻撃によって資産が不正に引き出されたことを検知しました。調査の結果、根本原因はトークン価格の誤計算を引き起こすロジックバグであることが判明しました。

直ちにSushiのセキュリティチームに連絡し、彼らは我々の発見を確認しました。幸いなことに、彼らは一部の価値がありながらも脆弱なプールを攻撃から保護するための措置を講じていました。さらに、不正利用によって資金を失った人々への補償手順も提供しました。そのため、現在では脆弱性と攻撃に関する詳細を公開しても安全であると考えています。本レポートでは、詳細な分析を提供いたします。

脆弱性分析

KashiPairMediumRiskV1コントラクトのソースコードを分析した結果、このバグはborrow関数に存在し、solventモディファイア内で借り入れシェアを検証する際に古いexchangeRateを使用していることが結論付けられました。具体的には、_isSolvent関数内の現在のexchangeRateの値に基づいて検証が行われます。

一方、liquidate関数では、updateExchangeRate関数が最初に呼び出されます。そのため、検証と計算は更新された値に基づいて行われます。

明らかに、このバグは(巨大な)価格差につながるように悪用される可能性があります。

攻撃分析

2件の攻撃を確認しました。

  1. 0xcf8f242ea83100b6d43e659f7f53a698d304fc6ac2ca6fe79e3e07ee05fefe58: 被害者はKashiPairMediumRiskV1コントラクトを使用しており、損失は約9,466 USDCです。
  2. 0x3d163bfbec5686d428a6d43e45e2626a220cc4fcfac7620c620b82c1f2537c78: 被害者はCauldronMediumRiskV1(KashiPairMediumRiskV1のフォーク)を使用する戦略コントラクトであり、損失は約110,911 MIMです。

最初の攻撃トランザクションは、元の攻撃トランザクション 0x7a845d8d2af7919f5b9e22dd5571305cb5347d17986a8402715c1463d515fc18 をフロントランしたボットによって実行されたことに注意してください。元の攻撃者のアドレスは 0xb7ea0f0f8c6df7a61bf024db21bbe85ac5688005 です。

ここでは、最初の攻撃トランザクション the first attack transaction を例として取り上げ、以下の手順で構成されています。

  1. Balancerから40,900 BADGERと121,904 USDCのフラッシュローンを借り入れる。
  2. 40,900 BADGERと113,599 USDCをBentoBoxに預け入れる。
  3. kmBADGER/USDC-LINKのaddCollateral関数を呼び出し、40,900,000,000,000,000,000,000sharesのBADGERを預け入れる。
  4. kmBADGER/USDC-LINKのaddAsset関数を呼び出し、112,529,000,000 sharesのUSDCを預け入れる。
  5. borrow関数を呼び出し、120,755,095,093 sharesのUSDCを借り入れる。
  6. UpdateExchangeRate関数を呼び出す。
  7. liquidate関数を呼び出し、自身を清算する。
  8. BentoBoxから40,899 BADGERと123,006 USDCを引き出す。
  9. フラッシュローンを返済し、約9466 USDCの利益を得る。

ステップ6は不要です。なぜなら、borrow関数はUpdateExchangeRate関数を呼び出すからです。

主要なステップは次のとおりです。

borrow関数で使用されるexchangeRateの値とliquidate関数で使用される値が乖離していることを理解するのは難しくありません。

  • borrow関数内: 250,997,938,545,109,237,740,214,705,193
  • liquidate関数内: 328,266,883,541,864,569,505,752,156,794

影響

(EthereumとBSCの両方で)このバグの影響を受ける可能性のあるプールは数十個あります。この問題を緩和する一時的な方法は、UpdateExchangeRate関数を時々(または定期的に)呼び出すことで、乖離を減らすか排除することです。この方法はすでに多くの影響を受けたプロジェクトで採用されており、対応するトランザクションは実際に観測されています。

まとめ

DeFiプロジェクトを安全にすることは容易ではありません。コード監査に加えて、コミュニティはプロジェクトの状況を積極的に監視し、攻撃が発生する前にブロックするべきだと考えています。

BlockSecについて

BlockSecは、2021年に世界的に著名なセキュリティ専門家チームによって設立された、先駆的なブロックチェーンセキュリティ企業です。当社は、Web3の普及を促進するために、新興のWeb3の世界のセキュリティとユーザビリティの向上に尽力しています。この目的のため、BlockSecはスマートコントラクトおよびEVMチェーンのセキュリティ監査サービス、セキュリティ開発および脅威のプロアクティブなブロックのためのPhalconプラットフォーム、資金追跡および調査のためのMetaSleuthプラットフォーム、そしてWeb3ビルダーが暗号世界を効率的にサーフィンするためのMetaDock拡張機能を提供しています。

今日まで、当社は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
安全な保管を超えて、第2部:ウォレットの暗号技術を安全に実装する
Security Insights

安全な保管を超えて、第2部:ウォレットの暗号技術を安全に実装する

攻撃者は、保護された秘密鍵のコピーを読み取らずに、その秘密鍵を復元できるのでしょうか。『Beyond Secure Storage』の第2部では、乱数の品質不足、エントロピーの損失、署名用ノンスの不備によって鍵の予測や復元が可能になった6件の事例を検証します。そこから鍵生成と署名に関する実装要件を導き出し、決済機関がコードレビューと導入済みシステムのテストを通じて、それらをどう評価できるかを説明します。

安全な保管を超えて、第1部:安全な決済・署名ワークフローの設計
Security Insights

安全な保管を超えて、第1部:安全な決済・署名ワークフローの設計

攻撃者が秘密鍵を盗まずに、認可されていない操作が有効な署名を得ることは、なぜ可能なのでしょうか。「安全な保管の先へ」第1回では、Bitget、Bybit、Binanceなどの事例を通じて、支払い要求、トランザクションの構築、署名、実行、決済の各段階における認可の不備を検討します。そのうえで、認可されていない操作を防ぎ、損失を抑えるための設計原則を導き出し、レビュー、監査、ペネトレーションテスト、演習によって、それらの防御策をどう検証できるかを説明します。

NEAR Intentsの悪用:返金処理の欠陥とセキュリティ上の教訓
Security Insights

NEAR Intentsの悪用:返金処理の欠陥とセキュリティ上の教訓

NEAR Intentsへの攻撃では、過大な払い戻しイベントを利用し、預け入れた資産が返還された後も内部残高を維持しました。本分析では、レシートの処理の流れと、合計3,865,021 USDTに上るBNB Chainでの7件の出金を再構成します。また、これらの資金流出とプロジェクトが報告した全額回収を区別し、NEARスマートコントラクトの開発と監査におけるセキュリティ上の考慮事項を示します。

Best Security Auditor for Web3

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

BlockSec Audit