#41644 [SC-High] `_clearUserDebt` in zapOut function sends the remaining tokens to `msg.sender` instead of receiver.
Description
Brief/Intro
Vulnerability Details
function claimRewardsInToken(
uint256 amountToWithdraw,
address outputToken,
IZapper.SingleTokenSwap calldata swap0,
IZapper.SingleTokenSwap calldata swap1,
IZapper.KodiakVaultUnstakingParams calldata unstakeParams,
IZapper.VaultRedeemParams calldata redeemParams
) external nonReentrant {
_updateRewards(msg.sender);
IZapper.VaultRedeemParams memory updatedRedeemParams = _verifyAndPrepareClaim(amountToWithdraw, redeemParams);
IERC20(redeemParams.vault).approve(address(zapper), amountToWithdraw);
uint256 receivedAmount =
zapper.zapOut(outputToken, msg.sender, swap0, swap1, unstakeParams, updatedRedeemParams);
emit Claimed(msg.sender, receivedAmount);
}Impact Details
References
Proof of Concept
Flow
Previous#41638 [SC-Medium] Sandwich Attack on `compound()` Function Allows Value Extraction from Honest DepositorsNext#41647 [SC-High] Unused tokens after zapping can be stuck and not entitled to users
Was this helpful?