
1900枚以上のETHが盗難、Radiant Capitalはハッカーに「情報収集」され450万ドルを失う
TechFlow厳選深潮セレクト

1900枚以上のETHが盗難、Radiant Capitalはハッカーに「情報収集」され450万ドルを失う
2024年1月3日、Radiant Capitalプロジェクトがフラッシュローン攻撃を受け、攻撃者が3件のトランザクションを通じて1900ETH以上(450万ドル以上)を盗み出しました。現在、盗まれた資金は依然として攻撃者のアドレスに保管されています。
執筆:Beosin
2024年1月3日、Beosin傘下のEagleEyeセキュリティリスク監視・警告・ブロッキングプラットフォームが監視したところによると、Radiant Capitalプロジェクトが攻撃者によるフラッシュローン攻撃を受けました。攻撃者は3件のトランザクションを通じて1900ETH以上(450万ドル相当)を盗み出しました。現在、盗まれた資金は依然として攻撃者のアドレスに保管されています。 Beosinセキュリティチームは直ちに今回の事案を分析しました。
脆弱性分析
本件の根本的な原因は、Radiant Capitalプロジェクトがトークン数量を計算する過程で精度拡張を使用し、かつ四捨五入方式を採用したことにより、攻撃者が精度の大きさを制御して四捨五入との組み合わせで利益点を拡大できるようにしてしまったことにあります。

上記コードをご覧ください。rayDiv関数は2つのuint256データaとbを受け取り、全体の処理は簡略化すると(a*RAY+b/2)/bとなります。ここでRAYは10^27の精度拡張用データです。この結果はa*RAY/b+0.5に相当し、四捨五入機能を実現しています。この計算方式の誤差は主にbに由来します。bがaに比べて非常に小さい場合、誤差は無視できますが、bとaが同程度の桁数を持つ場合、誤差はa自体に匹敵するまで達することがあります。
例を挙げます。a*RAY=10000、b=3の場合、計算結果は3333となり、実際の値より1/10000小さくなります。またa*RAY=10000、b=3000の場合、計算結果は3となり、実際の値より1/10小さくなります。
今回の事件では、攻撃者がbの値を操作し、bとaが同じ桁数になるよう設定することで、計算結果が3/2.0001=1のように実際の値より1/3も小さくなる状態を作り出しました。
攻撃手順
それでは、ハッカーの攻撃手順を見てみましょう。
1. 攻撃者はまずAAVEのフラッシュローンを利用して300万USDCを借り入れ、攻撃の原資としました。

2. 攻撃者はそのうち200万USDCをRadiantコントラクトに預け入れ、200万rUSDCnの証明トークンを取得しました。

3. 攻撃者はRadiantコントラクトからフラッシュローンで200万USDCを借入後、コールバック関数内で200万USDCを返済すると同時に、ステップ2で預け入れたUSDCを引き出しました。最後にフラッシュローン関数がtransferFrom関数を呼び出し、元本と利息を含めて攻撃者のUSDCをコントラクトに送金します。このとき9/10000の手数料が課され、この手数料がプールの流動性となります。

4. 攻撃者はステップ3の操作を繰り返すことで、liquidityIndexを極めて大きな値に制御しました。liquidityIndex = 271800000000999999999999998631966035920です。

5. 次に、攻撃者は新しいコントラクトを作成し、そこに54.36万USDCを送金しました。なぜなら5436(USDCの数値)がステップ4の2718(liquidityIndexの数値)のちょうど2倍であり、四捨五入の制御が容易になるためです。

6. 攻撃者は54.36万USDCをすべてRadiantコントラクトに担保として預け入れ、同額のrUSDCnを取得しました。

7. 攻撃者は40.77万USDCを引き出しました。本来は40.77万rUSDCnを焼却すべきですが、前述の通りburn関数は精度拡張と四捨五入計算を行っています。
407700000000000000000000000000000000000 / 271800000000999999999999998631966035920 = 1.49999999となり、四捨五入によって結果は1になります。これにより結果が1/3も小さくなってしまいます。
下図のように、本来40.77万を焼却すべきところが、残り27.18万となっており、実際に焼却されたのは27.18万のみです。つまり攻撃者は40.77万USDCを引き出したのです。

8. 攻撃者はステップ7の脆弱性を利用し、繰り返し担保預入と引き出しを行い、常に引き出し量が預入量より1/3多くなるようにして、最終的にプール内のUSDCをすべて換金してしまいました。

資金追跡
記事執筆時点において、盗まれた1902ETHは依然としてハッカーのアドレスにあり、移動されていません。Beosin Traceは今後もこの資金の動きを継続的に監視します。

2024年の幕開けとともに、すでに高額な盗難事件が2件発生しています。(昨日のセキュリティインシデントの振り返り:年始早々発生した8000万ドルの被害、Orbit Chain事件とは?)こうした一連の出来事は、Web3エコシステムにおいて、セキュリティ対策が依然として極めて重要であることを再認識させます。
TechFlow公式コミュニティへようこそ
Telegram購読グループ:https://t.me/TechFlowDaily
Twitter公式アカウント:https://x.com/TechFlowPost
Twitter英語アカウント:https://x.com/BlockFlow_News













