Skip to content

[Security][tentative] Medium (attackable): Startup Backfill Can Be Dropped Before Scheme Registration #296

Description

@evonide

Context

Node startup wires the finalizer, syncer, and orchestrator together. The orchestrator registers epoch-specific consensus verification schemes in SummitSchemeProvider, while the syncer handles repair and resolver-delivered backfill that must be verified before it is stored or acted on.

Current-epoch finalized or notarized data should either be verifiable when the syncer accepts it, or remain retryable until the verifier is available. That invariant depends on startup ordering between syncer repair/backfill and current-epoch scheme registration.

Claim

A malicious sync peer that controls responses to a restarting node's repair/backfill requests can trigger this only if its current-epoch finalized or notarized response is delivered in the scheduler window after syncer delivery handling is live but before the orchestrator processes the queued epoch-entry message. In that window, syncer acknowledges the delivery as handled without verification or storage and can leave the node's recovery gap unfilled. Engine startup has no explicit barrier that prevents syncer repair/backfill deliveries from being handled before the orchestrator has registered the current-epoch verifier. If that scheduler window is hit, missing-scheme deliveries are treated as handled instead of retryable, so valid startup backfill can be dropped without verification or storage.

Flow

The bug branch is reachable once a delivery is presented while SummitSchemeProvider has no scheme for the delivery epoch. The start condition is narrower than plain restart: engine start order starts finalizer and syncer before orchestrator, but those actors are spawned asynchronously, so source review proves an unbarriered race rather than a deterministic startup ordering where repair/backfill must always beat scheme registration.

Impact

A restarting or catching-up node can receive the missing finalized certificate or notarized block it needs during startup, acknowledge it as successfully handled, and then fail to store or process it because the verifier was not registered yet. Recovery can stall until another event happens to re-request the same data.

Root Cause

Startup ordering permits syncer delivery handling before orchestrator scheme registration, and missing-scheme deliveries return success instead of a retryable failure.

Code

Related Issues/PRs

The following existing items touch the same trust boundary, adjacent root cause, or likely remediation stack.

Note that #296 is the startup ordering window before the epoch verification scheme is registered; the others cover old-epoch schemes, finalized backfill, and resolver/subscription recovery behavior.

Fix

  • Start/register the orchestrator scheme before allowing syncer repair/delivery processing.
  • Treat missing current-epoch schemes as temporary failure and return false so resolver retries.
  • Add a startup barrier between finalizer epoch entry and syncer backfill.

Metadata

Metadata

Labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions