#46997 [SC-Medium] The vault performs an unsafe conversion on the getAccountValue result.
Description
Brief/Intro
Vulnerability Details
fn getAccountValue(self: @ContractState, account: ContractAddress) -> felt252 {
Self::get_account_value(self, account)
}
fn get_account_value(self: @ContractState, account: ContractAddress) -> felt252 {
let account_state = self._load_account_v2(account);
account_state.account_value().into()
}
fn _total_assets(self: @ContractState) -> u256 {
...
let mut vault_value: u256 = paraclear_dispatcher.getAccountValue(assets_holder).into();
// Skip sub-operators account values if vault is closed
let status = self.status.read();
if status == VaultStatus::Closed {
return self._convert_value_to_usdc(vault_value);
}
...
if sub_operators.len() > 0 {
let mut i = 0;
loop {
if i >= sub_operators.len() {
break;
}
let sub_operator = sub_operators.at(i);
let sub_operator_value: u256 = paraclear_dispatcher
.getAccountValue(*sub_operator)
.into();
vault_value += sub_operator_value;
i += 1;
};
}
...
}Impact Details
References
Proof of Concept
Proof of Concept
Previous#46989 [SC-Insight] Invalid trade side checkNext#47198 [SC-Critical] The operator can perform unauthorized fund transfers.
Was this helpful?