57680 sc high peapodsethstrategy unable to withdraw yield from price share increase
Submitted on Oct 28th 2025 at 06:24:18 UTC by @farismaulana for Audit Comp | Alchemix V3
Report ID: #57680
Report Type: Smart Contract
Report severity: High
Target: https://github.com/alchemix-finance/v3-poc/blob/immunefi_audit/src/strategies/mainnet/PeapodsETH.sol
Impacts:
Permanent freezing of unclaimed yield
Protocol insolvency
Description
Brief/Intro
PeapodsETHStrategy is utilizing peapods vault to generate yield. while user can deposit WETH into the VaultV2 to receive MYT, on the background the WETH deposited would be utilized in peapods strategy. but the contract can only allocate WETH amount and deallocate same amount. this amount is outside the yield of peapods vault generated, making the Strategy effectively cant receive the benefit of price per share increase.
Vulnerability Details
the MYT VaultV2 would call the PeapodsETHStrategy at allocate and deallocate. it is using mint at allocate and withdraw at deallocate.
because of this, the VaultV2 would use the amount to account how much the strategy allocate into given peapods vault. note that the amount is in WETH amount.
the issue lies on how deallocate flow, it can only deallocate previous amount that is getting allocated:
effectively this means that allocate and deallocate can only process raw WETH amount that is returned by the PeapodsETHStrategy function.
for example if the MYT VaultV2 is calling PeapodsETHStrategy to allocate 10 WETH, the _caps.allocation would be set into 10 WETH. lets assume we got 10 shares.
then after some time, yield on peapods is generated and 10 shares worth 11 WETH, but when deallocate is called, it can only withdraw 10 WETH because the change would return -10 WETH and this would get deducted with previous _caps.allocation . effectively leaving unburned shares from the withdraw inside PeapodsETHStrategy contract with no way to retrieve.9.
Impact Details
it is crucial that Strategy can generate yield for the AlchemistV3 and Transmuter contract to operate normally. so this would break the self repaying loan that the protocol wants to do.
References
https://github.com/morpho-org/vault-v2/blob/406546763343b9ffa84c2f63742ae55a490b7c42/src/VaultV2.sol#L598-L615
https://github.com/alchemix-finance/v3-poc/blob/a192ab313c81ba3ab621d9ca1ee000110fbdd1e9/src/strategies/mainnet/PeapodsETH.sol#L29-L47
Proof of Concept
Proof of Concept
add this diff:
the test result:
shows that initial 10 WETH equal to 9.73 shares. then after some time 10 WETH now equal to ~8.75 shares but the strategy cant deallocate more than the original 10 WETH. the logs shows that withdrawing 10 WETH would leave 0.97 shares in the Strategy which equal to ~1.1 WETH.
also shown on PoC if the strategy try to withdraw the realAsset (all shares owned converted to asset), it would revert of underflow.
Was this helpful?