signed messages can be replayed when sending to the bridge.
withdrawTokensToL1() and sendToL1() don't use nonces. So the same valid signed message along with v, r and s can be submitted again to replay the operation (as everything can be seen publicly in the mempool). ECDSA.recover() will obviously return the same signer every time which is valid. If the operation being replayed is sending funds out, then the bridge could be drained.
This could drain the bridge from all funds.
Manual review.
Add a nonce to the signed message.
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.