Math rounding is not ERC4626-complicant #349
Labels
2 (Med Risk)
Assets not at direct risk, but function/availability of the protocol could be impacted or leak value
bug
Something isn't working
duplicate-34
satisfactory
satisfies C4 submission criteria; eligible for awards
sufficient quality report
This report is of sufficient quality
Lines of code
https://github.com/code-423n4/2023-09-centrifuge/blob/main/src/InvestmentManager.sol#L396-L406
https://github.com/code-423n4/2023-09-centrifuge/blob/main/src/InvestmentManager.sol#L599
https://github.com/code-423n4/2023-09-centrifuge/blob/main/src/InvestmentManager.sol#L614
Vulnerability details
Impact
Per EIP 4626's Security Considerations (https://eips.ethereum.org/EIPS/eip-4626)
"Finally, ERC-4626 Vault implementers should be aware of the need for specific, opposing rounding directions across the different mutable and view methods, as it is considered most secure to favor the Vault itself during calculations over its users:
If (1) it’s calculating how many shares to issue to a user for a certain amount of the underlying tokens they provide or (2) it’s determining the amount of the underlying tokens to transfer to them for returning a certain amount of shares, it should round down. If (1) it’s calculating the amount of shares a user has to supply to receive a given amount of the underlying tokens or (2) it’s calculating the amount of underlying tokens a user has to provide to receive a certain amount of shares, it should round up."
Other protocols that integrate with a vault might wrongly assume that the functions handle rounding as per ERC4626 expectation. Thus, it might cause some intergration problem in the future that can lead to wide range of issues for both parties.
Proof of Concept
Note that
previewDeposit
andpreviewMint
also rounds downTools Used
Manual Review
Recommended Mitigation Steps
Round up in previewWithdraw
Assessed type
ERC4626
The text was updated successfully, but these errors were encountered: