Project

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

Dos Attack on new DAOs.

Summary

The protocol is vulnerable to a Denial of Service attack targeting DAOs attempting to register unique names.
because of the very low transaction fees on Polygon, an attacker can continually preventing new DAOs registrations
by creating simple bot monitoring mempool and copying the DAO's name.

Vulnerability Details

An attacker can exploit this issue by monitoring the mempool for DAO registration transactions.
Upon identifying a new registration attempt, the attacker's bot can instantly copy the intended name and preemptively register it before the legitimate DAO's transaction is confirmed. This registration race condition is feasible on Polygon due to its low fees, which allows the attacker to perform repeated actions at minimal cost. This tactic effectively DoSes the new DAOs by preventing it from registering.

NOTE: the attacker can dos specific DAO by looking into specific sender in mempool or he can just dos DAOs harm the protocol.

POC:

function createNewDAOMembership(DAOInputConfig calldata daoConfig, TierConfig[] calldata tierConfigs) external returns(address) {
require(currencyManager.isCurrencyWhitelisted(daoConfig.currency), "Currency not accepted.");
require(daoConfig.noOfTiers == tierConfigs.length, "Invalid tier input.");
require(daoConfig.noOfTiers > 0 && daoConfig.noOfTiers <= TIER_MAX, "Invalid tier count.");
@>>> // it requires the name is not registered before.
@>>> require(getENSAddress[daoConfig.ensname] == address(0), "DAO already exist.");
//....
@>>> // the attacker register the name before new DAO does.
@>>> getENSAddress[daoConfig.ensname] = address(proxy);
//...
}

Impact

Any one can prevent any new DAO from registration and this will be very bad for the protocol reputation and making it useless, if they are unable to register.

Recommendations

Since the name is sent in Tx and it is required to be unique to pass this line of code require(getENSAddress[daoConfig.ensname] == address(0), "DAO already exist."); i suggest to move to L2s that has private mempool so no one can see the mempool and copy the new DAOs names.

Updates

Lead Judging Commences

0xbrivan2 Lead Judge 7 months ago
Submission Judgement Published
Invalidated
Reason: Known issue
0xbrivan2 Lead Judge 7 months ago
Submission Judgement Published
Invalidated
Reason: Known issue

Appeal created

0xgenaudits Submitter
7 months ago
0xbrivan2 Lead Judge
7 months ago
0xbrivan2 Lead Judge 7 months ago
Submission Judgement Published
Invalidated
Reason: Known issue

Support

FAQs

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