58416 sc low unclaimed extra rewards in tokemak integration lead to permanent freezing of yield

Submitted on Nov 2nd 2025 at 06:57:32 UTC by @Ambitious_DyDx for Audit Comp | Alchemix V3arrow-up-right

  • Report ID: #58416

  • Report Type: Smart Contract

  • Report severity: Low

  • Target: https://github.com/alchemix-finance/v3-poc/blob/immunefi_audit/src/strategies/mainnet/TokeAutoUSDStrategy.sol

  • Impacts:

    • Permanent freezing of unclaimed yield

    • Smart contract unable to operate due to lack of token funds

    • Temporary freezing of funds for at least 24 hour

Description

Description

In the TokeAutoUSDStrategy and TokeAutoEthStrategy contracts, the _claimRewards function always sets claimExtras to false when calling the Tokemak rewarder, preventing the claiming of any extra incentives (beyond the base reward token). This results in extra yields remaining locked in the rewarder contract indefinitely, as they are only claimed during deallocation (which may never occur for long-term strategies).

Vulnerability Details

The strategies rely on Tokemak's IMainRewarder interface, where getReward includes a claimExtras parameter to optionally claim rewards from "extra rewarders" (secondary incentives like partner tokens). However, in _claimRewards:

The false hard-code skips extras. While _deallocate uses true:

This only claims during full/partial deallocation. For ongoing allocations without dealloc cycles, extras accrue unclaimed forever—frozen in the rewarder, unharvestable by the strategy/MYT vault.

If params.additionalIncentives = true (settable by owner), the system estimates extras in snapshotYield but never claims them, misleading yield calcs while freezing real value.

Not intended design

The additionalIncentives flag implies extras should be handled (used in _computeRewardsRatePerSecond, though stubbed as 0). Hard-coding false contradicts this, suggesting an oversight rather than intent. If intentional (e.g., for gas), a comment or toggle would be expected.

Attack Vector

No active attack needed—passive accrual of extras in Tokemak (common for boosts) triggers the freeze:

  • Strategy allocates funds → accrues base + extras in rewarder.

  • Regular claimRewards (e.g., via keeper) → claims base only; extras stuck.

  • Without dealloc (e.g., stable strategy), extras never move → permanent freeze. Adversary could accelerate by depositing extras directly to rewarder (if possible), but organic accrual suffices.

Impact Details

  • Permanent freezing of unclaimed yield: Extras locked in rewarder, unclaimable without code change/dealloc (which may not happen).

  • Yield loss for users: MYT holders miss extras; if incentives enabled, overestimated yields mislead.

  • DoS-like on compounding: Harvests incomplete, reducing APY without notice.

  • Funds stuck: Extras represent user value, frozen indefinitely for long-hold strategies.

  • Tie claimExtras to params.additionalIncentives:

  • Or add admin toggle/param for selective claiming.

  • Document intent if deliberate (e.g., "Extras claimed only on dealloc for gas efficiency").

Proof of Concept

Proof of Concept

Add to v3-poc/src/test/strategies/TokeAutoUSDStrategy.t.sol

Run:

Expected Output:

Was this helpful?