ICS has the following four messages that enable validators on the provider chain to perform different actions:
MsgOptIn -- adds a validator to the consumer chain’s active setMsgOptOut -- removes a validator from the consumer chain’s active setMsgAssignConsumerKey -- changes the consensus key used for a validator’s operations on a consumer chainMsgSetConsumerCommissionRate -- sets a validator’s consumer-specific commission rateNormally, only the respective validators are allowed to perform these actions.
The upgrade to SDK 0.50, introduced a signer field to these messages. This field is used to authenticate the user sending the message to the system. However, there was no validation on the ICS side to check if the signer matches the provider address.
As a result, any user could opt-in, opt-out, change the commission rate, or change what public key a validator uses on a consumer chain.
For more context, check out the code:
The severity assessment is based on this framework.
Potential impact: Catastrophic
Likelihood: Rare
{
"cwe_ids": [],
"github_reviewed": true,
"github_reviewed_at": "2024-09-05T21:19:36Z",
"nvd_published_at": null,
"severity": "HIGH"
}