Category: Coding Mistakes
The CloseEventAccounts event emitted without validating event account
Informational Severity
Informational Impact
N/A Likelihood
Description
In the CloseEventAccounts instruction, the swap-endpoint program seems to assume reorgs for the deserialization failure of the SwapEvent account.
if let Ok(event_account) = Account::<SwapEvent>::try_from(event_account_info) {
[...]
} else {
// Ideally this should never happen but it could happen if the state chain
// were to go out of sync (e.g. large reorg, witnessing missbehaviour...)
emit!(events::CantDeserializeEventAccount {
event_account: event_account_info.key(),
payee: payee.key(),
});However, it only checks the SwapEvent account's PubKey after the deserialization is successful.
Impact
This has no security impact since the event emitted is likely just used for debugging.
Recommendations
The SwapEvent account's PubKey should be validated before trying to deserialize the account.
Remediation
This issue has been acknowledged by Chainflip, and a fix was implemented in commit 019c6b94↗.