In PriorityPool
contract, pause/unpause mechanism is used to stop usage of the pool during merkle tree update.
However, the mechanism is not correctly applied to all sensitive functions of the contract including deposit
and withdraw
.
In PriorityPool
contract, most of core logic is implemented using merkle proof, such as deposit
, withdraw
, unqueueTokens
, and claimLSDTokens
.
The merkle root of the tree is updated by distribution oracle address through updateDistribution
function.
To make it secure between merkle tree state transition, the update is done through two steps:
pauseForUpdate
: Pause the protocol for updating the merkle tree
updateDistribution
: Actually updates the state and unpause the protocol at the end
However, only unqueueTokens
function checks if the protocol is paused or not. Other functions like deposit
and withdraw
does not check the paused status.
Inconsistent status transition between updates
Unauthorized access to the protocol during updates
Manual Review
Add whenNotPaused
modifier to sensitive methods like deposit
and withdraw
.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.