the bridge::withdraw_auto_from_l1(..)
function can be called from any L1 contract due to wrong access control implementation contrary to the intended functionality which is that it can only be called from the Starklane L1 contract.
The bridge::withdraw_auto_from_l1(..)
function is used to process withdrawal of tokens deposited on L1 from L2 and must be called only by Starklane L1
contract. However, due to wrong access control, the function can be called by any L1 or L2 contract
As shown above, from_address
which is used to validate the source address of the caller is user controlled and as such, any malicious L1 contract can call withdraw_auto_from_l1(...)
by specifying from_address
= EthAddress
and the call will pass the check on L136 without reverting.
Any L1 or L2 contract can call bridge::withdraw_auto_from_l1(..)
function contrary to the intended restriction which is that it must be called by a Starklane L1 contract. This break core protocol invariant and functionality.
Manual review
Modify the bridge::withdraw_auto_from_l1(..)
function as shown below
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.