code4rena-2024-08-chakra-m11
[M-11] Wrong usage of transaction originator address instead of caller address
Summary
Cairo에서 브릿지 관련 이벤트를 생성할 때 msg.sender 대신 tx.origin 을 이용했다. 잘못된 데이터로 이벤트를 생성하여 브릿지 작동에 오류를 일으킬 수 있다.
Keyword
bridge, cross chain, event
Vulnerability
Cairo 컨트랙트에서 브릿지 요청할 때와 목적지에서 결과를 보낸 것을 콜백으로 수신할 때, 이벤트의 from_address 파라미터가 잘못되었다. msg.sender 대신 Cairo에서 tx.origin을 의미하는 get_tx_info().unbox().account_contract_address 를 이용하였다. account_contract_address 참고
fn send_cross_chain_msg(
ref self: ContractState, to_chain: felt252, to_handler: u256, payload_type :u8,payload: Array<u8>,
) -> felt252 {
...
self
.emit(
CrossChainMsg {
cross_chain_settlement_id: cross_chain_settlement_id,
@> from_address: get_tx_info().unbox().account_contract_address,
from_chain: from_chain,
to_chain: to_chain,
from_handler: from_handler,
to_handler: to_handler,
payload_type: payload_type,
payload: payload
}
);
...
}Cairo에서 msg.sender를 이용하려면 get_caller_address() 를 호출해야 한다. get_caller_address 참고
Impact
잘못된 데이터로 이벤트를 생성하여 브릿지 작동에 오류를 일으킬 수 있다.
Mitigation
Cairo에서 msg.sender에 해당하는 get_caller_address() 를 이용한다.
tags: bughunting, chakra, smart contract, starknet, cairo, bridge, cross chain, severity medium, cairo event