無限ミント攻撃 (Infinite Mint Attack)

Definition pending verification.

無限ミント攻撃は、スマートコントラクトの文脈では「ミントグリッチ」や「リエントランシー脆弱性」とも呼ばれ、攻撃者がコントラクトのロジックを操作して、任意の量のトークンまたは資産をミントできるエクスプロイトの一種です。これは通常、分散型金融(DeFi)プロトコル、特にトークンミント、貸付、または担保メカニズムに関わるもので発生します。根本的な脆弱性は、トランザクション中にコントラクトが外部呼び出しをどのように処理するか、または内部状態をどのように更新するかにしばしば潜んでいます。例えば、コントラクトは、単一のトランザクション内で、ユーザーが担保を預け入れ、その担保に基づいて新しいトークンをミントし、その後担保を引き出すことを許可する場合があります。もしコントラクトが担保の検証や内部状態の正しい更新を完了する前に新しいトークンをミントしてしまうと、攻撃者は同じトランザクションコンテキスト内で複数回ミント機能をトリガーできます。各呼び出しは、同じ初期(または不十分に検証された)担保に基づいてさらに多くのトークンをミントできるため、「無限」または大幅にインフレした量のトークンが空から作成されることになります。これによりトークンの価値が低下し、プロトコルの準備金を枯渇させる可能性があります。このような攻撃を防ぐには、チェック・エフェクト・インタラクション(Checks-Effects-Interactions)パターン、リエントランシーガード、外部呼び出し前の適切な状態更新、および徹底的な監査など、慎重なスマートコントラクト設計が必要です。

        graph LR
  Center["無限ミント攻撃 (Infinite Mint Attack)"]:::main
  Pre_logic["logic"]:::pre --> Center
  click Pre_logic "/terms/logic"
  Rel_advanced_propulsion_systems["advanced-propulsion-systems"]:::related -.-> Center
  click Rel_advanced_propulsion_systems "/terms/advanced-propulsion-systems"
  Rel_consciousness_simulation_hardware["consciousness-simulation-hardware"]:::related -.-> Center
  click Rel_consciousness_simulation_hardware "/terms/consciousness-simulation-hardware"
  Rel_cognitive_enhancement["cognitive-enhancement"]:::related -.-> Center
  click Rel_cognitive_enhancement "/terms/cognitive-enhancement"
  classDef main fill:#7c3aed,stroke:#8b5cf6,stroke-width:2px,color:white,font-weight:bold,rx:5,ry:5;
  classDef pre fill:#0f172a,stroke:#3b82f6,color:#94a3b8,rx:5,ry:5;
  classDef child fill:#0f172a,stroke:#10b981,color:#94a3b8,rx:5,ry:5;
  classDef related fill:#0f172a,stroke:#8b5cf6,stroke-dasharray: 5 5,color:#94a3b8,rx:5,ry:5;
  linkStyle default stroke:#4b5563,stroke-width:2px;

      

🧒 5歳でもわかるように説明

魔法のクッキー製造機を想像してみてください。この機械は、入れた金貨1枚につきクッキーを1枚くれるはずです。もし機械が壊れていたら、金貨を1枚入れてクッキーをもらい、そのクッキーを使って機械を騙し、もう1枚金貨を入れたと思わせて、無限のクッキーを手に入れることができるかもしれません!

🤓 Expert Deep Dive

無限ミント攻撃は、スマートコントラクトの状態遷移ロジックの欠陥を悪用するもので、しばしばリエントランシーや外部呼び出しの不適切な処理に関連しています。一般的なパターンは、以下の手順を実行する関数です:1) ユーザー入力(例:担保)を受け取る。2) 外部呼び出し(例:コールバックをトリガーするERC777トークンコントラクトへの呼び出し)を実行する。3) 内部状態を更新する(例:トークンをミントする、残高を更新する)。もし外部呼び出しが、状態が更新される(例:担保が完全に計上される、または残高が調整される)前に元の関数へのリエントラント呼び出しをトリガーした場合、攻撃者はこれを悪用できます。例えば、レンディングプロトコルでは、ユーザーが担保 C を預け入れ、mint(loan_amount) を呼び出します。これは内部的に外部トークンコントラクトを呼び出します。このトークンコントラクトのフォールバック関数が mint 関数に再突入し、最初の mint 呼び出しが状態更新を完了する前に、攻撃者は同じ担保 C を使用して再度ミントできるようになります。「チェック・エフェクト・インタラクション」パターンが重要です:条件を検証(Checks)、内部状態を更新(Effects)、外部コントラクトと対話(Interactions)。リエントランシーガード(ミューテックス)は、同じトランザクションコンテキスト内での再帰呼び出しを防ぐこともできます。脆弱性は、ERC777のリエントランシー機能や、不完全なERC20実装からも生じる可能性があります。

🔗 関連用語

前提知識:

📚 出典