Добро пожаловать обратно в "В центре внимания уязвимостей Шерлока", где мы подчеркиваем значимую уязвимость, обнаруженную во время аудита Шерлока. На этой неделе у нас есть Услуга Отказа в Обслуживании Цепи (CDoS). Она была обнаружена @0xPapaPitufo во время конкурса @MorphLayer L2. 🧵👇
В Rollup.sol, если предлагается злонамеренная партия, предполагается, что секвенсер, который ее предложил, проиграет вызов, будет наказан и цепочка будет сброшена. Эти экономические стимулы предотвращают регулярную остановку цепочки. Это основано на предположении, что секвенсер может выиграть вызовы только в том случае, если предложенная им партия действительна.
Однако проверка того, что prevStateRoot является postStateRoot предыдущей партии, происходит только в finalizeBatch(). Эта проверка достаточна для предотвращения финализации партий с поддельными prevStateRoots, но не останавливает эти партии от коммита. Это позволяет злонамеренному секвенсеру предлагать любую партию, которая выполняет действительную транзакцию состояния на поддельном prevStateRoot.
В большинстве случаев, оспорщик атакует эту недействительную партию. Однако, секвенсер может предоставить действительное доказательство этого перехода состояния, чтобы украсть депозит честного оспорщика и выиграть вызов. В случае, если это произойдет, или если вызов не будет выполнен, зафиксированная партия не сможет быть завершена из-за следующей проверки: Это заморозит цепочку и не позволит завершить какие-либо новые партии, поскольку партии фиксируются последовательно и должны быть завершены последовательно.
Путь атаки: 1) Атакующий предлагает пакет, который содержит действительный переход состояния из фальшивого prevStateRoot. 2) Если честный оспариватель оспаривает пакет, атакующий предоставляет действительное доказательство перехода состояния, чтобы выиграть оспаривание и украсть депозит оспаривателя. 3) Произойдет ли вышеописанное или нет, цепочка теперь остановлена, так как пакет атакующего не может быть завершен, и никакие другие пакеты не могут быть завершены без его предварительного завершения. 4) Атакующий не будет наказан, потому что он выиграл оспаривание.
Каков эффект? Честный вызов, который потеряет свой депозит, когда нечестный секвенсер победит его в вызове, и новые пакеты не смогут быть завершены, что приведет к отказу в обслуживании цепи, и администраторы будут вынуждены вручную откатить изменения.
Смягчение: Проверьте в commitBatch(), что prevStateRoot равен parentBatchHeader.postStateRoot.
Мы гордимся тем, что помогли обеспечить безопасность @morphlayer благодаря этому открытию. Когда безопасность имеет первостепенное значение, Шерлок — правильный выбор.
2,96K