シャーロックの脆弱性スポットライトへようこそ、シャーロックの監査中に発見された影響力のある脆弱性に焦点を当てます。 今週は、@0xdeadbeef____と@IllIllI000による@GMX_IOコンテストで発見されたサービス拒否について調べます。 内訳は@int0x1catedCodeの功績です。
脆弱性の概要: この脆弱性により、攻撃者は実際のデータと一致しない偽の元に戻す理由の長さを提供することで、注文実行フローを操作できます。これにより、プロトコルのエラー処理が誤ったメモリ領域を読み取るようになり、実行プロセスが中断されたり、失敗した注文の処理時に予期しない動作が発生したりする可能性があります。
攻撃手順: 1. セットアップフェーズ カスタムの元に戻す動作を実装する悪意のあるコントラクトをデプロイする 悪意のあるコントラクトは、ターゲットプロトコル(コールバックハンドラなど)によって呼び出せる必要があります。 2. 悪意のある元に戻すデータを作成する 構造体は、改ざんされた長さパラメータを持つデータを元に戻します。 3. プロトコルによる注文の実行 悪意のあるコントラクトとの対話をトリガーする注文を作成する プロトコルが注文を処理し、悪意のあるコントラクトを呼び出すと、細工されたデータで元に戻ります。 プロトコルのエラー処理は、偽の長さを使用して元に戻す理由をデコードしようとします。 4. メモリ読み取りオーバーフローをトリガーする プロトコルは、偽の長さパラメータに基づいてメモリを読み取ります これにより、実際の元に戻すデータの境界を超えて読み取られます。
どのような影響があるのでしょうか? サービス拒否: 注文が適切に実行されず、不良ポジションの清算などの正当なプロトコル操作がブロックされる可能性があります 注文実行の中断: バッチ注文処理が停止され、複数のユーザーに影響を与える可能性があります ガスグリーフィング: 不正な形式の元に戻すデータの処理は、過剰なガスを消費する可能性があります
根本的な原因: 1. 未チェックの長さパラメータ: プロトコルは、検証なしで元に戻すデータで提供された長さの値を信頼します 2. 境界チェックの欠落: 要求された長さが実際のデータサイズと一致するかどうかの検証が行われません
緩和策: 1. データの長さを元に戻すのを常に検証する 2. 最大長制限を実装する
私たちは、この発見を通じて@GMX_IOの確保に貢献できたことを誇りに思っています。 絶対に安全にする必要がある場合は、シャーロックが正しい選択です。
2.34K