
序文
序文Chuangyu ブロックチェーン セキュリティ ラボを知る2022 年 5 月 16 日 (北京時間)、
5月17日、マルチチェーンDeFiプロトコルFEGが再び攻撃され、攻撃者は291ETHと4343BNBを盗み、約190万ドル(うちBSCが130万ドル、イーサリアムチェーンが60万ドル)を失いました。
分析する
このプロトコルは BSC とイーサの両方で攻撃されており、以下の図は 2 つのチェーン上の攻撃イベントのトランザクション ハッシュです。この攻撃の主な理由は、swapToSwap() 関数内のパス アドレスが攻撃者によって制御される可能性があることです。
基本情報
副題
基本情報
攻撃契約: 0x9a843bb125a3c03f496cb44653741f2cef82f445
BSC: 0x818e2013dd7d9bf4547aaabf6b617c1262578bc7
Ether: 0xf2bda964ec2d2fcb1610c886ed4831bf58f64948
脆弱性契約アドレス:
BSC:0x77cf448ceaf8f66e06d1537ef83218725670d3a509583ea0d161533fda56c063
Ether:0x1e769a59a5a9dabec0cb7f21a3e346f55ae1972bb18ae5eeacdaa0bc3424abd2
攻撃プロセス
攻撃送信:
攻撃プロセス
1. 攻撃者 0x73b3 は、事前に作成された攻撃コントラクト 0x9a84 を呼び出して、DVM から 915.842 WBNB を借用し、116.81 WBNB を 115.65 fBNB に変換します。
2. 攻撃者 0x73b3 は、後でこの脆弱性を悪用するためにコントラクト 0x9a84 を攻撃し、10 個のコントラクトを作成しました。
3. 攻撃者0x73b3は、関数depositInternal()を通じて、最初のステップで交換したfBNBをFEGexPROコントラクト0x818eに抵当に入れます。
4. 攻撃者 0x73b3 は、depositInternal() および swapToSwap() 関数を呼び出して、FEGexPRO コントラクト 0x818e に、2 番目のステップで作成されたコントラクトに対する fBNB を承認させ、作成された 10 個のコントラクトに対して承認された fBNB を繰り返し呼び出します。
5. 攻撃者 0x73b3 によって作成された 10 個のコントラクトが前のステップで承認されているため、攻撃者はこれらの承認されたコントラクトを使用して transferFrom() 関数を呼び出し、毎回 113.452 fBNB を FEGexPRO コントラクト 0x818e から転送します。
6. 攻撃者 0x73b3 は、PancakePair の LP トランザクション ペア 0x2aa7 から 31217683882286.007 FEG と 423 WBNB を借用し、上記の手順 3、4、5 を繰り返して最終的に取得します。
7. 最後に、フラッシュ ローンを返し、上記の攻撃で得たすべての WBNB を攻撃コントラクト 0x9a84 に転送します。
詳細
swapToSwap() 関数を呼び出して悪意のあるパス アドレス パラメーターを渡すことにより、現在のコントラクト トークンの残高は影響を受けません (IERC20(address(Main)).approve(address(path), amt); 現在のコントラクト fBNB の承認。
フォローアップ
攻撃者は、depositInternal() と swapToSwap() を繰り返し呼び出すことで、FEGexPRO コントラクトに、攻撃者が渡した悪意のあるコントラクト パス アドレスへの fBNB を繰り返し許可させることができます。他のアドレスから転送されるトークンの量は、攻撃者が初めて誓約したトークンの量から手数料の量を差し引いたものとなります。デバッガー内の情報を確認すると、渡されたパス アドレス パラメーターはすべて、攻撃プロセスで作成されたコントラクト アドレスであることがわかります。
フォローアップ
16日の攻撃後、攻撃者は翌日にも攻撃を行ったが、攻撃アドレスを変更した。
攻撃契約: 0xf02b075f514c34df0c3d5cb7ebadf50d74a6fb17
攻撃者のアドレス: 0xf99e5f80486426e7d3e3921269ffee9c2da258e2
BSC:0xe956da324e16cb84acec1a43445fc2adbcdeb0e5635af6e40234179857858f82
Ether:0c0031514e222bf2f9f1a57a4af652494f08ec6e401b6ae5b4761d3b41e266a59
攻撃送信:
要約する
R0X 脆弱性コントラクト 0xa3d5 はオープンソースではないため、デバッガーから分析を試みたところ、最初の攻撃プロセスと似ているものの、補助入金には BUY() 関数、補助抽出には SELL() 関数が使用されていることがわかりました。 。