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 V3
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
Rreward 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?