56343 sc low morphoyearnogweth deallocate function always emits strategydeallocationloss due to flawed balance measurement
Description
Brief/Intro
Vulnerability Details
function _deallocate(uint256 amount) internal override returns (uint256) {
vault.withdraw(amount, address(this), address(this));
uint256 wethBalanceBefore = TokenUtils.safeBalanceOf(address(weth), address(this));
uint256 wethBalanceAfter = TokenUtils.safeBalanceOf(address(weth), address(this));
uint256 wethRedeemed = wethBalanceAfter - wethBalanceBefore;
if (wethRedeemed < amount) {
emit StrategyDeallocationLoss("Strategy deallocation loss.", amount, wethRedeemed);
}
require(wethRedeemed + wethBalanceBefore >= amount, "Strategy balance is less than the amount needed");
require(TokenUtils.safeBalanceOf(address(weth), address(this)) >= amount, "Strategy balance is less than the amount needed");
TokenUtils.safeApprove(address(weth), msg.sender, amount);
return amount;
}Impact Details
References
Recommendation
Link to Proof of Concept
Proof of Concept
Proof of Concept
Runnable PoC Test
Manual Steps to Reproduce
Previous58636 sc low broken two step admin transfer prevents legitimate admin succession in alchemistcuratorNext56902 sc high strategy adapter aavev3opusdcstrategy would not work well with atoken rebasing mechanism
Was this helpful?