code4rena-2024-08-chakra-m06

[M-06] A cross-chain message can be initiated with invalid parameters

보고서

Summary

브릿지 메시지를 생성할 때, 유효하지 않은 값(0만큼 브릿지 하거나 address(0)으로 브릿지 하는 등)으로 요청했는 지 확인하지 않았다. 검증자가 불량 메시지에 서명을 하고 목적지 체인으로 옮기며 리소스를 낭비하게 된다.

Keyword

bridge, cross chain, lack of input validation, dos

Vulnerability

Solidity 구현에서는 토큰 이동을 요청할 때, 토큰 0개를 브릿지 요청을 하거나, address(0)에게 보내는 등 유효하지 않은 값을 확인한다.

        require(amount > 0, "Amount must be greater than 0");
        require(to != 0, "Invalid to address");
        require(to_handler != 0, "Invalid to handler address");
        require(to_token != 0, "Invalid to token address");

하지만 Cairo 구현에서는 이를 확인하지 않는다.

fn cross_chain_erc20_settlement(ref self: ContractState, to_chain: felt252, to_handler: u256, to_token: u256, to: u256, amount: u256) -> felt252{
    assert(self.support_handler.read((to_chain, to_handler)), 'not support handler');
    let settlement = IChakraSettlementDispatcher {contract_address: self.settlement_address.read()};
    let from_chain = settlement.chain_name();
    let token = IERC20Dispatcher{contract_address: self.token_address.read()};
    let token_burnable = IERC20MintDispatcher{contract_address: self.token_address.read()};
    if self.mode.read() == SettlementMode::MintBurn{
        token.transfer_from(get_caller_address(), get_contract_address(), amount);
    }else if self.mode.read() == SettlementMode::LockMint{
        token.transfer_from(get_caller_address(), get_contract_address(), amount);
    }else if self.mode.read() == SettlementMode::BurnUnlock{
        token_burnable.burn_from(get_caller_address(), amount);
    }else if self.mode.read() == SettlementMode::LockUnlock{
        token.transfer_from(get_caller_address(), get_contract_address(), amount);
    }
    ...
}

Impact

아무나 잘못된 파라미터를 이용하여 브릿지를 요청할 수 있다. 검증자는 불량 메시지에 서명하고 목적지 체인으로 옮기며 리소스를 낭비하게 된다.

Mitigation

Cairo 구현에서도 요청의 유효성을 확인한다.

Memo

Low 이슈인 것 같은데 Medium으로 인정되었다. 실제로 많은 dup들이 Low 이슈로 제출하였다. 브릿지 특성상 Medium으로 쳐준 것 같다.


tags: bughunting, chakra, smart contract, starknet, cairo, bridge, cross chain, severity medium, lack-of-input-validation-vul, dos