codingjoe / codingjoe/relay

Postmaster forward has no fan-out bound and no organisation-state gate

Open
#245 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
4
Forks
0
Avg merge
8h 24m
Merged PRs (30d)
115

Description

Proven during security review of the postmaster-forward work (branch `codingjoe-mta-forward-non-reports`): confidence 9/10, impact 6/10.

Any host with SMTP egress can send `postmaster@` (or `postmaster+anything@`) without an account. Once rspamd clears the message, relay sends one message per organisation member from the platform's postmaster address (`services/email/mta/tasks.py:302-308` → `:249`, `:262-270`). Nothing counts, throttles, or cools down the fan-out, and the path consults neither `billing_is_active` nor `suspended_at`, while `dispatch_webhook` drops messages for an unpaid organisation and the MSA refuses a suspended one. Receiving members are the organisation's own roster, so no third party can be reached; the harm is uncapped repeat mail into a cut-off organisation's inboxes from the platform identity, and burning the platform's sending reputation.

The user accepted the fan-out and asked for this issue rather than a gate.

A gate would be small: mirror `dispatch_webhook`'s billing check and the MSA's `suspended_at` check either where the forward is enqueued in `check_incoming_spam` or at the top of `forward_postmaster_message`.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.