-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Minipool whose multisig has been disabled cannot be reassigned a valid one #53
Comments
As far as I can tell, this is working as designed. In our system, a disabled multisig means a multisig that won't be assigned new minipools, not one that can't complete validation for it's current minipools. A disabled multisig is still a valid multisig. Let me know if there is something I am misunderstanding from this issue. For now I am disputing |
0xju1ie marked the issue as sponsor disputed |
I now see it after looking more carefully and deeper into the codes. I was simply misguided by the function NatSpec comment:
The comment should probably be revised to prevent any confusion here. That said, how will the disabled multisig be incentivized to continue taking care of the assigned minipools if this disabled address no longer gets compensated with GGP via Shouldn't the affected minipools' |
This would be closer to Original-M-11 Which we must consider a known issue which the sponsor chose to nofix I will double check but I think I must close as OOS |
GalloDaSballo marked the issue as unsatisfactory: |
Closing per the above as OOS |
Lines of code
https://github.com/multisig-labs/gogopool/blob/3b5ab1d6505ef9be6197c4056acd38d6bed4aff6/contracts/contract/MinipoolManager.sol#L273
Vulnerability details
Impact
The likelihood of
startRewardsCycle()
reverting due to division by zero is practically not going to happen. This is becausedisableAllMultisigs()
is only reasonably invoked whenpauseEverything()
is called by the defender. At his point,startRewardsCycle()
will have already been paused. Logically,enableMultisig()
will be called to enable the registered multisigs prior to callingresumeEverything()
. Otherwise, it would not make much sense with the core functionalities in MinipoolManager still crippled considering many of the methods there, i.e.canClaimAndInitiateStaking()
,claimAndInitiateStaking()
,recordStakingStart()
,recordStakingEnd()
,recordStakingEndThenMaybeCycle()
,recreateMinipool()
,recordStakingError()
, andcancelMinipoolByMultisig()
areonlyValidMultisig()
dependent.But, if the Guardian decides not to enable certain registered multisig, getting the minipools associated manually reassigned to a new and valid multisig is going to be a problem.
Proof of Concept
No where in the code bases is found a method that could have
multisigAddr
in theMinipool
struct reassigned a valid multisig address. The only place where a multisig can be assigned to a minipool is located in the function logic ofcreateMinipool()
:File: MinipoolManager.sol#L273
Creating a new minipool via
createMinipool()
with a newnodeID
will not do the trick either sinceonlyValidMultisig()
isminipoolIndex
specific.Devoid of a valid multisig, the affected minipools will be denied of completing validations on top of accessing other associated functions with
onlyValidMultisig()
visibility.Tools Used
Manual inspection
Recommended Mitigation Steps
Consider implementing a restricted setter function to have the multisig of affected minipools reset as follows:
The text was updated successfully, but these errors were encountered: