ETH transfer uses .call{value}("") without gas limit, allowing malicious contracts to consume excessive gas.
Expected behavior: External calls should limit forwarded gas to prevent expensive operations.
The bug forwards all available gas on line 197, allowing recipients to execute expensive code.
Likelihood:
An attacker must deploy a malicious smart contract with an expensive receive or fallback function, which is technically straightforward
The attack can be executed by any user and doesn't require special privileges or complex setup
Impact:
Legitimate users attempting to claim from the faucet may face extremely high gas costs (potentially 10x or more than normal), making claims economically unfeasible
Severe gas consumption could cause transactions to fail due to block gas limits, effectively creating a denial of service condition for the faucet
This test demonstrates the gas griefing vulnerability where a malicious contract can consume unlimited gas during the ETH transfer. The attacker deploys a contract with an expensive receive function that performs costly operations like storage writes in a loop, causing the claim transaction to consume far more gas than intended.
Add a reasonable gas limit. Limiting to 2300 gas provides enough for simple receive functions but prevents expensive operations.
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.