code4rena-2024-08-chakra-h02
[H-02] In Starknet, already processed messages can be re-submitted and by anyone
Summary
브릿지가 받은 메시지가 기존에 이미 처리된 적이 있는 지를 확인하지 않았다. 따라서 재전송 공격을 하면 목적지 체인에서 토큰을 탈취할 수 있다.
Keyword
bridge, cross chain, lack of input validation, theft, replay attack
Vulnerability
Starknet 의 receive_cross_chain_msg 에서, 받은 메시지가 기존에 이미 처리된 적이 있는지 아무도 확인하지 않는다. Settlement.receive_cross_chain_msg 에서 확인하지 않고 Handler 에게 넘기고, Handler.receive_cross_chain_msg 에서도 확인하지 않는다. 따라서 이미 처리된 적이 있는 메시지를 기존에 사용했던 서명과 함께 재전송하면 목적지에서 토큰을 탈취할 수 있다.
Impact
목적지 체인에서 토큰을 탈취할 수 있다.
Mitigation
receive_cross_chain_msg 에서 이미 처리된 적이 있는 메시지인지 확인한다. 또한 CEI 패턴을 적용(상태를 먼저 업데이트)하여 재진입이 불가하게 한다.
tags: bughunting, chakra, smart contract, starknet, cairo, crypto theft, bridge, cross chain, replay attack, severity high