The Deploy.s.sol script set the USDC token as the Airdrop token in MerkleAirdrop contract but the address stored in s_zkSyncUSDC is not of actual USDC token on ZkSync.
But the token contract used while transferring funds to the MerkleAirdrop contract is a real USDC token contract, which leads to USDC token funds stuck in MerkleAirdrop contract as token contract set for transfers is set to the incorrect contract.
The vulnerability is present in the Deploy.s.sol script where it sets an Airdrop token in the MerkleAirdrop contract which is not the actual USDC contract and differs from the token contract that is used to transfer funds to the Airdrop contract.
The contract used for token transfer to MerkleAidrop is the actual USDC contract but the token contract set while deploying the contract is not the actual USDC contract.
From the above snippet of the Deploy.s.sol script, the s_zkSyncUSDC is passed to the MerkleAidrop contract, where the address in this variable is not the actual USDC contract, thus it sets a wrong address in the contract.
But the token used to transfer funds to the Airdrop contract is different from s_zkSyncUSDC and is actually the correct USDC token address.
Even though both the address 0x1d17CBcF0D6D143135aE902365D2E5e2A16538D4 and 0x1D17CbCf0D6d143135be902365d2e5E2a16538d4, indeed look very similar at first glance, but they are not identical. The difference lies in the capital and lower case letters. The upper case and lower case alphabets are considered distinct, hence they are not same.
Therefore an incorrect token contract is used while passing it to the constructor of MerkleAidrop but correct token address is used for transferring funds.
Winners will never be able to claim their winnings via claim function.
The USDC funds transferred to MerkleAirdrop will get stuck and there is no way to recover them, as incorrect token address was set for the Airdrop and it is not changeable.
Manual Review
Update the s_zkSyncUSDC in Deploy.s.sol to the correct USDC address - 0x1d17CBcF0D6D143135aE902365D2E5e2A16538D4.
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.