Smart contracts that have Silo deposits on L1 can migrate them to L2 using L2ContractMigrationFacet.sol.
Merkle root is used to verify that user submits correct values. Problem is that it doesn't validate whether such Merkle leaf was used before, so attacker can replay this attack to mint any number of deposits. As a result it will have huge amount of Stalk and therefore can drain protocol via malicious proposal.
Nothing prevents attacker from executing this function maltiple times with his single deposit and different receivers:
Attacker can freely mint deposits and therefore Stalk. As a result he has enough Stalk to execute malicious governance proposal; steal all the Beans distributed to Stalkholders.
Additionally protocol will halt because of Invariant check in Invariable.sol, locking all the funds.
Manual Review
Keep track of used Merkle leaf to prevent replay.
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.