Skip to content

fix(message_validator): reject signers outside the committee - #1351

Merged
mergify[bot] merged 1 commit into
sigp:epbsfrom
petarjuki7:fix/validator-signer-membership
Oct 22, 2026
Merged

mergify[bot] merged 1 commit into
sigp:epbsfrom
petarjuki7:fix/validator-signer-membership

Conversation

@petarjuki7

Copy link
Copy Markdown
Member

Problem, Evidence, and Context

  • Message validation adds an entry to its per-duty state for every signer listed in a message before it checks the signatures. Nothing checks that those signers belong to the committee.
  • A connected peer can list made-up operator ids and grow that state without valid signatures. On active committees these entries are not cleaned up.
  • go-ssv rejects such messages with ErrSignerNotInCommittee. Anchor already has SignerNotInCommittee but never returned it.
  • Reported through the security email. Affects v1.3.2.

Change Overview

  • Reject any message whose signers are not all in the committee, with SignerNotInCommittee (Reject), before signers are added to the duty state. This covers consensus and partial-signature messages.

Risks, Trade-offs, and Mitigations

  • Honest messages are only signed by committee members, so they are not affected.
  • Peers sending such messages are now penalised (Reject), the same as go-ssv.

Validation

  • New test: a message signed by an operator outside the committee is rejected with SignerNotInCommittee and leaves the duty state empty. Without the fix it fails on both checks.
  • make cargo-fmt-check, make lint, make test pass.

Rollback

  • Revert this PR.

Signers were added to the per-duty state before anything checked that
they belong to the message's committee, so a peer could list made-up
operator ids and grow that state without valid signatures. Reject such
messages with SignerNotInCommittee before signers are added to the
duty state, matching go-ssv's committee membership check.
@petarjuki7
petarjuki7 requested a review from dknopik October 22, 2026 12:06
@petarjuki7 petarjuki7 self-assigned this Oct 22, 2026

@dknopik dknopik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 😅

@mergify

mergify Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Queued — the merge queue status continues in this comment ↓.

@codecov-commenter

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 81.21%. Comparing base (6817d74) to head (b718f71).
⚠️ Report is 10 commits behind head on epbs.

Additional details and impacted files
@@            Coverage Diff             @@
##             epbs    #1351      +/-   ##
==========================================
+ Coverage   80.88%   81.21%   +0.32%     
==========================================
  Files         179      180       +1     
  Lines       41247    41831     +584     
==========================================
+ Hits        33364    33973     +609     
+ Misses       7883     7858      -25     
Flag Coverage Δ
rust 81.21% <100.00%> (+0.32%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@mergify

mergify Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Merge Queue Status

This pull request spent 29 minutes 43 seconds in the queue, including 27 minutes 20 seconds running CI.

Required conditions to merge
  • check-success=cli-reference-check
  • check-success=run-local-testnet
  • check-success=test-suite-success

@mergify mergify Bot added the queued label Oct 22, 2026
@mergify mergify Bot mentioned this pull request Oct 22, 2026
7 tasks done
@mergify
mergify Bot merged commit 8bfd72b into sigp:epbs Oct 22, 2026
23 checks passed
@mergify mergify Bot removed the queued label Oct 22, 2026
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.

3 participants