Project

One World
NFTDeFi
15,000 USDC
View results
Submission Details
Severity: low
Invalid

[low-01] The user can monopolize the DAO Membership

Vulnerability Details

in the MembershipFactory contracts , a user can join to specific dao and pay respectivly the dao tier selected price and platform fees using the joinDao().
The joinDAO function doesn’t limit the number of memberships a user can purchase within a given tier.
This allows users to join the same dao multiple times to accumulate memberships. Although this could theoretically allow one user to dominate the membership slots of a tier.

function joinDAO(address daoMembershipAddress, uint256 tierIndex) external {
require(daos[daoMembershipAddress].noOfTiers > tierIndex, "Invalid tier.");
require(daos[daoMembershipAddress].tiers[tierIndex].amount > daos[daoMembershipAddress].tiers[tierIndex].minted, "Tier full.");
uint256 tierPrice = daos[daoMembershipAddress].tiers[tierIndex].price;
uint256 platformFees = (20 * tierPrice) / 100;
daos[daoMembershipAddress].tiers[tierIndex].minted += 1;
IERC20(daos[daoMembershipAddress].currency).transferFrom(_msgSender(), owpWallet, platformFees);
IERC20(daos[daoMembershipAddress].currency).transferFrom(_msgSender(), daoMembershipAddress, tierPrice - platformFees);
IMembershipERC1155(daoMembershipAddress).mint(_msgSender(), tierIndex, 1);
emit UserJoinedDAO(_msgSender(), daoMembershipAddress, tierIndex);
}

Impact

malisious user maybe use this to monopolize the dao the prevent other users from joining the dao

Tools Used

Manual review.

Recommendations

Limit Memberships Per Address to restrict monopolization.

Updates

Lead Judging Commences

0xbrivan2 Lead Judge 10 months ago
Submission Judgement Published
Invalidated
Reason: Design choice
0xbrivan2 Lead Judge 10 months ago
Submission Judgement Published
Invalidated
Reason: Design choice

Support

FAQs

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