The contract is designed to distribute a small amount of Sepolia ETH to first-time claimers, with a strict daily total limit defined by dailySepEthCap. The dailyDrips variable is supposed to track the amount of ETH dripped each day to enforce this cap.
When a user who has already claimed ETH calls the function, the **dailyDrips **counter is incorrectly reset to zero.
A malicious actor can exploit this by using one "repeat claimer" account to reset the daily ETH counter between claims from multiple "new claimer" accounts, completely bypassing the **dailySepEthCap **and draining all ETH from the contract.
Likelihood:
Reason 1: An attacker can execute this exploit with as few as two addresses and a small amount of gas.
Reason 2: The exploit is deterministic and can be repeated in a single transaction block until the contract's entire ETH balance is depleted.
Impact:
Impact 1: Total and direct loss of all ETH funds held within the faucet contract.
Impact 2: The feature designed to help new users with gas fees is rendered useless, undermining a key purpose of the faucet.
A Foundry test can simulate this attack pattern to prove the vulnerability. The test uses one "repeat claimer" account to reset the daily ETH counter for multiple "new claimer" accounts.
The only change required is to remove the vulnerable else block. By removing it, the intended daily reset logic, which is already present, can function securely.
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.