Cyfrin / 2023-08-sparkn

Other
11 stars 15 forks source link

Access Control Enforcement absent (there is a risk that unauthorized addresses could potentially call the "distribute" function and perform actions that they are not supposed to.) #883

Closed codehawks-bot closed 1 year ago

codehawks-bot commented 1 year ago

Access Control Enforcement absent (there is a risk that unauthorized addresses could potentially call the "distribute" function and perform actions that they are not supposed to.)

Severity

Medium Risk

Summary

Access Control Enforcement absent (there is a risk that unauthorized addresses could potentially call the "distribute" function and perform actions that they are not supposed to.)

Vulnerability Details

The "DistributionTest" contract appears to have a section where the contract's "distribute" function is tested for access control enforcement. However, the test does not cover the case where the function is called by the correct factory address, which is the intended access control mechanism. Without proper testing of access control enforcement, there is a risk that unauthorized addresses could potentially call the "distribute" function and perform actions that they are not supposed to.

function testCallingdistributeWillFail() public {
    // revert
    vm.startPrank(organizer);
    vm.expectRevert(Distributor.Distributor__OnlyFactoryAddressIsAllowed.selector);
    distributor.distribute(address(0), new address[](0), new uint256[](0), "");
    vm.expectRevert(Distributor.Distributor__OnlyFactoryAddressIsAllowed.selector);
    distributor.distribute(address(0), new address[](0), new uint256[](0), "");
    vm.stopPrank();
}

Impact

Lack of proper access control enforcement testing might lead to unauthorized access to sensitive functions and data, undermining the security of the contract. Attackers could exploit this vulnerability to manipulate the distribution mechanism, disrupt normal operation, or cause financial losses.

Tools Used

Manual

Recommendations

  1. Expand the test cases to cover various scenarios, including positive cases where the "distribute" function is called by the correct factory address.
  2. Ensure that the test cases include appropriate assertions to validate the success of authorized calls and the expected behavior of unauthorized calls.
  3. Validate that unauthorized addresses are indeed restricted from calling the "distribute" function and that the correct factory address can execute the function successfully. By thoroughly testing access control enforcement, you can verify that only authorized addresses have the necessary permissions to interact with sensitive functions and ensure the overall security of the contract.
PatrickAlphaC commented 1 year ago

out of scope