Closed code423n4 closed 2 years ago
The initial Range-Bound Stability system (PRICE, RANGE, Operator, Heart) is only designed for one reserve asset. The Kernel architecture is designed to allow updates to the system over time. The Treasury will support multiple reserves assets initially, but only one of them will be used for RBS. In the future, it may be updated to support multiple.
downgrading to QA - dupe of #425
Lines of code
https://github.com/code-423n4/2022-08-olympus/blob/b5e139d732eb4c07102f149fb9426d356af617aa/src/policies/Heart.sol#L73
Vulnerability details
Impact
The system currently cannot have multiple oracles, so cannot implement multiple
RANGE
and work properly in its current form.There is an incoherence between the
TRSRY
which is made for multiple reserve assets and the other modules likePRICE
orRANGE
Proof of Concept
In the
PRICE
module it is stated: “The Olympus Price Oracle contract provides a standard interface for OHM price data against a reserve asset.”, and thePRICE
module only support one oracle. It is therefore expected that the system supports multiplePRICE
module: 1 per reserve asset.But in
OlympusHeart.sol
, line 73 we got: PRICE = OlympusPrice(getModuleAddress(dependencies[0]));, so all
Heart` policy will support the same oracle, which is not the intended behavior.The same kind of things works for the
RANGE
moduleRecommended Mitigation Steps
Change the keyCode system to allow for multiple reserve assets