Omniscia Euler Finance Audit
SwapHandlerUniAutoRouter Manual Review Findings
SwapHandlerUniAutoRouter Manual Review Findings
SHA-01M: Arbitrary Payload Invocations
| Type | Severity | Location |
|---|---|---|
| Logical Fault | ![]() | SwapHandlerUniAutoRouter.sol:L36 |
Description:
The swapInternal function relays an arbitrary payload to the uniSwapRouter02 via the call instruction which should be considered unsafe depending on the functions exposed by the uniSwapRouter02 contract.
Example:
35function swapInternal(SwapParams memory params) private {36 (bool success, bytes memory result) = uniSwapRouter02.call(params.payload);37 if (!success) revertBytes(result);38}Recommendation:
We advise the swapInternal function to at least validate the params.payload signature and only allow a sub-set of function signatures of uniSwapRouter02 to be invoked. Alternatively, we advise the swapInternal to be refactored to not utilize a call instruction at all and to instead use explicit functions exposed by the uniSwapRouter02 contract by decoding the input arguments contained in params.payload.
Alleviation:
The Euler Finance team evaluated this exhibit and has stated that while arbitrary code execution can be dangerous, in a similar lieu to SHI-01M they believe that validation would incur additional gas costs especially in relation to the Uniswap V2 implementation that contains very strict code interactions and does not pose a threat if interacted via any of its publicly exposed methods. Given that Uniswap V2 call validation can be performed, however, we will address this exhibit as acknowledged.
