No check is made on the signature sent to make a withdrawal to verify whether it has already been used or not.
By calling L1BossBridge::withdrawTokensToL1 several times you can withdraw the funds several times.
The function L1BossBridge::withdrawTokensToL1 does not verify the signature of the transaction, so an attacker can withdraw funds multiple times after first making a deposit and making a first withdrawal.
I created a test to verify the vulnerability.
First I updated the file L1TokenBridge.t.sol adding some variables.
After that I created this test in the same file:
Funds can be stolen.
Manual check + Foundry Test.
Add a nonce inside the signature and use it to verify if the signature is used or not or enter a timestamp and discard transactions that are too old.
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.