PoolTogether - Krace'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: 76/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

In the claimYieldFeeShares function, regardless of the value of _shares, the yieldFeeBalance is consistently set to zero when called by the YieldFeeRecipient. This leads to a loss of Yield Fees.

Proof of Concept

The claimYieldFeeShares function, employed by the YieldFeeRecipient to retrieve Yield Fees, currently exhibits a flaw. Specifically, it consistently sets the yieldFeeBalance to zero, regardless of whether the _shares amount is less than the existing yieldFeeBalance. This oversight leads to a loss of Yield Fees.

    function claimYieldFeeShares(uint256 _shares) external onlyYieldFeeRecipient {
        if (_shares == 0) revert MintZeroShares();

        uint256 _yieldFeeBalance = yieldFeeBalance;
        if (_shares > _yieldFeeBalance) revert SharesExceedsYieldFeeBalance(_shares, _yieldFeeBalance);
//@audit yieldFeeBalance will always become zero whatever the value of _shares is.
        yieldFeeBalance -= _yieldFeeBalance;

        _mint(msg.sender, _shares);

        emit ClaimYieldFeeShares(msg.sender, _shares);
    }

Tools Used

Manual Review

The yieldFeeBalance should subtract _shares rather than _yieldFeeBalance.

diff --git a/pt-v5-vault/src/PrizeVault.sol b/pt-v5-vault/src/PrizeVault.sol
index fafcff3..a2f5d81 100644
--- a/pt-v5-vault/src/PrizeVault.sol
+++ b/pt-v5-vault/src/PrizeVault.sol
@@ -614,7 +614,7 @@ contract PrizeVault is TwabERC20, Claimable, IERC4626, ILiquidationSource, Ownab
         uint256 _yieldFeeBalance = yieldFeeBalance;
         if (_shares > _yieldFeeBalance) revert SharesExceedsYieldFeeBalance(_shares, _yieldFeeBalance);

-        yieldFeeBalance -= _yieldFeeBalance;
+        yieldFeeBalance -= _shares;

         _mint(msg.sender, _shares);

Assessed type

Context

#0 - c4-pre-sort

2024-03-11T21:25:58Z

raymondfam marked the issue as sufficient quality report

#1 - c4-pre-sort

2024-03-11T21:26:02Z

raymondfam marked the issue as primary issue

#2 - raymondfam

2024-03-11T21:27:25Z

It was deducting _shares in the previous vault though.

#3 - c4-pre-sort

2024-03-13T04:38:48Z

raymondfam marked the issue as duplicate of #59

#4 - 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