Creamy Carrot Yeti
High
At the moment wooracle admin is marked as the signer of the transaction (msg.sender
) who calls handler()
function without any verification if it's a trusted entity or not.
create_wooracle()
instruction is used to create a new wooracle with different parameters by calling handler()
function:
https://github.com/woonetwork/woofi_swap_smart_contracts/blob/main/contracts/WooPPV2.sol#L84
pub fn handler(ctx: Context<CreateWooracle>, maximum_age: u64) -> Result<()>
However, in the current version of the instruction, admin is currently set as just signer:
admin: Signer<'info>,
And there is no any constraint to validate if it's a trusted entity or not as it's done in other instructions meaning the handler()
can be called by anybody.
From the spec:
Functions need admin authority: claim_fee claim_rebate_fee create_oracle create_pool create_rebate_pool deposit set_pool_admin set_pool_state (all handlers in this file) set_woo_admin set_woo_state(all handlers in this file)
Anybody can call handler()
function and create a new wooracle that's supposed to be only called by admin.
Provided above.
Manual Review
Introduce some constraints in CreateWooracle
struct to check for the trusted authority.