Beginner FriendlyGameFi
100 EXP
View results
Submission Details
Impact: high
Likelihood: high
Invalid

Reentrancy in claim_pizza_slice

Root + Impact

Description

Normally, users can claim their pizza slice once. However, external calls are made before updating the user’s balance, enabling reentrancy.

The claim function updates state after transferring coins, enabling reentrancy.

coin::transfer<AptosCoin>(&resource_signer, to, amount); // @> external transfer before state update

Risk

Likelihood:

  • If attacker calls claim_pizza_slice with a contract, fallback may reenter.

  • Possible in high-traffic airdrops.

Impact:

  • Contract balance can be drained.

  • Multiple claims possible for same user.

Proof of Concept

// Deploy a malicious contract that calls claim_pizza_slice in fallback repeatedly

Recommended Mitigation

- coin::transfer<AptosCoin>(&resource_signer, to, amount);
+ table::add(&mut state.claimed_users, user_addr, true);
+ state.balance = state.balance - amount;
+ coin::transfer<AptosCoin>(&resource_signer, to, amount);
Updates

Appeal created

bube Lead Judge 11 days ago
Submission Judgement Published
Invalidated
Reason: Incorrect statement

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.