背景の紹介
2024 年 11 月 18 日、私たちは BNB スマート チェーンへの攻撃を監視しました。攻撃されたプロジェクトはBTBでした。攻撃トランザクションは
https://bscscan.com/tx/0xfb6df4053c2f1000cb03135064af19a79a87cf25efe612ae5f3468390d6be216
この攻撃により、合計約 5,000 米ドルの損失が発生しました。
攻撃とインシデントの分析
まず、攻撃者はフラッシュローンを使用して、pancakeSwapV3 から 100,000 BUSD を融資しました。
その後、攻撃者は PancakeSwapV2 を使用して、融資された 100,000 BUSD を 1,263,427 BTB に交換しました。
次に、攻撃者はBTBの取引所BTBToUSDTを使用して、3,052 BTBを4,999 BUSDに交換しました。
攻撃されたスマートコントラクトの関数exchangeBTBToUSDTのコードを見てみましょう。
交換価格はpancakeSwapV2のBTBのリザーブとBUSDのペアによって決まることがわかります。このようにして、攻撃者は pacakeSwap を使用して大量の BTB または BUSD を交換し、BTB の価格を操作することができます。攻撃者はフラッシュローンで融資された 100,000 BUSD を BTB と交換するために使用したことがわかります。
したがって、攻撃者が pancakeSwapV2 を使用して大量の BUSD を BTB に交換する前に、
予約0は次のとおりです。
1,327,362,530,716,302,619,951,383、
予約 1 は次のとおりです。
5047758199614262100984、
償還後、reserve0 は次のようになります。
63934622394514316973499、
予約 1 は次のとおりです。
105047758199614262100984。
getPrice での getAmountOut の実装を通じて、攻撃者が引き換える前後の BTB 価格の変化を計算できます。
BTBの価格は1 BTB = 0.00379143964708692 BUSDから1 BTB = 1.6381204893766859 BUSDに上昇したと計算しました。価格は400倍以上値上がりした。
したがって、攻撃者は 3052 BTB を使用して 4999 BUSD と交換しました。
最後に、攻撃者は残りの 1,260,375 BTB を使用して、pancakeSwapV2 から 99,964 BUSD を引き換えました。
フラッシュローンのローンと 100,100 BUSD の利息を返済した後、攻撃者は 4,863 BUSD の利益を得ました。
要約する
この脆弱性の原因は、プロジェクト チームが BTB から BUSD への交換を完了する際に古い価格オラクルを使用したことです。これにより、攻撃者は BTB の価格を簡単に操作でき、最初に BTB を大量に購入し、BTB の価格を吊り上げ、その後 BTB の価格を引き上げることができました。売り切る。アービトラージがついに完了しました。プロジェクト当事者は、価格オラクルとコード操作ロジックを設計するときに複数の当事者による検証を実施し、契約がオンラインになる前に相互監査のために複数の監査会社を選択するよう努めることをお勧めします。