This is a postmortem describing the reason for the polkadot-fellows/runtimes’s 2.0.1 fast runtime upgrade.
On Tuesday November 4th, towards the end of AHM, Parity and the fellowship received a security notice from the SRLabs audit team about a missing origin check in the election-provider-multi-block pallet. The vulnerability was due to a let _ = check_origin() mistake; not including the ? to raise an error in case of an origin failure, and silencing the warning with a _. The transaction ignoring the origin check was meant to be a privileged origin managing the pallet’s parameter via governance only, and the vulnerability would allow anyone to dispatch it.
Luckily, since Parity was already on-call on the said date due to AHM, the issue was quickly fixed, and back-ported to unstable-2507 release of pallet-election-provider-multi-block, currently published as version 0.3.4.
Afterwards, the 2.0.1 runtime release was made and thanks to the quick voting response from the fellowship and token-holders, both referendums passed with a quick turnaround. As I am writing this, both Polkadot and Kusama AH runtimes have been upgraded with this fix.
The vulnerable pallet is a highly domain specific one created solely to be used in Polkadot system chains. Yet, to be safe, we have yanked all previous and vulnerable versions of this crate in crates.io.