ソース:Beosin
北京時間2024年1月30日、BeosinのEagleEyeセキュリティリスク監視、アラートおよびブロックプラットフォームの監視によると、DeFiプロトコルMIM_Spellがハッカーのフラッシュクレジット攻撃を受けています。その結果、600万ドル以上の損害が発生しました。攻撃者は現在、盗んだ資金をETHに変換し、2つの攻撃者アドレスに送金しており、Beosin KYTはこの脆弱性を分析する間、資金を継続的に監視する予定です。
脆弱性の分析
この事件の主な原因は、攻撃者が、プロジェクトの契約が上方ラウンドアルゴリズムを使用しているという事実を利用し、上方ラウンドを最大化するためにパラメータを1に制御して上方丸め誤差を最大にし、元帳の不均衡を引き起こしたことです。
契約には借入と返済という2つの関数があり、1つは契約からお金を借りること、もう1つは契約にお金を返済することです。
借入関数は借入額を指定し、比例変換によって負債額を計算し、それを呼び出し元の負債総額に更新します。以下に示すように、ここでの契約の加算アルゴリズムは、上方四捨五入を使用します。



Borrow関数は、返済する債務の値を指定し、返済額をスケーリングして計算し、このコントラクトに転送します。下の図を見てわかるように、契約のサブアルゴリズムは依然として上方四捨五入を使用しています。



借入と返済のプロセスを理解した上で、ハッカーがどのように脆弱性を悪用したのかを見てみましょう。
ハッカーはまず、契約の借入額と負債額を0と97にコントロールします(この方法は次のセクションで説明します)。
次のステップでは、借入額と返済額の両方を1に設定して、借入関数と返済関数を呼び出し続けます。最終的に、借入額と負債額は0と120080183810681886665215049728に制御され、深刻な不均衡が生じます。
上記のコードルール(elastic=0, base=97)によると、攻撃者がborrowを一度呼び出し、1を渡すと、2つの元帳はelastic=1, base=98(elasticはelasticが0であるときの値だけ同期して増加する)に変更され、その後再びborrowを呼び出します。一度borrowを呼び出し、1を渡すと、elastic=2, base=196になります(elasticが0でないときは、比例して同期して増加します)。
次に、攻撃者はrepay関数を呼び出し、1を渡すと、サブ関数を呼び出します、この時点で計算された弾性は1*1/1/196=>0に等しいはずですが、アルゴリズムが上向きに丸め、elastic=1の計算で、結果は次のようになります。elastic=1、base=195は、この時点で、弾性は変更されませんが、ベースが倍増されていることがわかります。
攻撃者は、上記の方法を何度も使用することにより、elastic=0、base=120080183810681886665215049728となります。 最終的に、契約は500万MIM以上の借り入れを通じて貸し出されます。
攻撃の流れ
関数の問題点を理解した上で、攻撃者がどのように攻撃を実行したかを見てみましょう(例としてトランザクションの1つ)。
1.攻撃者はまず30万MIMを借ります。

2. その後、攻撃者はコールバック関数で借りた金額と借金の値を調べます。230k.

3. 次に攻撃者はrepayForAll関数を呼び出し、240,000 MIMトークンを返し、弾力性を非常に小さく保ちます。


4.次に、攻撃者はREPAY関数を通して他のユーザーの借金を返し、最終的に借りた金額と借金の値を0と97にコントロールしました


5.攻撃者は新しい契約を作成し、借入と返済をアピールすることで、借入額と負債額を0と97にコントロールする。120080183810681886665215049728.


6.結局、500万MIMが借り入れによって貸し出され、ライトニング・ローンに返却された。

資金調達トラッカー
6.align: left;">プレスタイムの時点で、600万ドル以上の盗まれた資金は、すべて攻撃者によってETHに交換され、ハッカーのアドレスに分散されている移動されていない、Beosin KYTアンチマネーロンダリングプラットフォームは、資金を監視し続けます。
