The L1BossBridge::sendToL1() method is vulnerable to signature replay attack, allowing the attacker to steal the funds from the bridge.
The L1BossBridfe::sendToL1() method is responsible for withdrawing tokens from L2 to L1.
The method accepts the message (the address of the token, value to withdraw and the recipient) and a signature. If the signature is valid and the signer is a valid signer, the transfer gets executed.
The issue is the method does not have any checks against signature replay attack. That means the attacker can reuse the signature multiple times to execute the transfer repeatedly, therefore stealing the money. The attacker can also reuse the signature on different chains where L1BossBridge contract will be deployed.
Tokens can be stolen from the bridge
Manual review, Patrick's audit course curriculum
Implement EIP-712 protections against cross-chain signature replay and keep track of the already used signatures to prevent the replay on the same chain.
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.