58428 sc low toke reward loss when calling deallocate

Submitted on Nov 2nd 2025 at 09:21:02 UTC by @SOPROBRO for Audit Comp | Alchemix V3arrow-up-right

  • Report ID: #58428

  • Report Type: Smart Contract

  • Report severity: Low

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

  • Impacts:

    • Permanent freezing of unclaimed royalties

Description

Brief/Intro

When you deallocate funds, TOKE rewards are sent to the strategy contract instead of the MORPHO vault (MYT). Since the strategy has no mechanism to withdraw or forward these tokens, the rewards become permanently locked.

Vulnerability Details

During deallocation in TokeAutoUSDStrategy and TokeAutoEth:

rewarder.withdraw(address(this), sharesNeeded, true);

This triggers the following in rewarder::_withdraw (1):

Since account is address(this) (the strategy), the rewarder sends rewards to the strategy contract itself (2):

The strategy does not expose any method to recover these rewards, effectively locking all accrued TOKE tokens.

Impact Details

The impact of this is locked TOKE rewards, particularly in TokeAutoUSDStrategy, which lacks a _claimRewards implementation altogether — meaning the only reward path is through deallocate, which locks the rewards.

References

(1) https://etherscan.io/address/0x60882D6f70857606Cdd37729ccCe882015d1755E#code#F3#L84

(2) https://etherscan.io/address/0x60882D6f70857606Cdd37729ccCe882015d1755E#code#F3#L141

Proof of Concept

Add the following import to the top of TokeAutoETHStrategy

Then add the following test, and run in the console forge test --mt test_strat_loses_rewards -vv

From the logs, we can clearly see the TOKE is sent to the Strategy instead of the MYT Vault during deallocation, you can uncomment the // IMYTStrategy(strategy).claimRewards(); to see the claimRewards will send the TOKE to the MYT Vault.

Was this helpful?