The KittyBridge::_ccipReceive function is triggered upon the receipt of each new incoming message from the CCIP protocol router. According to best practices, it is recommended to verify the sender of the CCIP message, whose value is stored as the property sender of Client.Any2EVMMessage structure. However, in the KittyBridge::_ccipReceive function, verification is attempted using msg.sender, which will always equal the CCIP router address.
The KittyBridge::_ccipReceive function utilizes the onlyAllowlisted modifier to authenticate the sender of the CCIP message with the source chain selector.
This function employs msg.sender for sender verification, where msg.sender will always be the router. This is guaranteed by the onlyRouter modifier from the CCIPReceiver smart contract.
It is expected that this function should authenticate the actual sender from the source chain.
The verification of the CCIP message sender is incorrect, and without adding the router address to the allowlistedSenders, this method will consistently fail, regardless of who sends the message.
Consequently, in most cases, KittyBridge::_ccipReceive will fail due to incorrect sender validation.
Manual review and CCIP documentation.
The above changes rectify the issue by ensuring that KittyBridge::_ccipReceive correctly authenticates the sender of the CCIP message, thus addressing the identified vulnerability.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.