Anti-abuse: per-guild bridge caps + link-attempt rate limiting for open registration #77

Closed
opened 2026-07-10 23:51:24 +00:00 by robocub · 1 comment
Collaborator

Anti-abuse controls for open registration beyond the current per-owner tenant cap.

Context

Under open_registration, any Matrix user can DM the bot and link. Present controls: max_tenants_per_owner (per-MXID), owner/guild/room deny-lists, and a mutate cooldown. Two-sided auth already prevents bridging spaces you don't control — these target the residual vectors.

Gap 1 — Sybil resistance (per-guild caps)

max_tenants_per_owner is keyed on the Matrix MXID, but the bridge bot is federation-reachable, so a determined actor can use throwaway accounts on any homeserver to bypass a per-owner cap. nether.im's own registration is invite-code-gated (good Sybil resistance for local users) — but federated owners aren't subject to that. The stronger anchor is the Discord side (Manage Server on a real guild is hard to Sybil at scale). Proposed:

  • Per-guild bridge cap — limit how many bridges (and/or distinct owners) can target one Discord guild.
  • Consider a per-Discord-account limit as a complement.

Extend the existing mutate cooldown to a per-owner/per-window link-attempt budget so the link/approve flow can't be hammered (pending approvals already count toward the tenant cap; add a velocity limit too).

New knobs under [limits]. Related: #47, #43.

Anti-abuse controls for open registration beyond the current per-owner tenant cap. ## Context Under `open_registration`, any Matrix user can DM the bot and `link`. Present controls: `max_tenants_per_owner` (per-MXID), owner/guild/room deny-lists, and a mutate cooldown. Two-sided auth already prevents bridging spaces you don't control — these target the residual vectors. ## Gap 1 — Sybil resistance (per-guild caps) `max_tenants_per_owner` is keyed on the Matrix MXID, but the bridge bot is **federation-reachable**, so a determined actor can use throwaway accounts on any homeserver to bypass a per-owner cap. nether.im's own registration is **invite-code-gated** (good Sybil resistance for local users) — but federated owners aren't subject to that. The stronger anchor is the **Discord side** (Manage Server on a real guild is hard to Sybil at scale). Proposed: - **Per-guild bridge cap** — limit how many bridges (and/or distinct owners) can target one Discord guild. - Consider a per-Discord-account limit as a complement. ## Gap 2 — link-attempt rate limiting Extend the existing mutate cooldown to a **per-owner/per-window link-attempt budget** so the link/approve flow can't be hammered (pending approvals already count toward the tenant cap; add a velocity limit too). New knobs under `[limits]`. Related: #47, #43.
Author
Collaborator

Done. [limits] max_tenants_per_guild (per-guild anti-Sybil cap) + max_link_attempts (per-owner sliding-window velocity budget, optional link_attempt_window_secs) shipped, both required-when-open_registration as of the #79 hardening. Merged (master 937014b), live-validated (mgmt_self_serve_link PASS), shipped in v0.3.0-alpha.16, deployed. (Also fixed a pre-existing e2e txn-replay harness bug.)

Done. `[limits] max_tenants_per_guild` (per-guild anti-Sybil cap) + `max_link_attempts` (per-owner sliding-window velocity budget, optional `link_attempt_window_secs`) shipped, both required-when-open_registration as of the #79 hardening. Merged (master `937014b`), live-validated (`mgmt_self_serve_link` PASS), shipped in v0.3.0-alpha.16, deployed. (Also fixed a pre-existing e2e txn-replay harness bug.)
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
dark/nether-voicebridge#77
No description provided.