.@OnyxDAO が攻撃を受け、約 400 万ドルの損失が発生しました。根本的な原因は、清算プロセス中のユーザー入力が検証されていないことでした。具体的には、NFTLiquidation 契約の liquidateWithSingleRepay 関数の主要パラメータが攻撃者によって制御可能であり、repayAmount パラメータを介して extraRepayAmount 変数を操作できました。これを悪用することで、攻撃者は 1 つのトークンだけですべての担保を清算することができました。
主要な攻撃手順は次のようにまとめられます。
1. 攻撃者は最初に oETH を預け、清算しきい値に達するためにさまざまな資産を借り入れました。同時に、彼らは新しい契約を作成し、寄付攻撃と精度損失 (Compound V2 フォークに固有のもの) によって oETH 交換レートを下げ、攻撃者のポジションを清算対象にしました。
2. 次に、攻撃者は清算を実行しました。パラメータ検証が不十分だったため、攻撃者は extraRepayAmount 変数を操作し、清算する必要のあるトークン数の計算に追加しました。これにより、攻撃者は清算を通じてより多くの oETH を取得し、利益を得ることができました。
攻撃 Tx:
主要な攻撃手順は次のようにまとめられます。
1. 攻撃者は最初に oETH を預け、清算しきい値に達するためにさまざまな資産を借り入れました。同時に、彼らは新しい契約を作成し、寄付攻撃と精度損失 (Compound V2 フォークに固有のもの) によって oETH 交換レートを下げ、攻撃者のポジションを清算対象にしました。
2. 次に、攻撃者は清算を実行しました。パラメータ検証が不十分だったため、攻撃者は extraRepayAmount 変数を操作し、清算する必要のあるトークン数の計算に追加しました。これにより、攻撃者は清算を通じてより多くの oETH を取得し、利益を得ることができました。
攻撃 Tx: