When snapshotTotalBonus != 0, _bonusShare() calculates its k=2 denominator in checked uint256 arithmetic. A valid aggregate stake can make the two positive terms fit individually but overflow when added, before their mathematical cancellation. Every affected claim then reverts, including the principal transfer.
At settlement, the pool evaluates the expanded form:
For stake present before the risk window, every position is clamped to entry time E. With aggregate stake S, the positive expression is S * (T² + E²). The first unsafe aggregate is:
Both S * T² and S * E² fit, but their checked addition overflows. The equivalent factored score S * (T - E)² remains representable, so this is an intermediate-overflow bug, not a mathematical zero-score case.
Both claimSurvived() and claimExpired() call _bonusShare() before returning principal. A panic rolls back the claim. On the EXPIRED path it also rolls back the attempted resolution, leaving the pool UNRESOLVED.
Likelihood
The factory imposes no aggregate-stake bound or token-decimals restriction; an owner-allowlisted asset with sufficient raw-unit supply is the only configuration precondition.
Any account can activate the vulnerable branch by contributing one raw bonus unit.
Impact
A claimant receives no principal because the whole claim reverts with Panic(0x11).
The same denominator is shared by all claimants, so the pool's recorded principal remains locked until the code is changed.
This complete test uses the repository's existing BaseConfidencePoolTest fixture; it requires no attachment or external artifact.
The last-safe aggregate, firstUnsafe - 1, settles normally. Keeping the same first-unsafe aggregate but omitting the bonus also returns principal, isolating the failure to the bonus-share arithmetic.
Enforce a conservative aggregate-stake bound before increasing totalEligibleStake:
Apply the check on every path that increases eligible stake. Changing only the later division cannot help because the overflow occurs first.
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.
The contest is complete and the rewards are being distributed.