PoolTogether - DanielTan_MetaTrust's results

General Information

Platform: Code4rena

Start Date: 04/03/2024

Pot Size: $36,500 USDC

Total HM: 9

Participants: 80

Period: 7 days

Judge: hansfriese

Total Solo HM: 2

Id: 332

League: ETH

PoolTogether

Findings Distribution

Researcher Performance

Rank: 56/80

Findings: 1

Award: $1.47

🌟 Selected for report: 0

🚀 Solo Findings: 0

Awards

1.4652 USDC - $1.47

Labels

bug
3 (High Risk)
satisfactory
sufficient quality report
:robot:_10_group
duplicate-59

External Links

Lines of code

https://github.com/code-423n4/2024-03-pooltogether/blob/480d58b9e8611c13587f28811864aea138a0021a/pt-v5-vault/src/PrizeVault.sol#L617

Vulnerability details

Impact

The fee recipient probably loses the yield fee after the first claim if the _shares are less than the _yieldFeeBalance.

In the claimYieldFeeShares function, the yieldFeeBalance will be set to be zero:

function claimYieldFeeShares(uint256 _shares) external onlyYieldFeeRecipient { ... uint256 _yieldFeeBalance = yieldFeeBalance; if (_shares > _yieldFeeBalance) revert SharesExceedsYieldFeeBalance(_shares, _yieldFeeBalance); yieldFeeBalance -= _yieldFeeBalance; ... }

Thus, when the parameter _shares is less than the yieldFeeBalance, the yieldFeeBalance is updated to be zero un-expectedly, which results in the yield fee loss for the fee recipient.

Proof of Concept

https://github.com/code-423n4/2024-03-pooltogether/blob/480d58b9e8611c13587f28811864aea138a0021a/pt-v5-vault/src/PrizeVault.sol#L611-L622

When the recipient invokes the claimYieldFeeShares function, assume the yieldFeeBalance is 100, and the parameter _shares is 1.

  • the _yieldFeeBalance becomes 100;
  • the yieldFeeBalance updated to be zero, because 100 -= 100 results in the yieldFeeBalance becomes zero;
  • mint 1 token to the recipient;
  • emit an event that the recipient claimed 1 share.

The real share minted to the recipient is 1 share, but the yieldFeeBalance is set to 0 unexpectedly. If the recipient wants to claim the rest 99 shares, the function will revert because the condition _shares > _yieldFeeBalance is true.

Tools Used

Manual Review

Recommend updating the calculation of yieldFeeBalance as below:

yieldFeeBalance -= _shares;

Assessed type

Context

#0 - c4-pre-sort

2024-03-11T21:28:11Z

raymondfam marked the issue as sufficient quality report

#1 - c4-pre-sort

2024-03-11T21:28:17Z

raymondfam marked the issue as duplicate of #10

#2 - c4-pre-sort

2024-03-13T04:37:46Z

raymondfam marked the issue as duplicate of #59

#3 - c4-judge

2024-03-15T07:40:51Z

hansfriese marked the issue as satisfactory

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