Trend-Themen
#
Bonk Eco continues to show strength amid $USELESS rally
#
Pump.fun to raise $1B token sale, traders speculating on airdrop
#
Boop.Fun leading the way with a new launchpad on Solana.
Willkommen zurück zu Sherlocks Vulnerability Spotlight, wo wir eine bedeutende Schwachstelle hervorheben, die während eines Sherlock-Audits entdeckt wurde.
In dieser Woche haben wir einen Chain Denial of Service (CDoS).
Er wurde von @0xPapaPitufo während des @MorphLayer L2-Wettbewerbs entdeckt.
🧵👇

In Rollup.sol, wenn ein bösartiges Batch vorgeschlagen wird, wird angenommen, dass der Sequencer, der es vorgeschlagen hat, die Herausforderung verlieren, bestraft und die Kette zurückgesetzt wird. Diese wirtschaftlichen Anreize verhindern, dass die Kette regelmäßig gestoppt wird.
Dies basiert auf der Annahme, dass ein Sequencer nur Herausforderungen gewinnen kann, wenn das Batch, das er vorgeschlagen hat, gültig ist.
Die Überprüfung, dass prevStateRoot der postStateRoot des vorherigen Batches ist, erfolgt jedoch nur in finalizeBatch(). Diese Überprüfung ist ausreichend, um zu verhindern, dass Batches mit gefälschten prevStateRoots finalisiert werden, stoppt jedoch nicht, dass diese Batches committed werden.
Dies ermöglicht es einem böswilligen Sequencer, jeden Batch vorzuschlagen, der eine gültige Statustransaktion auf einem gefälschten prevStateRoot durchführt.
In den meisten Fällen wird ein Herausforderer diesen ungültigen Batch angreifen. Der Sequencer kann jedoch einen gültigen Nachweis über diesen Zustandsübergang erbringen, um die Einzahlung des ehrlichen Herausforderers zu stehlen und die Herausforderung zu gewinnen.
Falls dies geschieht oder keine Herausforderung durchgeführt wird, kann der eingereichte Batch aufgrund der folgenden Überprüfung nicht finalisiert werden:
Dies wird die Kette einfrieren und es nicht erlauben, dass neue Batches finalisiert werden, da Batches sequenziell eingereicht werden und sequenziell finalisiert werden müssen.

Der Angriffsweg:
1) Der Angreifer schlägt ein Batch vor, das einen gültigen Zustandsübergang von einem gefälschten prevStateRoot enthält.
2) Wenn ein ehrlicher Herausforderer das Batch anfechtet, liefert der Angreifer einen gültigen Beweis für den Zustandsübergang, um die Herausforderung zu gewinnen und die Einzahlung des Herausforderers zu stehlen.
3) Unabhängig davon, ob das oben Genannte passiert oder nicht, ist die Kette jetzt angehalten, da das Batch des Angreifers nicht finalisiert werden kann und keine anderen Batches ohne dessen Finalisierung finalisiert werden können.
4) Der Angreifer wird nicht bestraft, da er die Herausforderung gewonnen hat.
Was ist die Auswirkung?
Eine ehrliche Herausforderung, die ihre Einzahlung verliert, wenn ein unehrlicher Sequencer sie in einer Herausforderung schlägt, und keine neuen Batches mehr finalisiert werden können, was zu einem Denial of Service der Chain führt, und manuell von den Admins zurückgerollt werden muss.
Die Minderung:
Überprüfen Sie in commitBatch(), ob prevStateRoot gleich parentBatchHeader.postStateRoot ist.
Wir sind stolz darauf, @morphlayer durch diese Entdeckung abgesichert zu haben.
Wenn es absolut sicher sein muss, ist Sherlock die richtige Wahl.
3,07K
Top
Ranking
Favoriten