Lower-severity identity-at-the-edges findings from the v0.15 audit (relay/session). Grouped; each is independently small.
1. Handle squatting — no TTL, no unclaim (audit Finding 3) — MED
HandleRecord has no expiry and there's no unclaim endpoint. An abandoned handle is squatted forever on a relay; an attacker first to a fresh relay permanently blocks the real user.
Fix: optional expires_at (relay-operator TTL) + a bearer-auth DELETE /v1/handle/claim/:nick.
2. wire dial trusts the relay's answer with no fingerprint prompt (audit Finding 4) — MED
First-contact discovery resolves a card from .well-known/phonebook and pairs without surfacing the DID+fingerprint. A malicious/compromised relay can serve a poisoned card pre-pair (the relay-is-a-dumb-pipe posture covers post-pair events, not the discovery surface).
Fix: wire dial/wire whois print resolved DID+fingerprint and warn "relay is trusted for discovery; verify out-of-band" on first contact.
3. Per-nick intro flood → slot exhaustion (audit Finding 7) — MED
POST /v1/handle/intro/:nick (unauthenticated, kind=1100 only) has no per-nick rate limit — only a global governor. An attacker can fill a target's 64 MB slot quota in ~25s, making them unreachable until wire rotate-slot.
Fix: per-nick rate bucket (e.g. >5 intros/nick/5min → 429).
4. Windows identity-collision detection is silent (audit Finding 5 / issue #30) — MED
warn_on_identity_collision no-ops on Windows (pgrep/read_wire_home_from_pid are POSIX-only), so two same-cwd sessions silently share an identity (signing keys + inbox cursor) there.
Fix: Windows adapter via PowerShell Get-CimInstance Win32_Process CommandLine + env parse.
5. MCP ghost identity — no self-detected version drift (audit Finding 6) — LOW
wire upgrade without --restart-mcp leaves the old wire mcp server serving its startup identity snapshot; it never self-detects that the on-disk binary moved.
Fix: tool_whoami compares baked SERVER_VERSION vs on-disk daemon version; append stale_binary: true + NOTE on mismatch.
Lower-severity identity-at-the-edges findings from the v0.15 audit (relay/session). Grouped; each is independently small.
1. Handle squatting — no TTL, no unclaim (audit Finding 3) — MED
HandleRecordhas no expiry and there's no unclaim endpoint. An abandoned handle is squatted forever on a relay; an attacker first to a fresh relay permanently blocks the real user.Fix: optional
expires_at(relay-operator TTL) + a bearer-authDELETE /v1/handle/claim/:nick.2.
wire dialtrusts the relay's answer with no fingerprint prompt (audit Finding 4) — MEDFirst-contact discovery resolves a card from
.well-known/phonebook and pairs without surfacing the DID+fingerprint. A malicious/compromised relay can serve a poisoned card pre-pair (the relay-is-a-dumb-pipe posture covers post-pair events, not the discovery surface).Fix:
wire dial/wire whoisprint resolved DID+fingerprint and warn "relay is trusted for discovery; verify out-of-band" on first contact.3. Per-nick intro flood → slot exhaustion (audit Finding 7) — MED
POST /v1/handle/intro/:nick(unauthenticated, kind=1100 only) has no per-nick rate limit — only a global governor. An attacker can fill a target's 64 MB slot quota in ~25s, making them unreachable untilwire rotate-slot.Fix: per-nick rate bucket (e.g. >5 intros/nick/5min → 429).
4. Windows identity-collision detection is silent (audit Finding 5 / issue #30) — MED
warn_on_identity_collisionno-ops on Windows (pgrep/read_wire_home_from_pidare POSIX-only), so two same-cwd sessions silently share an identity (signing keys + inbox cursor) there.Fix: Windows adapter via PowerShell
Get-CimInstance Win32_ProcessCommandLine + env parse.5. MCP ghost identity — no self-detected version drift (audit Finding 6) — LOW
wire upgradewithout--restart-mcpleaves the oldwire mcpserver serving its startup identity snapshot; it never self-detects that the on-disk binary moved.Fix:
tool_whoamicompares baked SERVER_VERSION vs on-disk daemon version; appendstale_binary: true+ NOTE on mismatch.