57622 sc low lack of claimed reward handling in myt strategies will keep all external token rewards stuck forever

Submitted on Oct 27th 2025 at 17:04:15 UTC by @Oxdeadmanwalking for Audit Comp | Alchemix V3arrow-up-right

  • Report ID: #57622

  • Report Type: Smart Contract

  • Report severity: Low

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

  • Impacts:

    • Permanent freezing of funds

    • Contract fails to deliver promised returns, but doesn't lose value

Description

Brief/Intro

MYT is a MorphoV2 Vault that seeks to generate yield from a variety of strategies. The base contract MYTStrategy, defines a blueprint for protocol-specific strategies to follow by inheriting from it. It is intended that these underlying strategies are whitelisted as adapters to the Morpho Vault. MYTStrategy defines abstract functions for the strategies to claim external token rewards as indicated by the _claimRewards virtual function. There is however no way to actually swap, transfer or autocompound the external rewards in any underlying strategy meaning even if claimed, all rewards will be stuck in the adapter contract forever.

Vulnerability Details

MYTStrategy allows for arbitrary claiming of token rewards from any underlying strategy.

    /// @notice call this function to claim all available rewards from the respective
    /// protocol of this strategy
    function claimRewards() public virtual returns (uint256) {
        require(!killSwitch, "emergency");
        _claimRewards();
    }

_claimRewards(); in turn is an abstract function that is intended to be overriden by the underlying strategy.

However, this is intended to only claim the rewards which will be sent to the adapter contract itself. MYTStrategy and all underlying strategies fail to provide a way for the vault to actually swap external reward tokens for more underlying strategy token (ie USDC/ETH) to realize the yield boost from rewards.

At the same time they also fail to implement a function where a privileged actor can withdraw those arbitrary tokens as fees or for manual auto-compounding. As a result, the rewards are not handled even after being claimed, causing them to remain stuck in the non-upgradeable contract — effectively locked forever.

Looking at all the strategies that actually implement _claimRewards we can spot TokeAutoEthStrategy actually claims the rewards in any token from a rewarder contract but provides no way to swap them for more ETH. The main reward token is TOKE, a regular ERC20 (https://etherscan.io/address/0x60882D6f70857606Cdd37729ccCe882015d1755E#readContract)

Looking at MYTStrategy we can tell that there is no way to handle rewards https://github.com/alchemix-finance/v3-poc/blob/immunefi_audit/src/MYTStrategy.sol The Morpho Vault also does not have a function to sweep arbitrary erc20s from underlying strategies https://github.com/morpho-org/vault-v2/blob/main/src/VaultV2.sol

Impact Details

All reward tokens, even if claimed become stuck in the strategy contracts, making depositors miss out on additional yield and/or the protocol to miss out on fees if they choose to keep incentives to the treasury. The only instance where rewards are handled correctly is if the reward token is the same as the underlying MYT token which is rerely the case in DeFi.

References

  • https://github.com/alchemix-finance/v3-poc/blob/immunefi_audit/src/MYTStrategy.sol

  • https://github.com/morpho-org/vault-v2/blob/main/src/VaultV2.sol

  • https://etherscan.io/address/0x60882D6f70857606Cdd37729ccCe882015d1755E#readContract

Proof of Concept

Proof of Concept

  1. Add this test to the end of TokeAutoETH.t.sol (make sure to import "forge-std/console.sol"; first

  1. Run the test

  1. Observe the logs. The strategy holds the rewards with no way to handle them

Was this helpful?