56983 sc low tokemak rewards sent to myt vault contract not strategy rewards stranded

Submitted on Oct 22nd 2025 at 12:05:43 UTC by @yesofcourse for Audit Comp | Alchemix V3arrow-up-right

  • Report ID: #56983

  • 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 yield

Description

Brief/Intro

TokeAutoEthStrategy._claimRewards() claims Tokemak incentives to the MYT vault contract address instead of to the strategy itself.

Because the vault doesn’t handle arbitrary reward tokens, these tokens are never converted to underlying nor credited to depositors, causing a silent APR drag.

In production this leads to permanent freezing of unclaimed yield at the vault address unless an out-of-band sweep is performed.

Vulnerability Details

The strategy routes rewards to address(MYT) (the ERC-4626/Morpho vault) rather than to the strategy:

  • In this architecture, strategies are responsible for realizing third-party incentives: claim them to the strategy, swap to the vault’s underlying (WETH), and return value to the vault (or re-deposit) so share price reflects rewards.

  • By sending rewards directly to the vault contract (a component that only accounts in underlying), the rewards arrive as an untracked arbitrary ERC-20. There’s no logic in the shown codebase to sweep/convert such tokens at the vault; consequently, the value is not realized or credited.

The PoC below simulates: TokeAutoEthStrategy_RewardMisroute_PoC funds a mock rewarder, sets earned[strategy] = R, calls claimRewardsPublic() (which exposes _claimRewards()), and verifies:

  • strategy reward-token balance does not increase,

  • the “vault” address receives exactly R reward tokens,

  • earned[strategy] is zeroed.

This directly demonstrates the misroute and confirms that claiming rewards does not benefit depositors.

Impact Details

Impact category: Permanent freezing of unclaimed yield.

  • Incentive tokens accumulate at the vault address and are not realized into underlying, so depositors’ share price/APR does not reflect rewards.

  • Over time, the USD value of stranded rewards can become material (∑ rewards × token price), and compounding benefits are also lost.

References

  • Vulnerable function: src/strategies/mainnet/TokeAutoEth.sol -> _claimRewards() https://github.com/alchemix-finance/v3-poc/blob/immunefi_audit/src/strategies/mainnet/TokeAutoEth.sol#L95-L98

Proof of Concept

Proof of Concept

In src/test/strategies/TokeAutoEthStrategy.t.sol, add the transfer() function to the IERC20 interface at the beginning:

Then paste the following at the end of that file:

Run with forge test --match-contract TokeAutoEthStrategy_RewardMisroute_PoC -vv:

Was this helpful?