シャーロックの脆弱性スポットライトへようこそ!毎週、研究者がシャーロックの監査で発見した影響力のある脆弱性に焦点を当てます。 今週は、設定ミスによる過剰な引き出しが発生しました。 @NotionalFinance V3 コンテストで @bin2chen、@TheCHADuke、iglyx、@tapired、@xiaoming9090、@0xleastwood によって発見されました。
現在の残高が 999,900 USDC で、withdrawAmountExternal が 1,000,000 USDC の場合、契約の残高が不十分であり、マネー マーケットから追加の資金を引き出す必要があります (例: Compound)。
契約にはすでに999,900 USDCがあるため、1,000,000 USDCの出金リクエストを満たすには、マネーマーケットからさらに100 USDCを引き出すだけで済みます
ただし、Notional は短期金融市場から 100 USDC を引き出す代わりに、oracle.getRedemptionCalldata(withdrawAmountExternal) 関数に従って市場から 1,000,000 USDC を引き出します。その結果、999,900 USDC を超えるものが短期金融市場から引き出されています。
どのような影響がありますか? これにより、過剰な量の資産がNotionalでアイドル状態になり、短期金融市場でリターンや利息が生み出されず、予想よりも低い金利を受け取り、機会損失を被るため、ユーザーの利回りが大幅に失われました。
攻撃者はこれを悪用して、Notional がマネー マーケットに投資した資金を引き出し、プロトコルのリターン/利息の悲しみや驚異的な損失につながる可能性があります。
修正: 基本的に、修正の前に、コードはオラクルに「ユーザーが望むものをすべてマネーマーケットから引き出すための手順を準備してください」と言っていました。 「短期金融市場から欠けているものだけを引き出す」と言うべきだったのに。
修正後も、前の例では、契約によってすでに保有されている 999,900 USDC はそのまま維持され、利回りを獲得し続け、効率を向上させ、すべてのユーザーの利益を維持します。
この脆弱性は、引き出し金額の計算方法と渡し方法における微妙な論理的欠陥に起因しています。契約の既存の残高を見落とすことで、システムは金融市場から過剰な資金を不必要に引き出し、資本の非効率性と利回りの損失につながりました。 私たちは、この発見を通じてNotionalの確保に貢献できたことを誇りに思っています。絶対に安全にする必要がある場合は、シャーロックが正しい選択です。
3.04K