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

`newPlayers` argument in `entraffle` is not checked for zero address, loss of funds to player

Summary

newPlayers argument in PuppyRaffle::enterPlayer is not checked for address(0) as will allow user to accidentally pass a address(0) and it will loss funds because for every player we are paying a entranceFee

Vulnerability Details

newPlayers argument form PuppyRaffle::enterPlayer is not checked for address(0) and if you pass a zero address then you again have to pay entranceFee to enter the raffle.

Impact

Loss of funds to players as they have to pay twice to enter the raffle.

Tools Used

Manual Review
// Here is PoC

// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma experimental ABIEncoderV2;
import {Test, console} from "forge-std/Test.sol";
import {PuppyRaffle} from "../src/PuppyRaffle.sol";
contract PuppyRaffleTest is Test {
PuppyRaffle puppyRaffle;
uint256 entranceFee = 10000000000000000;
address playerZero = address(0);
address playerOne = address(1);
address playerTwo = address(2);
address playerThree = address(3);
address feeAddress = address(99);
address deployer = address(100);
uint256 duration = 1 days;
function setUp() public {
puppyRaffle = new PuppyRaffle(
entranceFee,
feeAddress,
duration
);
vm.deal(deployer, 100e18);
}
function test_zero_address_can_be_passed() external {
address[] memory players = new address[](4);
players[0] = playerZero;
players[1] = playerOne;
players[2] = playerTwo;
players[3] = playerThree;
// 4 players are entering along with a address(0)
vm.startPrank(deployer);
puppyRaffle.enterRaffle{value: entranceFee * players.length}(players);
console.log(address(puppyRaffle).balance);
assert(puppyRaffle.players(0) == address(0));
}
}

Recommendations

Use a require statement to check for address(0) in enterRaffle function

// use it above the line where you are pushing the address to players array
+ require(newPlayers[i] != address(0), "PuppyRaffle: Zero address not allowed");
Updates

Lead Judging Commences

Hamiltonite Lead Judge about 2 years ago
Submission Judgement Published
Invalidated
Reason: User input validation

Support

FAQs

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

Give us feedback!