Pre-launch adversarial security + abuse review of the open-registration surface (run on Fable) #79
Labels
No labels
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
dark/nether-voicebridge#79
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
A dedicated adversarial security + abuse review of the open-registration surface, to be run before
open_registrationis turned on in prod. Distinct from #41 (general understand-the-codebase review) and from the specific mitigations #77/#78 — this is the "try to break the thing strangers will poke" gut-check that gates going public.Why a separate pass
Once
open_registration = true, any Matrix user (local or federated) can DM the bot and drivelink/approve. That is the first genuinely-untrusted input surface the project exposes, and it has had far less adversarial attention than the audio path. #76 proves the flow works; this proves it can't be abused.Scope (attacker's-eye)
is_command_roomgate be tricked (invite races, membership-count timing)?require_room_authoritybe satisfied without real room moderation? Canrequire_discord_approvalbe short-circuited (approval-code guessability/entropy, replay, cross-guild redemption, timeout races, theDiscordApprovalchannel)?max_tenants_per_owner, owner/guild/room deny-lists: Sybil via federated MXIDs, pending-approval accounting, ban-then-recreate, guild/room normalization mismatches.Method & output
Run on Fable (highest-capability, adversarial), ideally multi-agent like the earlier whole-codebase review that filed #66–72. Output: filed findings + a go/no-go recommendation for enabling open registration.
Gate
Blocks turning
open_registrationon in prod. Do after #76 (flow validated) and alongside/after #77 + #78 (mitigations in place). Related: #47, #43, #41.#79 adversarial review — result: GO WITH CONDITIONS (do not announce publicly until the HIGH conditions land; keeping it quietly live is acceptable)
Ran the multi-agent review on Fable: 7 attacker-lens finders → 3 refute-by-default skeptics per finding → synthesis. 80 agents, 24 findings verified, 20 survived majority-confirmation, deduped to 6.
The good news (structurally sound)
Non-consensual bridging is structurally prevented.
validate_managementhard-refusesopen_registrationwithout BOTHrequire_room_authorityandrequire_discord_approval, so committing a tenant needs a Matrix-room moderator AND a Discord Manage-Server approval for the exact target guild. Approval codes are CSPRNG 32^6 with atomic single-winner redemption + guild-scoped claiming; the sharedas_tokenis never exposed to tenants; the DM-only (#71) command gate, fail-closed banlist reads, and approval-time ban re-check are all correct. The findings are DoS / abuse / reputation, not consent or auth-bypass.Fixed + deployed to master this session
40135f6, live-verified): the per-guild cap counted a third party's pending links, letting anyone park pendings on a victim guild's public snowflake to block its onboarding. Pending is now scoped to the requester.mgmt_self_serve_linkstep 6b rewritten as a regression test; live PASS 58.0s.validate_managementnow requiresmax_tenants_per_owner/max_tenants_per_guild/max_link_attemptswhenopen_registrationis on, so the public surface can no longer ship with zero velocity limiting (the "knobs off" footgun). Bounds a single MXID.Remaining conditions before public announcement (filed)
audit.jsonl;is_directtrust.require_room_authoritybar + re-check at commit.Recommendation
The surface is safe to keep quietly live (unannounced, near-zero traffic). Land #83–#85 (the HIGH DoS/abuse items) before any public announcement; #86 is a hardening follow-up. Prod already runs alpha.16 with the anti-abuse knobs ON.
Done. Multi-agent adversarial review (Fable; 7 finders → 3 refute-skeptics each → synthesis) — verdict GO_WITH_CONDITIONS: consent model structurally sound; all findings DoS/abuse, not auth-bypass. The blocking HIGH conditions were fixed + deployed (finding 4 + mandatory-caps in alpha.16; #83/#84/#85 in alpha.18). Remaining items are hardening follow-ups tracked in #86 (MED authority bar) and #87/#88/#89 (residuals). Full go/no-go in the comment above.