The UpdateWeightRunner contract uses a single global staleness threshold for all oracle feeds, which fails to account for different update frequencies across different price feeds. This can lead to either premature rejection of valid prices or acceptance of stale prices.
In the UpdateWeightRunner contract, the staleness check is implemented using a single global threshold:
The issue arises because different oracle feeds have different update frequencies. For example ARB/USD updates once a day, while DAI/USD updates every hour.
Using a single threshold means:
If set too low: Feeds with longer update intervals will be marked stale even when operating normally -> frequent downtime
If set too high: Feeds that should be considered stale will be accepted => incorrect pool weights and incorrect pricing for LP's
Frequent DoS and incorrect weights applied
Frequent downtime (DoS)
Incorrect pool weight calculations
Mispriced assets in the pool
Potential exploitation through arbitrage when stale prices deviate from market prices
Manual Review
Implement oracle-specific staleness thresholds:
This allows:
Setting appropriate thresholds per oracle feed
Accommodating different update frequencies
More precise staleness detection
Better risk management per price feed
This is by design, staleness is a strategy aspect: it requires all data to have been updated within n minutes. No more precision needed.
This is by design, staleness is a strategy aspect: it requires all data to have been updated within n minutes. No more precision needed.
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.