Demi Marie Obenour: > On 4/15/21 11:00 AM, Wietse Venema wrote: > > Demi Marie Obenour: > >> Would the following be a good idea? > > [a bunch of port-dependent behavior] > > > > That is all good and well, but this needs to be made configurable. > > > > I boldly assume this will use the xxx_tls_wrapper_mode parameters, > > instead of replacing them with some totally different mechanism. > > I don?t particularly care about the mechanism. Since this already > exists, using it is obviously preferable to writing a new one. > > > Possible options: > > > > smtpd_tls_wapper_mode = > > Something that depends on an inbound port which is defined > > in master.cf. As of Postfix 3.3, the read-only "service_name" > > parameter contains the first field of a master.cf entry, > > in the form of a port, service-name, host:port, host:service-name, > > or UNIX-domain pathname. Extracting or matching the port > > or service-name portion is beyond what is currently possible > > with Postfix conditional parameter expansions. From a > > security standpoint, using this information is OK because > > master.cf is writable by the super-user only, and because > > the Postfix master daemon is a trusted process. > > > > smtp_tls_wrapper_mode = > > Something that depends on an outbound port or service-name > > that is specified in a delivery request in a next-hop > > destination as host:port or host:service-name (this is based > > on information from default_transport, relayhost, transport_maps, > > or the sender-dependent versions of those). Basically, > > this would make parameter evaluation dependent on data in > > a delivery request. There is prior art for doing this in > > the local delivery agent in very limited cases: luser_relay, > > forward_path, and command_execution_directory. That had to > > be implemented very carefully to avoid security problems. > > > > So based on this we need > > > > 1) SMTP server: Add support to match the port or service name in > > in the service_name parameter (new parameter evaluation code, > > non-trivial), OR: make the port or service name available as another > > parameter (new code in daemon library, trivial and safe). In both > > cases, make the smtpd_ls_wrapper_mode default value port dependent. > > Exactly.
This introduces no new opportunities for attack, as it does not involve new information flows. It is now a matter of cost versus benefit. Time spent on this cannot be spent on something else. > > 2) SMTP client: Postpone the evaluation of smtp_tls_wrapper_mode > > until after a delivery request is received, add support for > > request-dependent $parameter expansion in smtp_tls_wrapper_mode, > > and make that bullet-proof. Doing this for smtp_tls_wrapper_mode > > can be made safe; doing this for more SMTP client parameters would > > require a much more extensive security analysis. > > From my perspective, SMTP + STARTTLS is equivalent to SMTPS, except > that they use different port numbers and the latter uses fewer > round-trips. Obviously, downgrade from TLS to no TLS is bad, but > switching between SMTP + STARTTLS and SMTPS is fine. > > That said, this appears to be more complicated than I thought it > would be. Do you consider the extra complexity (and attack surface) > justified? Maybe. If smtp_tls_wrapper_mode is made port-dependent, then it can be safe as long as the destination has already been validated as a legitimate service name or TCP port number. Other request attributes would be harder to validate, and that could lead down a slippery slope. Forgetting to turn on smtp_tls_wrappemode is a low-probability mistake in what is now a rarely-used feature. And the error message is better (connection timed out while waiting for server greeting) than in the missing smtpd_tls_wrappermode case (lost connection after unknown, too many errrors). So the effort is non-trivial and the benefit is small. Wietse