49854 sc critical dex aggregator partial fill token loss
Description
Brief/Intro
Vulnerability Details
if (useNative) {
// ...
} else {
ERC20 depositAsset = desc.srcToken; // Assumes desc.srcToken is ERC20 type
uint256 depositAmount = desc.amount;
// Use safeTransferFrom
depositAsset.safeTransferFrom(msg.sender, address(this), depositAmount);
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// all user funds moved to contract
// (the issue lies in the fact that leftovers are not returned)
// Approve agregator to take tokens from this contract
depositAsset.safeApprove(address(aggregator), depositAmount);
}
// Perform swap
(supportedAssetAmount,) = aggregator.swap(executor, desc, data);Impact Details
References
Proof of Concept
Previous50415 sc low getmaxnumberoftokens returns wrong value when arctokens are withdrawnNext49835 sc insight dex aggregator unused eth loss
Was this helpful?