Committee session key registration silently drops validators
| Field |
Value |
| Risk |
High |
| Confidence |
High |
| Likelihood |
Medium |
| Grounding |
Runtime review (hybrid) |
Summary
register_committee_keys ignores errors from SessionInterface::set_keys. When a duplicate or stale KeyOwner entry causes upstream pallet_session to reject registration, new_session still returns the full committee. Downstream, pallet_session omits validators without registered keys from the active authority set.
What happens
- Committee rotation calls
register_committee_keys for each member.
SessionInterface::set_keys(account, keys) fails (e.g. DuplicatedKey when a session key is already owned by another validator).
- The failure is logged and ignored.
new_session / new_session_genesis return all committee account IDs regardless.
- When the session starts,
pallet_session queue construction skips validators for which NextKeys is absent.
- Aura/GRANDPA run with a partial or unexpectedly empty authority set.
Root cause
The registration loop treats set_keys as best-effort. It does not:
- abort rotation on failure,
- reject the committee, or
- verify that every returned validator has matching keys in
pallet_session.
Why it matters
Aura/GRANDPA can omit an intended committee member or produce an unexpectedly empty/partial authority set, risking liveness and finality.
Committee session key registration silently drops validators
Summary
register_committee_keysignores errors fromSessionInterface::set_keys. When a duplicate or staleKeyOwnerentry causes upstreampallet_sessionto reject registration,new_sessionstill returns the full committee. Downstream,pallet_sessionomits validators without registered keys from the active authority set.What happens
register_committee_keysfor each member.SessionInterface::set_keys(account, keys)fails (e.g.DuplicatedKeywhen a session key is already owned by another validator).new_session/new_session_genesisreturn all committee account IDs regardless.pallet_sessionqueue construction skips validators for whichNextKeysis absent.Root cause
The registration loop treats
set_keysas best-effort. It does not:pallet_session.Why it matters
Aura/GRANDPA can omit an intended committee member or produce an unexpectedly empty/partial authority set, risking liveness and finality.