Velkommen tilbake til Sherlocks Vulnerability Spotlight, hvor vi fremhever en virkningsfull sårbarhet som ble avdekket under en Sherlock-revisjon. Denne uken har vi en Chain Denial of Service (CDoS). Det ble avdekket av @0xPapaPitufo under @MorphLayer L2-konkurransen. 🧵👇
I Rollup.sol, hvis en ondsinnet batch er foreslått, er antagelsen at sequenceren som foreslo den vil tape utfordringen, bli kuttet, og kjeden vil bli tilbakestilt. Disse økonomiske insentivene hindrer kjeden i å bli regelmessig stoppet. Dette er basert på antakelsen om at en sequencer bare kan vinne utfordringer hvis batchen de foreslo er gyldig.
Kontrollen av at prevStateRoot er postStateRoot for forrige bunke, skjer imidlertid bare i finalizeBatch(). Denne kontrollen er tilstrekkelig til å forhindre at partier med falske prevStateRoots blir ferdigstilt, men det hindrer ikke disse partiene i å bli forpliktet. Dette gjør det mulig for en ondsinnet sekvenser å foreslå en hvilken som helst batch som utfører en gyldig tilstandstransaksjon på en falsk prevStateRoot.
I de fleste tilfeller vil en utfordrer angripe denne ugyldige batchen. Sequenceren kan imidlertid gi et gyldig bevis på denne tilstandsovergangen for å stjele den ærlige utfordrerens innskudd og vinne utfordringen. I tilfelle dette skjer, eller at ingen utfordring utføres, vil den forpliktede batchen ikke kunne fullføres på grunn av følgende kontroll: Dette vil fryse kjeden og ikke tillate at nye partier fullføres, siden partier er forpliktet sekvensielt og må fullføres sekvensielt.
Angrepsbanen: 1) Angriperen foreslår en batch som inneholder en gyldig tilstandsovergang fra en falsk prevStateRoot. 2) Hvis en ærlig utfordrer batchen, gir angriperen et gyldig bevis på statsovergangen for å vinne utfordringen og stjele utfordrerens innskudd. 3) Uansett om det ovennevnte skjer eller ikke, er kjeden nå stoppet, siden angriperens batch ikke kan fullføres, og ingen andre batcher kan fullføres uten at den er ferdigstilt først. 4) Angriperen vil ikke bli kuttet, fordi de vant utfordringen.
Hva er virkningen? En ærlig utfordring som vil miste innskuddet sitt når en uærlig sequencer slår den i en utfordring, og ingen nye batcher vil kunne fullføres, noe som forårsaker tjenestenekt for kjeden, og må rulles tilbake manuelt av administratorene.
Avbøtende tiltak: Kontroller i commitBatch() at prevStateRoot er lik parentBatchHeader.postStateRoot.
Vi er stolte over å ha bidratt til å sikre @morphlayer gjennom dette funnet. Når det absolutt må være sikkert, er Sherlock det riktige valget.
3,12K