Fee Accrual Dilution via accrueInterestView Rounding Asymmetry
https://github.com/morpho-org/vault-v2/blob/main/src/VaultV2.sol#L442
Solidity
uint256 performanceFeeShares =
performanceFeeAssets.mulDivDown(totalSupply + virtualShares, newTotalAssetsWithoutFees + 1);
uint256 managementFeeShares =
managementFeeAssets.mulDivDown(totalSupply + virtualShares, newTotalAssetsWithoutFees + 1);
Description
In accrueInterestView, both performance and management fee shares are calculated using mulDivDown. While the documentation acknowledges rounding down, the formula uses newTotalAssetsWithoutFees + 1 in the denominator. This creates a systematic rounding loss for the protocol treasury. An attacker can trigger frequent, tiny interest accruals (dust amounts) where performanceFeeAssets * (totalSupply + virtualShares) is less than newTotalAssetsWithoutFees + 1, resulting in zero shares minted to the recipient despite significant cumulative interest.
Impact
High. Protocol Revenue Theft. By strategically interacting with the vault in small increments (Griefing), an attacker can ensure the treasury never receives its rightful fees, effectively redirecting that value back to the share price for all depositors.
0 条评论