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