Beginner FriendlyFoundryNFT
100 EXP
View results
Submission Details
Severity: low
Invalid

Reentrancy in `Dussehra::withdraw()` function

Summary

The Dussehra::withdraw() function doesn't have any mechanism to prevent a reentrancy attack and doesn't follow the Check-effects-interactions pattern

Vulnerability Details

function withdraw() public RamIsSelected OnlyRam RavanKilled {
    if (totalAmountGivenToRam == 0) {
        revert Dussehra__AlreadyClaimedAmount();
    }
    uint256 amount = totalAmountGivenToRam;
    (bool success, ) = msg.sender.call{value: amount}("");
    require(success, "Failed to send money to Ram");
    totalAmountGivenToRam = 0;
}

In the provided Dussehra contract is potentially vulnerable to reentrancy attacks. This is because it first sends Ether to msg.sender and then updates the state of the contract.a malicious contract could re-enter the refund function before the state is updated.

Impact

If exploited, this vulnerability could allow a malicious contract to drain Ether from the Dussehra contract, leading to loss of funds for the contract and its users.

Tools Used

Manual Review

Recommendations

To mitigate the reentrancy vulnerability, you should follow the Checks-Effects-Interactions pattern. This pattern suggests that you should make any state changes before calling external contracts or sending Ether.

function withdraw() public RamIsSelected OnlyRam RavanKilled {
    if (totalAmountGivenToRam == 0) {
        revert Dussehra__AlreadyClaimedAmount();
    }
    uint256 amount = totalAmountGivenToRam;
    totalAmountGivenToRam = 0;
    (bool success, ) = msg.sender.call{value: amount}("");
    require(success, "Failed to send money to Ram");
}
Updates

Lead Judging Commences

bube Lead Judge over 1 year ago
Submission Judgement Published
Invalidated
Reason: Non-acceptable severity
Assigned finding tags:

Invalid - reentrancy in withdraw

The `withdraw` function sends the given amount to Ram. If the attacker calls the `withdraw` function again before the state variable is changed, the function will revert because there are no more funds in the contract. This reentrancy has no impact for the protocol. It is recommended to follow the CEI pattern, but this is informational.

Support

FAQs

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