Demi M. Obenour:
Checking application/pgp-signature: FAILURE
-- Start of PGP signed section.
> On 2020-09-30 16:35, Wietse Venema wrote:
> > Demi M. Obenour:
> >> - If a message arrives via the SMTPS or submission ports, I
> >> want to replace the address part of the user-supplied From:
> >> header with the envelope From: header. This allows me to use
> >> reject-sender-login-mismatch to prevent users from sending messages
> >> with forged From: addresses.
> >
> > There are two parts to this:
> >
> > 1) Locking down the envelope.from.
> >
> > With authenticated smtp submission, the envelope.from can be
> > constrained by smtpd_sender_login_maps.
> >
> > With sendmail/postdrop submission the UNIX login name can be
> > overidden with "sendmail -f". There is no code in Postfix to
> > lock down "sendmail -f", and there is no 'plugin' interface that
> > could do this, either. I don't like the idea of adding complex
> > logic to the set-gid postdrop command to lock down "sendmail
> > -f". Doing the lockdown in the pickup daemon would be more
> > secure but has the problem that the 'reject' happens too late.
>
> I looked at the postdrop source code to see what locking down "sendmail
> -f" would entail. Checking that the current user can use `-f` seems
> to be just looking up the current username in an ACL, which postdrop
> already does for authorized_submit_users. Checking that -f was not
> passed looks to just be a string equality check, unless I am missing
> something. Of course, converting the same UID to a username three
> times is not a good idea performance-wise, but that can be fixed with
> some minor refactoring.
>
> Another option is to emit a good error message from sendmail, and then
> do the security check in pickup. If a user calls postdrop directly,
> the reject will happen late, but my understanding is that this isn't
> supported.
>
> Would you be interested in a patch that implemented either of these
> options?
I think that the envelope.from lockdown should be enforced in pickup
or before pickup but not both. If it is both then the code in the
pickup daemon will be a NOOP. WHen code is usually a NOOP no-one will
notice when they break it.
If a sender_login_maps feature can be implemented in postdrop
without giving an untrusted user control over the programn, then
let's try that.
Note that /usr/sbin/sendmail submission path has not been optimized
for performance, so adding another getpwuid() call should not be a
deal breaker.
> > 2) Locking down the header.from. based on rge envelope.from.
> >
> > You need a way to restrict the values of header.from that may
> > be used with a given envelope.from. There is no such code
> > Postfix, but this can be done with a plugin such as a Milter.
>
> It looks like this can be implemented (without changes to Postfix
> itself) by using header_checks(5) to ignore the From: header.
> cleanup(8) will then insert its own From: header.
>
> Is this a good idea? It worked for me when I used sendmail(1).
This will break email that legitmately overrides the envelope sender
address, such as mailing list managers.
You could specify "pickup -o cleanup_service=local_cleanup" and
define a custome cleanup service with a custom header_checks action.
Wietse