The scrvUSD Oracle system lacks critical input validation checks, particularly for total_supply
and price-related parameters. The system fails to validate critical inputs, such as ensuring that total_supply is greater than zero or that price ranges are within reasonable bounds.
Code Locations:
ScrvusdOracleV2.vy
:
No check for self._total_supply(...) > 0
.
ScrvusdVerifierV1.sol
: Accepts state proofs without validating parameter sanity (e.g., total_supply
).
-> Missing guards for total_supply > 0
and valid price ranges.
Division-by-Zero: If total_supply = 0
, _raw_price
reverts, freezing the oracle and halting pool operations.
Systemic Risk: Entire protocol functionality depends on oracle reliability.
Input Validation:
Add checks in ScrvusdOracleV2.vy
:
Note that `total_supply` and `profit_unlocking_rate` is initially set to 1 and 0 respectively when the `ScrvusdOracleV2.vy` is deployed 1. `total_supply` and `profit_unlocking_rate` is part of the price param updates within `update_price`, which must have gone through verification via the OOS `StateProofVerifier` contract, so there is no evidence that a 0 supply is allowed either via a 0 supply update or an extremely high `profit_unlocking_rate`. 2. Since price is retrieved via values retrived from the V3Vault, if there is no supply, there is arguably no price to be posted. As such, reverting is arguably the correct choice since a 0 price value is not expected from scrvUSD, which is a stable coin.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.