The Claimed event emits msg.sender instead of faucetClaimer, in the claimFaucetTokens() method
The expected behavior is that events should accurately reflect what actually happened - tokens are transferred to faucetClaimer, so the event should emit faucetClaimer.
The line 232 emits msg.sender in the Claimed event, but line 231 transfers tokens to faucetClaimer. Due to the race condition, these can be different addresses when concurrent transactions overwrite the shared faucetClaimer state variable.
Likelihood:
Occurs whenever the race condition is triggered by concurrent claims in the same block
More likely when the sender and faucet claimer are different
Impact:
Off-chain systems monitoring events will receive incorrect information about who received tokens
Analytics and tracking systems will show wrong claim recipients
Could cause confusion in debugging or auditing claim history
Here is the proof of concept, where 2 traction are sent in same block
Change the event to emit faucetClaimer instead of msg.sender to accurately reflect the actual recipient.
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.