security(handshake): #34 anti-replay baseline is in-memory only — a restarted responder accepts one stale Init and learns endpoint from it #104

Open
opened 2026-07-25 21:54:01 +00:00 by vxfemboy · 0 comments
vxfemboy commented 2026-07-25 21:54:01 +00:00 (Migrated from github.com)

accept_fresh_init treats last_accepted_init_ts==None as always-fresh (bin/yipd/src/peer_manager.rs:1686) and never persists it. After a responder restart the baseline is None, so the first Init — including a captured stale one replayed off-path — is accepted and the cold-start arm learns endpoint=src from it (transient session-build + endpoint-hijack window; the replayer can't complete Noise-IK, so it self-heals on the next genuine fresh Init). Fix: an explicit boot-time floor on the baseline (no accepted Init may be older than this responder's boot time). Same family as the reg_seq wall-clock fix.

See docs/2026-07-25-project-review-and-roadmap.md for the full review synthesis.

accept_fresh_init treats last_accepted_init_ts==None as always-fresh (bin/yipd/src/peer_manager.rs:1686) and never persists it. After a responder restart the baseline is None, so the first Init — including a captured stale one replayed off-path — is accepted and the cold-start arm learns endpoint=src from it (transient session-build + endpoint-hijack window; the replayer can't complete Noise-IK, so it self-heals on the next genuine fresh Init). Fix: an explicit boot-time floor on the baseline (no accepted Init may be older than this responder's boot time). Same family as the reg_seq wall-clock fix. See docs/2026-07-25-project-review-and-roadmap.md for the full review synthesis.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
femboy/yip#104
No description provided.