The MondrianWallet::_validateSignature
function should validate the signature. But the function returns always success whether the signature is valid or not.
The goal of the internal function MondrianWallet::_validateSignature
is to validate the signature provided by the user.
The problem is that this function always returns SIG_VALIDATION_SUCCESS
. The function doesn't check the return value from the ECDSA.recover(hash, userOp.signature);
. That means if the user doesn't have a valid signature, the function will return SIG_VALIDATION_SUCCESS
.
The MondrianWallet::_validateSignature
function is called in the MondrianWallet::validateUserOp
to validate the signature of the user:
The validateUserOp
function does not explicitly check the validationData
returned by _validateSignature
. The function assumes a successful signature validation by returning the value from _validateSignature
without conditional verification.
Also, the MondrianWallet::_validateSignature
returns always SIG_VALIDATION_SUCCESS
due to the incorrect implementation. This function will return success whether the signature is valid or not. That means the user without valid signature can execute transactions without the required permission.
Manual Review
Add the following changes to the _validateSignature
function in order to ensure the signature is valid and the user has permission to execute a given transaction:
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.