The executeMetaTransaction function in the NativeMetaTransaction contract increments the user’s nonce immediately after verifying the signature but before executing the actual function call. If the function call fails (e.g., due to a revert), the nonce will already have incremented, making it impossible for the user to resubmit the same meta-transaction. This can lead to a Denial of Service (DoS) vulnerability by preventing valid transactions from completing.
This premature nonce increment results in a potential loss of user convenience and functionality, as legitimate meta-transactions cannot be retried without requiring the user to sign a new meta-transaction.
In the executeMetaTransaction function, the line:
if the function call fails after the nonce is incremented, the transaction cannot be retried with the same signature, resulting in a Denial of Service (DoS) for legitimate transactions.
Manual review
the nonce should be incremented only after the function call is successfully executed. This way, if the function call fails, the nonce remains unchanged, allowing the user to retry the transaction.
Modify the executeMetaTransaction function as follows:
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.