#79 finding 1 (HIGH): link probe pins the shared bot into attacker-named rooms; reap only probe-created joins #83
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#83
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?
From the #79 adversarial review. Not yet fixed — a first attempt (leave-on-any-probe-failure) was implemented and backed out after live e2e showed it tears the bot out of rooms with an ACTIVE bridge (all bridges share one appservice MXID), which in prod would break a live static/tenant bridge.
Problem
probe_room_prereqs(crates/matrix-rtc/src/mgmt.rs) must JOIN a room to read its state, and the join happens before the room-authority check. On the open-registration surface, a federated attacker canlinkany publicly-joinable room they have no power in: the shared bot joins, authority fails, the reply says "Nothing was written" — but the bot stays a permanent member. Repeating with fresh room ids parks the shared federated identity in arbitrary rooms (presence spam, appearance in member lists, appservice-reputation abuse, unbounded joined-room growth on the single mgmt sync).Correct fix (needs live iteration)
Leave ONLY a membership the probe itself created: read the bot's own membership BEFORE the join; if it was already
join(a running static/tenant bridge, or a prior link), never leave. If the probe newly joined and any later probe/authority check fails — or the pending later expires unapproved / is unlinked — leave (best-effort). Fail SAFE toward not-leaving when the pre-check errors, so an active bridge is never torn out. Add an e2e assertion that an authority-failed probe against an UNbridged room leaves the bot, and that a probe against a bridged room does not.Severity HIGH (DoS/abuse/reputation; not a consent breach). Blocks public announcement.
Core fixed + shipped in v0.3.0-alpha.18 (master
6dca786, deployed to prod 2026-07-11). Thelinkprobe now checks the bot's own/joined_roomsbefore joining and, on any post-join failure, leaves the room only if the probe created the membership — a room with an active bridge is never torn out (the correct form of the alpha.16 revert). Live-verified on staging (mgmt_self_serve_linkPASS, 0 tear-outs of the bridged room). Residual (reap abandoned-pending rooms via a periodic sweep) tracked in #87.linkof an invite-only room is unsatisfiable — the invite gate rejects the invite the link reply instructs #111linkof an invite-only room is unsatisfiable — the invite gate rejects the invite the link reply instructs #111