When a user claims their fees from ILOPool.claim, they receive their accrued fees up to that point. However, the function then attempts to send the performance fee to feeTaker, performing a collect on the Uniswap position with the amount type(uint128).max, which withdraws all fees from all users. This excess is then sent to feeTaker, causing potential DoS and future payment issues.
Lines of code
https://github.com/code-423n4/2024-06-vultisig/blob/main/src/ILOPool.sol#L242-L248 https://github.com/code-423n4/2024-06-vultisig/blob/main/src/ILOPool.sol#L257-L260
Vulnerability details
Impact
When a user claims their fees from
ILOPool.claim
, they receive their accrued fees up to that point. However, the function then attempts to send theperformance fee
tofeeTaker
, performing a collect on the Uniswap position with the amounttype(uint128).max
, which withdraws all fees from all users. This excess is then sent to feeTaker, causing potential DoS and future payment issues.Proof of Concept
ILOPool.sol:
amountCollected{0,1} represent the accumulated fees from all users, so feeTaker is receiving almost all the benefits.
Tools Used
Foundry
Recommended Mitigation Steps
The function should send to feeTaker only the fees obtained relative to what the user claimed.
Assessed type
Uniswap