code4rena-2024-08-chakra-m01
[M-01] Excessive Authority Granted to Managers in the ckr_btc.cairo Contract Presents Significant Management Risks
Summary
Solidity 버전 구현과 Cairo 구현에서 manager role의 권한이 서로 달랐다. Cairo 측 manager가 너무 많은 권한을 가지고 있으므로 동일하게 맞춰야 한다.
Keyword
bridge, cross chain, centralization
Vulnerability
Solidity 구현에서는 컨트랙트 owner만 manager 권한을 관리할 수 있다.
function add_manager(address _manager) external onlyOwner {
grantRole(MANAGER_ROLE, _manager);
emit ManagerAdded(msg.sender, _manager);
}
function remove_manager(address _manager) external onlyOwner {
revokeRole(MANAGER_ROLE, _manager);
emit ManagerRemoved(msg.sender, _manager);
}하지만 Cairo 구현에서는 manager 가 manager 권한을 관리할 수 있다.
fn add_manager(ref self: ContractState, new_manager: ContractAddress) -> bool {
let caller = get_caller_address();
@> assert(self.chakra_managers.read(caller) == 1, 'Caller is not a manager');
...
}
fn remove_manager(ref self: ContractState, old_manager: ContractAddress) -> bool {
let caller = get_caller_address();
@> assert(self.chakra_managers.read(caller) == 1, 'Caller is not a manager');
...
}Impact
Manager role이 너무 많은 권한을 가짐
Mitigation
Cairo 측 manager가 너무 많은 권한을 가지고 있으므로 동일하게 맞춘다. Owner만 manager 권한 관리를 할 수 있게 변경한다.
tags: bughunting, chakra, smart contract, starknet, cairo, bridge, cross chain, severity medium, centralization