Nouns Builder contest - chatch's results

A permissionless, governed protocol to deploy nouns-style DAOs complete with treasury, generative collections, and governance mechanisms.

General Information

Platform: Code4rena

Start Date: 06/09/2022

Pot Size: $90,000 USDC

Total HM: 33

Participants: 168

Period: 9 days

Judge: GalloDaSballo

Total Solo HM: 10

Id: 157

League: ETH

Nouns Builder

Findings Distribution

Researcher Performance

Rank: 105/168

Findings: 1

Award: $70.68

🌟 Selected for report: 1

🚀 Solo Findings: 0

Findings Information

🌟 Selected for report: chatch

Also found by: 0x4non, Chom, R2, ak1, ayeslick, fatherOfBlocks, hyh, rvierdiiev, scaraven, simon135, zzzitron

Labels

bug
2 (Med Risk)
sponsor confirmed
edited-by-warden

Awards

70.6842 USDC - $70.68

External Links

Lines of code

https://github.com/code-423n4/2022-09-nouns-builder/blob/main/src/governance/governor/Governor.sol#L588

Vulnerability details

Impact

The protocol assumes founders and proposals will set sane settings. However there are some settings that if set incorrectly will block proposals from being created or succeeding and block auctions from completing.

This vulnerability has a low likelihood of occurrence as the outcome is not in the interest of the community. However the possibility exists if there is some misunderstanding or miscalculation. If a bad setting is allowed the impact is high.

Proof of Concept

Bricking governance proposals

Governor settings.quorumThresholdBps > 10_000

If quorumThresholdBps is set above 10_000 then it would be impossible to get enough votes to succeed.

Without being able to execute a proposal the setting itself could never be fixed.

Governor settings.proposalThresholdBps > 10_000

If proposalThresholdBps is set above 10_000 then it would be impossible to submit a proposal.

Without being able to submit a proposal the setting itself could never be fixed.

Stalling a governance proposal

Treasury settings.delay

A very large value for delay would prevent a proposal from being executed.

For example 1000 years easily fits into delay and would result in a 1000 year wait before being able to execute.

A governance proposal could fix this property for future proposals but any proposal created with the large delay would remain stuck.

Stalling the auction

Auction settings.duration

The duration value is in seconds and any value up to type(uint40).max is permitted.

That is 1099511627775 seconds which is > 48000 years.

A large value like this would stop the auction from ever ending and thus stop new NFTs from being minted.

A governance proposal could fix this setting but ideally a very large duration would be blocked.

Auction settings.timeBuffer

Similar to duration but applies to the auction endTime extention.

So the auction could be extended a number of years for example.

Tools Used

Manual review.

Implement reasonable range bounds reverting where appropriate. In particular for the above apply:

  • Governor settings quorumThresholdBps <= 10_000
  • Governor settings proposalThresholdBps <= 10_000
  • Treasury settings delay <= 6 months
  • Auction settings duration <= 6 months
  • Auction settings timeBuffer <= 6 months

Add these checks to the initialize() functions and in the setter / update functions where these individual settings properties can be updated.

#0 - GalloDaSballo

2022-09-16T23:33:41Z

Lack of validation looks right, not convinced about severity if behind timelock

#1 - GalloDaSballo

2022-09-25T20:31:12Z

The warden has shown how, due to a lack of rational minimums and maximums, governance can be griefed if not effectively bricked.

Because this is contingent on allowing "irrational" values, I agree with Medium Severity

Mitigation would require adding acceptable minimums and maximums, or forcing the deployer to set those in a rational way that is transparent to end users

Because this report is talking generally about multiple types of griefs and stalling, I will make this the primary issue and bulk the other reports under this

AuditHub

A portfolio for auditors, a security profile for protocols, a hub for web3 security.

Built bymalatrax © 2024

Auditors

Browse

Contests

Browse

Get in touch

ContactTwitter