When owner shedule emergency action EMERGENCY_WITHDRAW_ACTION, it sets current timestamp into _emergencyTimelock variable. After that, when owner call enableEmergencyWithdraw(), emergencyWithdrawDelay sets as current timestamp + EMERGENCY_DELAY, intead using initial value from _emergencyTimelock variable + EMERGENCY_DELAY*2.
If owner call enableEmergencyWithdraw() later than it becomes available, for example by an hour, then for an hour longer users will not be able to call the emergencyWithdraw function.
Owner call scheduleEmergencyAction(EMERGENCY_WITHDRAW_ACTION).
2 . When time is _emergencyTimelock[actionId] + EMERGENCY_DELAY + 1 hour(for example), owenr call enableEmergencyWithdraw(). This function set time, when users can start call emergencyWithdraw function. It uses current timestamp! Its problem.
Because, if owner call enableEmergencyWithdraw() after 1 hour, than it could be possible to call, users could call emergencyWithdraw() also an hour later.
In emergency situations, every minute is important for saving funds. But users could call emergencyWithdraw() with time gap, which has creates from time between when owner can call enableEmergencyWithdraw() and really call.
Manual review
Do not use blocl.timestamp in enableEmergencyWithdraw().
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.