If validator whitelist is not meant to be diasable, and rollup contract is pause for enough time, the whitelist can be removed by calling removeWhitelistAfterFork and removeWhitelistAfterValidatorAfk immediatelly after admin unpause rollup contract
Impact
If:
Rollup contract is paused
Validator whitelist mechanis is enable and is not meant to be disabled
There is no intention of Rollup admin to force the inclusion of a new assertion
Then, immediately after admin call RollupAdminLogic.unpause(), anyone can call removeWhitelistAfterFork and removeWhitelistAfterValidatorAfk, enforcing whitelist mechanism to disable and enabling anyone to submit new assertions.
Recommended mitgation
To solve this:
Add a check in removeWhitelistAfterFork and removeWhitelistAfterValidatorAfk to ensure that rollup contract is not paused
Add a grace period to check if rollup when removeWhitelistAfterFork or removeWhitelistAfterValidatorAfk are called to allow validators to confirm assertions.
In this way:
abstract contract RollupCore is IRollupCore, PausableUpgradeable {
// After already decleared variable
//...
uint256 public unpauseTimestampGracePeriod
//...
}
Lines of code
https://github.com/code-423n4/2024-05-arbitrum-foundation/blob/6f861c85b281a29f04daacfe17a2099d7dad5f8f/src/rollup/RollupAdminLogic.sol#L143-L161 https://github.com/code-423n4/2024-05-arbitrum-foundation/blob/6f861c85b281a29f04daacfe17a2099d7dad5f8f/src/rollup/RollupUserLogic.sol#L62-L75
Vulnerability details
Description
If validator whitelist is not meant to be diasable, and rollup contract is pause for enough time, the whitelist can be removed by calling
removeWhitelistAfterFork
andremoveWhitelistAfterValidatorAfk
immediatelly after admin unpause rollup contractImpact
If:
Then, immediately after admin call
RollupAdminLogic.unpause()
, anyone can callremoveWhitelistAfterFork
andremoveWhitelistAfterValidatorAfk
, enforcing whitelist mechanism to disable and enabling anyone to submit new assertions.Recommended mitgation
To solve this:
removeWhitelistAfterFork
andremoveWhitelistAfterValidatorAfk
to ensure that rollup contract is not pausedremoveWhitelistAfterFork
orremoveWhitelistAfterValidatorAfk
are called to allow validators to confirm assertions.In this way:
Assessed type
Invalid Validation