CertiK reviewed YieldFlow on 12 Sep 2023: 18 findings, 0 critical; 15 marked fixed, 3 open.
Report hosted on skynet.certik.com.
Trustblock does not review code.
Statuses are the security firm’s own, from its report.
| Severity | Open | Acknowledged | Fixed |
|---|---|---|---|
| Critical | 0 | 0 | 0 |
| High | 1 | 0 | 0 |
| Medium | 0 | 0 | 0 |
| Low | 2 | 0 | 15 |
In the contract `RangePositionManager` the role `owner` has authority over the functions shown in the diagram below. Any compromise to the `owner` account may allow the hacker to take advantage of this authority and: - initialize the first position of the contract with `mintOwner`; - force the decrease of a user liquidity; - replace the `owner` itself and the `feeRecipient` account; - change the contract main parameters, including the reference token pair, the pool contracts, and fees; if an attacker sets a too high fee may discourage users from using the protocol inherently decreasing gains for liquidity providers. - allow or deny accounts to move the contract position range; - pause and unpause the calls to the `mint` and `increaseLiquidity` methods; - change the cooldown period to pay earnings to users and set a really high limit preventing users from earning fees for their participation in the protocol.  In the contract `RangePositionManager` the role `feeReceiver` has authority over the functions shown in the diagram below. Any compromise to the `feeReceiver` account may allow the hacker to take advantage of this authority and set an arbitrary account as new `feeReceiver` in order to get the collected fees.  Additionally, the contract allows the router address to be set arbitrarily during contract deployment. This introduces a potential vulnerability where a malicious router can be set during the contract deployment process. A malicious router could potentially behave in unexpected ways, leading to loss of funds or other vulnerabilities being exploited. Thus, it is crucial to ensure that the correct router address has been set during deployment. Once the contract is deployed with the correct router address and checked, there is no further need for validation, as the router address is then fixed and cannot be altered.
The code at the pointed location reads the spot price from a single pool, which is subject to potential price manipulation. `RangePositionManager.moveRange` uses the value from `IUniswapV3Pool` pool ```solidity=274 (params.sqrtPriceX96,params.currentTick,,,,,) = uniswapV3Pool.slot0(); ```
The `RangePositionManager` contract generally allows the method caller to use native ETH by specifying the `WETH` contract address for one side of the pool pair. However, such solution constrains the WETH address to a mere placeholder of native ETH and forbids any user to directly use WETH tokens for WETH pools, which is a common use case for pools with WETH in the token pair.
The report names a repository or files. Open the report to see its scope.
Repository and files the report names (3)
1,044 projects reviewed · 1,375 reports · latest May 2025
See CertiK’s auditsSomething wrong on this page? A missing report, a wrong date, a finding that was fixed since. Tell us and we check it against its source.
Tell us