DeFiFoundry
20,000 USDC
View results
Submission Details
Severity: medium
Invalid

FjordPoints#`checkDistribution()` modifier never reverts even `EPOCH_DURATION` is not expired

Summary

FjordPoints#checkDistribution() modifier never reverts

Vulnerability Detail

  1. FjordPoints#checkDistribution() modifier is using on the following functions for distribution status check.

    • FjordPoints#setPointsPerEpoch()

    • FjordPoints#onStaked()

    • FjordPoints#onUnstaked()

    • FjordPoints#claimPoints()

  2. FjordPoints#checkDistribution() modifier

    • calls FjordPoints#distributePoints().

    • has not any additional revert logic.

modifier checkDistribution() {
distributePoints();
_;
}
  1. FjordPoints#distributePoints()

    • does not revert even EPOCH_DURATION is not expired or totalStaked is zero.

    • has not any additional revert logic.

function distributePoints() public {
if (block.timestamp < lastDistribution + EPOCH_DURATION) {
return;
}
if (totalStaked == 0) {
return;
}
...
lastDistribution = lastDistribution + (weeksPending * 1 weeks);
...
}

Impact

Protocol Point's distribution logic can be executed anytime without any time block such as EPOCH_DURATION and it will happen protocol's violation.

Proof of Concept

  1. Bob calls FjordPoints#claimPoints multiple time without any waiting to claim his points.

  2. FjordPoints#checkDistribution modifier does not revert.

  3. So Bob can claim his points any time without any waiting.

Code Snippet

https://github.com/Cyfrin/2024-08-fjord/blob/main/src/FjordPoints.sol#L232-L248

Tool used

Manual Review

Recommendation

Please update FjordPoints#distributePoints() as following.

function distributePoints() public {
if (block.timestamp < lastDistribution + EPOCH_DURATION) {
-- return;
++ revert();
}
if (totalStaked == 0) {
-- return;
++ revert();
}
...
lastDistribution = lastDistribution + (weeksPending * 1 weeks);
...
}
Updates

Lead Judging Commences

inallhonesty Lead Judge about 1 year ago
Submission Judgement Published
Invalidated
Reason: Lack of quality

Support

FAQs

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