
副題
イベント概要
8月5日の午前4時に、一部のユーザーが理由もなくアカウント残高が消えたとopynフォーラムで報告し、一部のユーザーは以下の図に示すような不審な取引情報を見つけました。
Opynプロジェクト関係者は状況の予備分析を行った後に返答し、「資金は送金され、問題の原因は調査中である」と述べた。
本稿執筆時点で当局者はこの事件に対する対応を発表しており、ハッキングされ、攻撃された可能性のある資産は移転されたが、この脆弱性はETH契約にのみ関係しており、他の契約には影響を及ぼさないとしている。以下に示すように:
0xe7870231992ab4b1a01814fa0a599115fe94203f
0xb837531bf4eb8ebfa3e20948bd14be067c18cbd3
0xb72e60ea1d0c04605f406c158dce9ac6ae6d224c
成都聯安安全研究所は初めてこの事件を追跡、分析し、状況認識システムが盗難を検出した攻撃者の契約書のアドレスは次のとおりです:
攻撃者の攻撃方法が復元されます。
1. 攻撃者はコントラクトを呼び出して、n USDC をコントラクトに送信して住宅ローンを増額し、契約通貨 oETH を取得します。
3. 攻撃者は、抵当に入れられた ETH を償還します。
以下に示すように:
副題
テクニカル分析
テクニカル分析
トランザクション 0x56de6c4bd906ee0c067a332e64966db8b1e866c7965c044163a503de6ee6552a を例にとると、攻撃者はコントラクト 0xe7870231992ab4b1a01814fa0a599115fe94203f をコントラクト 0x951 に使用します。 D51bAe Fb72319d9FBE941E1615938d89ABfe2 が攻撃を開始し、この取引から合計 9,907 ドルの利益を得ました。以下に示すように:
次の図に示すように、攻撃者は最初に addERC20ColternateOption 関数を呼び出し、9900 USDC をコントラクトに送信しました。
addERC20Col Lateral(msg.sender, amtColicular); この関数では、USDC の代理転送を担当します; issueOTokens(amtToCreate,Receiver); 関数では、oETH の鋳造を担当します。このトランザクションは、次のように 30 oETH を鋳造し、攻撃者に送信します。以下の図で:
これが完了すると、攻撃者のボールトのパラメータが変更されます。以下の図に示すように、vault.oTokensIssued と vault.collate はそれぞれ 300000000 と 9900000000 に更新されます。
その後、攻撃者は oETH の交換を開始しました。
演習を呼び出します。構築パラメータ oTokensToExercise は 60、vaultsToExerciseFrom は 2 つのアドレスで、そのうちの 1 つは条件を満たす別の人のアドレスです。以下に示すように:
以下の図に示すように、Exercise 関数は _exercise(vault.oTokensIssued, vaultOwner); ブランチを実行し、30oETH に対応する USDC を呼び出し元に送信します。
演習の for ループを振り返ってみましょう。攻撃者の oTokensToExercise の入力は 60 であるため、コントラクトは 2 番目のアドレスが条件を満たしていることを確認しても、攻撃者である msg.sender に残高を転送します。これにより、攻撃者はUSDCを2回取得することができ、利益を得ることができます。
副題
アドバイスの要約
この事件では、攻撃者は演習機能の論理的欠陥を利用しました。この関数は、最終的な転送を行う前に、呼び出し元がこのアドレスの USDC を引き換える権利があるかどうかを検証せず、単にアドレスが引き換え可能かどうかを検証します。これはコード層の論理的な脆弱性であり、公式回答によれば、この契約はセキュリティ監査を受けているとのこと。成都聯南は、プロジェクト関係者全員に次のことを思い出させます。
1. プロジェクトをオンラインにする前に、十分かつ効果的なセキュリティ監査を実施する必要があります。できれば複数の関係者による監査を実施する必要があります。
2. 契約には、セキュリティインシデント発生時の資金の安全を確保するため、契約取引を停止する機能等を設ける必要がある。