MondrianWallet::_ValidateSignature
function should validate a signature and cross check it with MondrianWallet::owner
but it isn't actually being checked in the function which may allow any Malicious Users transaction to be validated even if it is not signed by MondrianWallet::owner
Any Malicious User can create a PackedUserOperation
with a target MondrianWallet
address as sender and any valid signature , can get validated by MondrianWallet::_ValidateSignature
since there is no proper validation in place i.e The Recovered Addresses is not validated if it belongs to MondrianWallet::owner
this may lead to complete loss of owner
funds if the malicious user crafts a calldata
to drain the MondrianWallet
The statement ECDSA.recover
recovers the address of the signer and returns it but it is nevercompared with the MondrianWallet::owner
, any malicious user can create a valid signature and bypass the validation.
Look at the points marked with @>
in the below output
The wallet owner is 0x7c8999dC9a822c1f0Df42023113EDB4FDd543266
The Signature is signed by 0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266
's private key the first account in local nodes
The Validation only checks if the signer is the one who signed the userOp
hence it returns 0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266
the recovered address
It never cross checks if this address belongs to MondrianWallet::owner
and concludes the validation as SIG_VALIDATION_SUCCESS
by returning 0
Once the ECDSA.recover
is done in MondrianWallet::_ValidateSignature
and an address is returned ,it should be cross checked with MondrianWallet::owner
to ensure if the owner is the actual signer of the signature provided
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.