BTC $84,607.63 -0.28%
ETH $2,679.31 -1.19%
BNB $769.37 -0.11%
XRP $1.49 +0.03%
SOL $119.14 -0.37%
TRX $0.3346 +0.07%
DOGE $0.0931 -0.61%
ADA $0.2474 +0.51%
BCH $313.76 +2.46%
LINK $13.92 -2.49%
HYPE $89.27 +1.47%
AAVE $180.91 +2.79%
SUI $1.17 +0.56%
XLM $0.2162 -1.15%
ZEC $1,318.15 -1.10%
AAPL $333.25 +0.75%
AMZN $251.64 +1.02%
GOOGL $343.04 +0.96%
MSFT $517.66 +0.44%
META $726.94 -0.06%
NVDA $234.47 +1.17%
TSLA $371.15 +4.33%
SNDK $1,721.71 -3.34%
INTC $118.91 -1.51%
SPCX $158.86 +6.61%
MU $1,066.75 -2.16%
AMD $635.53 +2.53%
BTC $84,607.63 -0.28%
ETH $2,679.31 -1.19%
BNB $769.37 -0.11%
XRP $1.49 +0.03%
SOL $119.14 -0.37%
TRX $0.3346 +0.07%
DOGE $0.0931 -0.61%
ADA $0.2474 +0.51%
BCH $313.76 +2.46%
LINK $13.92 -2.49%
HYPE $89.27 +1.47%
AAVE $180.91 +2.79%
SUI $1.17 +0.56%
XLM $0.2162 -1.15%
ZEC $1,318.15 -1.10%
AAPL $333.25 +0.75%
AMZN $251.64 +1.02%
GOOGL $343.04 +0.96%
MSFT $517.66 +0.44%
META $726.94 -0.06%
NVDA $234.47 +1.17%
TSLA $371.15 +4.33%
SNDK $1,721.71 -3.34%
INTC $118.91 -1.51%
SPCX $158.86 +6.61%
MU $1,066.75 -2.16%
AMD $635.53 +2.53%

慢雾:Orion Protocolが攻撃されたのは、契約の交換機能の関数に再入防止が施されていなかったためです。

2023-02-03 15:55:04

ChainCatcher のメッセージによると、今朝 Orion Protocol プロジェクトの ETH および BSC チェーン上の契約が攻撃を受け、攻撃者は約 302.7 万ドルを得ました。今回の攻撃の過程と原因について、慢雾セキュリティチームが分析した内容は以下の通りです:

  1. 攻撃者はまず ExchangeWithAtomic 契約の depositAsset 関数を呼び出して 0.5 USDC トークンを預け入れ、次の攻撃の準備をしました;

  2. 攻撃者は 284.47 万 USDT トークンをフラッシュローンで借り入れ、その後 ExchangeWithAtomic 契約の doSwapThroughOrionPool 関数を呼び出してトークンを交換しました。交換パスは [USDC -> ATK(攻撃者が作成した悪意のあるトークン)-> USDT] です;

  3. 交換結果は、ExchangeWithAtomic 契約内の USDT トークンの残高から交換前の残高(284.47 万枚)を引いたものですが、問題は USDC -> ATK を交換した後に ATK トークンの転送関数が呼び出され、この関数は攻撃契約を通じて ExchangeWithAtomic 契約の depositAsset 関数を呼び出し、フラッシュローンで借りた 284.4 万 USDT トークンを ExchangeWithAtomic 契約に預け入れることになります。この時、攻撃契約の ExchangeWithAtomic 契約内の預金は 284.47 万枚として成功裏に記帳され、ExchangeWithAtomic 契約内の USDT トークンの残高は 568.9 万枚となり、攻撃者が交換した USDT トークンの数量は交換後の 568.9 万から交換前の 284.47 万を引いた 284.47 万として計算されます;

  4. その後、交換された USDT トークンは最終的にライブラリ関数 creditUserAssets を呼び出して攻撃契約の ExchangeWithAtomic 契約内の使用される帳簿を更新し、攻撃契約の最終的な ExchangeWithAtomic 契約内の USDT トークンの預金が 568.9 万枚として記帳されることになります;

  5. 最後に攻撃者は ExchangeWithAtomic 契約内の withdraw 関数を呼び出して USDT を引き出し、フラッシュローンを返済した後、残りの 283.6 万 USDT トークンを WETH に交換して利益を得ました。攻撃者は同様の手法で BSC チェーン上でも攻撃を仕掛け、19.1 万ドルを得ました;

今回の攻撃の根本的な原因は、契約の交換機能の関数に再入防止が施されておらず、交換後に再度帳簿の預金の数値が交換前後の契約内のトークン残高の差によって計算されるため、攻撃者が偽のトークンを利用して預金関数に再入し、予想以上のトークンを得ることができたことです。

app_icon
ChainCatcher Building the Web3 world with innovations.