In BossBridge.sol, the sendToL1 function calls ECDSA.recover using the hashed message, v, r, s as parameters. ECDSA.recover using those parameters in turn calls ECDSA.tryRecover using the same parameters. The version of ECDSA.tryRecover called can lead to denial of service if s > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 or if the signature uses positions 0/1 for v instead of 27/28.
This can be avoided by instead using a different version of ECDSA.recover (the one that takes bytes32 hash, bytes memory signature) that won't lead to this problem.
This ECDSA.tryRecover function is the one that is ultimately called by BossBridge.sol (BossBridge.sol calls ECDSA.recover which in turn calls the following function as an overload). See the note in the middle of the function about situations where this function reverts.
There could be a denial of service which is not necessary since you can instead just call a different recovery function in ECDSA.sol and avoid the DOS.
Manual review
Use the following ECDSA.recover function instead. This function calls a different ECDSA.tryRecover function which forces s to be small enough and v to be in the right position, so you won't ever have a denial of service for those reasons.
Then also make the following changes to withdrawTokensToL1 and sendToL1 to use one signature instead of v, r, s
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.