#79 finding 5 (HIGH): unthrottled DM invite auto-join + unrotated audit.jsonl; trust is_direct #85
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#85
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 review. Not fixed.
handle_inviteaccepts every non-banned DIRECT invite under open_registration and appservice-joins with NO rate limit or cap → a Sybil swarm of DM invites grows the bot's joined-room set without bound (memory + sync latency on the single process).audit.jsonlis opened append-only with NO rotation/size cap → invite/link/report spam fills the data-dir disk.handle_invitetrusts the inviter-setis_directflag as proof of a DM without checkingjoined_members_count, so a self-serve user can pull the bot into a multi-user room and trigger a greeting there (a second, un-rate-limited seeding path). (The command path itself is still gated byis_command_room, so this is greeting-leak + join, not command execution.)Fix
Cap + rate-limit invite acceptance per sender and globally; leave idle/empty DM rooms after a TTL; rotate/size-bound
audit.jsonland rate-limit audit writes per actor; verifyjoined_members_count <= 2before treating an accepted invite as a real DM (post-join).Severity HIGH (DoS/disk).
Core fixed + shipped in v0.3.0-alpha.18 (deployed 2026-07-11).
audit.jsonlrotates to.1at 64 MiB; an accepted DM invite found to have >2 members (spoofedis_direct) is left instead of greeted. Residual (per-sender invite cooldown + idle DM-room TTL leave) tracked in #89.linkof an invite-only room is unsatisfiable — the invite gate rejects the invite the link reply instructs #111