K1Validator.transferOwnership()
does not check if the module is initialized for a smart account.
K1Validator.transferOwnership()
does not check if the module has been initialized for a smart account before setting smartAccountOwners
to the new owner:
Therefore, it is possible for a smart account to call transferOwnership()
while the K1Validator
module has not been initialized for it. If this occurs, it will no longer be possible for the module to be installed for the smart account, since onInstall()
will revert due to the _isInitialized()
check:
As such, a smart account could be permanently prevented from using a K1Validator
module if it calls transferOwnership()
before initialization.
A realistic scenario where this could occur:
Smart account owner sends a transaction calling transferOwnership()
.
The transaction is not executed for a long period of time.
Smart account owner sends a transaction calling uninstallModule()
to uninstall the module:
onUninstall()
is called, which resets the module to uninitialized.
The transaction calling transferOwnership()
is executed afterwards.
Now, the smart account can no longer re-install the K1Validator
module.
Smart accounts can be locked out of using the K1Validator
module permanently.
In transferOwnership()
, consider checking if the module is initialized for the calling smart account with _isInitialized(msg.sender)
.
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.