熱門話題
#
Bonk 生態迷因幣展現強韌勢頭
#
有消息稱 Pump.fun 計劃 40 億估值發幣,引發市場猜測
#
Solana 新代幣發射平臺 Boop.Fun 風頭正勁
歡迎回到 Sherlock 的漏洞聚光燈,我們將突出在 Sherlock 審計中發現的一個影響深遠的漏洞。
本週,我們有一個鏈式拒絕服務(CDoS)。
這是在 @0xPapaPitufo 於 @MorphLayer L2 競賽中發現的。
🧵👇

在 Rollup.sol 中,如果提出了一個惡意的批次,假設提出該批次的排序者將會輸掉挑戰,受到懲罰,並且鏈將被重置。這些經濟激勵防止鏈被定期停止。
這是基於一個假設,即排序者只有在他們提出的批次有效時才能贏得挑戰。
然而,對 prevStateRoot 是否為前一批次的 postStateRoot 的檢查僅在 finalizeBatch() 中進行。這項檢查足以防止帶有假 prevStateRoots 的批次被最終確定,但並不阻止這些批次被提交。
這使得惡意的序列器可以提議任何在假 prevStateRoot 上執行有效狀態交易的批次。
在大多數情況下,挑戰者會攻擊這個無效的批次。然而,序列器可以提供這個狀態轉換的有效證明,以竊取誠實挑戰者的押金並贏得挑戰。
如果發生這種情況,或者沒有進行挑戰,則已提交的批次將無法完成,因為以下檢查:
這將凍結鏈,並不允許任何新的批次被完成,因為批次是按順序提交的,必須按順序完成。

攻擊路徑:
1) 攻擊者提出一個包含來自假 prevStateRoot 的有效狀態轉換的批次。
2) 如果誠實的挑戰者對該批次提出挑戰,攻擊者提供有效的狀態轉換證明以贏得挑戰並竊取挑戰者的押金。
3) 無論上述情況是否發生,鏈現在已經停止,因為攻擊者的批次無法被最終確定,且在它被最終確定之前,其他批次也無法被最終確定。
4) 攻擊者不會被削減,因為他們贏得了挑戰。
這會造成什麼影響?
一個誠實的挑戰將在不誠實的序列器在挑戰中擊敗它時失去其押金,並且將無法完成新的批次,導致鏈的拒絕服務,並且必須由管理員手動回滾。
緩解措施:
在 commitBatch() 中檢查 prevStateRoot 是否等於 parentBatchHeader.postStateRoot。
我們很自豪能夠通過這次發現來幫助保護 @morphlayer。
當它絕對需要安全時,Sherlock 是正確的選擇。
2.78K
熱門
排行
收藏