sendToL1 calls ECDSA.recover with the hashed message, v, r, and s as paramters. ECDSA.recover using those parameters in turn calls ECDSA.tryRecover using the same parameters. ECDSA.tryRecover uses EVM's ecrecover function which still allows for signature malleability. Signature malleability attacks are where an attacker takes a valid signature and modifies it to create another valid signature. In this case, that would allow an attacker to withdraw funds that aren't theirs. Even having a function that checks that a signature isn't used more than once can't avoid signature malleability.
In ECDSA.sol, there are some suggestions for what to do to avoid signature malleability attacks, but these aren't implemented in BossBridge.sol.
See the note in the tryRecover function (which is the function ultimately called by the sendToL1 function in BossBridge.sol:
An attacker may be able to modify a valid signature and steal funds that don't belong to them.
Manual review
Use this version of the ECDSA.recover function which takes the hashed message and the signature (i.e., v, r, s combined into one signature) instead because it is not vulnerable to signature malleability:
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.