code4rena-2024-08-chakra-m09

[M-09] Bridging from Starknet to Starknet causes mismatch between minted ckrBTC and BTC transferred to MuSig2

보고서

Summary

Cairo 핸들러 컨트랙트에서, to_chainto_handlerfrom_chainfrom_handler와 동일하게 설정하면 Starknet Starknet 으로 브릿지할 수 있다. 동일 체인으로 브릿지할 시 LockMint 모드를 사용하는 ckrBTC 토큰의 경우 ckrBTC가 브릿지에 잠기고, 새로운 ckrBTC를 발행한다. 이를 통해 LockMint 모드를 사용하는 토큰의 발행량이 실제로 브릿지 된 것과 일치하지 않게 할 수 있다.

Keyword

bridge, cross chain, erc20, lack of input validation

Vulnerability

크로스체인 메시지를 수신하면 receive_cross_chain_msg 가 호출된다. 이 함수에서 출발지 체인과 목적지 체인 각각의 핸들러가 시스템에 등록되어 있는지 확인한다. support_handler 변수를 공유하므로(출발지와 목적지를 분리하여 관리하지 않으므로) 출발지와 목적지를 동일하게 설정할 수 있다.

@>  assert(self.support_handler.read((from_chain, from_handler)) && 
           self.support_handler.read((to_chain,  contract_address_to_u256(to_handler))), 'not support handler');

ckrBTC 토큰은 Chakra가 비트코인 브릿지 기능을 구현하기 위해 만든 토큰이다. 이 토큰은 브릿지가 수령한 비트코인의 수와 동일하게 발행되어야 한다. 따라서 LockMint 모드를 이용할 것이다. LockMint 모드를 이용할 때, 동일 출발지와 목적지로 브릿지 요청을 하면 ckrBTC 토큰을 잠그고, 새로운 ckrBTC 토큰을 발행받을 수 있다.

Impact

LockMint 모드를 사용하는 토큰의 발행량이 실제로 브릿지 된 것과 일치하지 않는다.

Mitigation

동일한 출발지, 도착지로 브릿지 요청을 할 수 없도록 한다.

Memo

code4rena-2024-08-chakra-h06 와 근본 원인은 같지만 LockMint 모드와 ckrBTC를 엮어서 설명한다는 차이가 있다. 금전적 피해는 발생하지 않기 때문에 Medium으로 분류했다고 한다.


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