Skip to content

Fix WIRE-385 stale outbound operator rosters - #603

Open
huangminghuang wants to merge 1 commit into
masterfrom
fix/wire-385-stale-operator-rosters
Open

Fix WIRE-385 stale outbound operator rosters#603
huangminghuang wants to merge 1 commit into
masterfrom
fix/wire-385-stale-operator-rosters

Conversation

@huangminghuang

@huangminghuang huangminghuang commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Tracking

  • Jira: WIRE-385
  • CertiK: WNS-34Stale Operator Roster In Outbound Attestations Due To Inline Action Ordering
  • Audit: Wire Network – Sysio Audit 1, Critical severity, Financial Manipulation

Why

sysio.epoch::advance() queued slashing and termination as inline actions, then generated OPERATORS and BATCH_OPERATOR_GROUPS attestations before those state mutations executed. A slashed or terminated operator could therefore be announced as active for the next epoch. External outposts could continue accepting that operator's signatures, creating a path to forged cross-chain messages, outpost compromise, or loss of locked funds.

The issue also affected liveness: simply pruning an ineligible operator could leave a future schedule group empty. When that group became active, no operator could relay messages or advance cross-chain consensus even when healthy standbys were available.

What changed

Finish advancement through an authenticated self-inline continuation, then publish the fresh operator roster before its group schedule. Remove inactive members and repair future vacancies using healthy standbys before selecting the tail.

The tracked epoch ABI and WASM are regenerated. Withdrawal flushing, deferred queues, and emissions retain their required action ordering and inline depth.

Validation

Both source and artifact-copy contract suites pass all 729 cases; all 14 canonical local platform flows pass (2,433 report steps), including the collateral-withdrawal scenario that exposed and now verifies future-seat repair. Independent correctness, architecture, and compliance reviews pass. Exact-head SYSIO CI passes; the exact-head cross-repository e2e run is running.

Deployment notes

Deploy the companion Ethereum admission fix first: https://github.com/Wire-Network/wire-ethereum/pull/198. Current-group vacancies require roster recovery; incomplete windows remain withheld. Future-vacancy recovery can shorten normal duty spacing in larger schedules.

Change-Id: I2fe1bac5e738da09019a96deae976fe727638b4f
@huangminghuang
huangminghuang requested a review from a team September 7, 2026 19:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant