In function upgradeTier() there is not check, that tier has filled, so user could join to tier anyway.
When user decide to update tier, 2 nfts will burn from his current tier and 1 new nft will mint in highest tier. But there is not check, that highest tier has count of minted nfts is equal to daos[daoMembershipAddress].tiers[tierIndex - 1].amount
User could join to tier anyway, which breaks the logic that is in the function joinDAO(), which have such check.
Manual review
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.