Skip to content

beacon: punch-grant authoritative-key verification + panic-recover hardening - #46

Merged
TeoSlayer merged 2 commits into
mainfrom
feat/dest-carrying-relay-delivery
Jul 25, 2026
Merged

TeoSlayer merged 2 commits into
mainfrom
feat/dest-carrying-relay-delivery

Conversation

@TeoSlayer

Copy link
Copy Markdown
Contributor

Closes the WS3 punch-token bypass and adds panic-recover coverage across the beacon's untrusted-input paths.

Punch-grant verification (Finding A)

  • verifyPunchGrant now resolves the target pubkey from the registry's authoritative index via a new SetAuthoritativeKeyLookup hook (wired to r.LookupPublicKey in the rendezvous binary), instead of the Discover-populated nodePubKeys cache.
  • The Discover key binding is now first-write-wins (LoadOrStore), so an unauthenticated Discover can no longer rebind an existing node's key.
  • Together these mean an off-path host can no longer rebind a victim's beacon-held key to forge a punch grant when require_punch_token is enabled.

Panic-recover hardening

  • recover() backstops on the UDP read loop, packet dispatch, relay worker, reaper, gossip and registry-discover paths (new recover.go).
  • nil-socket guard; WSS auth ed25519 length guard.

Tests

  • Inverted the two attack-replay tests (DiscoverPubKeyOverwrite, PunchTokenBypassViaPubKeyRebind) to assert the controls now hold.
  • New fuzz targets over the dispatch and WSS-auth parsers.
  • Full package green under -race.

🤖 Generated with Claude Code

teovl and others added 2 commits July 25, 2026 17:03
…c-recover hardening

Punch-grant verification now resolves the target's pubkey from the
registry's authoritative index (via SetAuthoritativeKeyLookup) instead of
the Discover-populated cache, and the Discover key binding is
first-write-wins, so an unauthenticated Discover can no longer rebind a
node's key. Adds panic-recover backstops across the UDP read/dispatch and
relay paths, a nil-socket guard, a WSS auth length guard, and fuzz +
attack-replay regression coverage.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The beacon UDP round-trip tests used 2-3s read deadlines and the compat
WSS bridge a 30s accept budget; both flake on loaded public CI runners
(pre-existing, observed on main). Widen the UDP reads to 10s and the WSS
accept wait to 60s. A genuinely dropped reply still fails, just later.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@codecov

codecov Bot commented Jul 25, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@TeoSlayer
TeoSlayer merged commit 53a8f39 into main Jul 25, 2026
5 checks passed
@TeoSlayer
TeoSlayer deleted the feat/dest-carrying-relay-delivery branch July 25, 2026 14:40
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.

2 participants