validateNonce function is either not complete or does not actually do anything unlike what the doc says
function validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds)
external
virtual
override
requireFromEntryPoint
returns (uint256 validationData)
{
validationData = _validateSignature(userOp, userOpHash);
_validateNonce(userOp.nonce);
_payPrefund(missingAccountFunds);
}
validateNonce is done here but if we look at
function _validateNonce(uint256 nonce) internal view virtual {} it does nothing at all
Nonce is not validated which makes it vulnerable to signature replay attacks
Manual Review
Make sure validateNonce actually validate nonce.
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.