On 20 Jul 2017, at 20:54, Daniel Margolis wrote:
Hey, Chris,

Thanks for the thorough review. A few inline comments off the cuff; others
we will have to address in the draft.

On Thu, Jul 20, 2017 at 6:02 PM, Chris Newman <[email protected]>
wrote:

Overall, I find the document hard to read and the structure problematic. If I'm verifying STS policy, I want to know how to fetch the policy, then I want to know what to fetch. The document structure is awkward for that goal. And if I want to publish STS policy, I want to know where I publish it and then what I need to publish. An editorial pass to reorganize the document to be more useful and clear for an implementer would be helpful.

Do you have any suggestions of a restructuring? The current structure is (of course) _intended_ to be natural, in that we start with how to discover a policy (i.e., for senders, how to publish a policy), then how to validate a policy (i.e., for senders, how to decide what should go in your policy), then how to apply a policy (i.e. what the different "mode" options mean and
how they affect delivery).

I'm not at all averse to changing it, but it would help us a bit to have
more specific suggestions, if you have any. I and the other authors
obviously intended this to be a natural flow, so we may not be in the best
position to see what is awkward about it. :)

I can't work through more precise suggestions at the moment.

There's also an overuse of "quotes" around terminology which is
problematic in a document with JSON strings which need to be quoted in the
context of protocol examples.

It'd be helpful to have an example workflow, possibly early in the
document. Something like:

I think Appendix 2 covers more or less this, but in pseudocode. Are you
suggesting that it would be better to have that be textual rather than
pseudocode, be in-document rather than an appendix, or both?

Both.

Example:
 recipient: [email protected]
Determine policy domain [section reference], in this case example.com Look up DNS TXT record in _mta-sts.example.com (_mta-sts TXT record in
policy domain). [section reference].
 If failure or invalid record, stop.
 If valid cached policy record, skip forward to SMTP connection.
Connect to https server at mta-sts.example.com (mta-sts host in policy
domain). [section reference]
 Verify HTTPS TLS certificate as matching domain mta-sts.example.com
[section reference].
 Fetch policy from /.well-known/mta-sts.json [section reference].
 Connect to SMTP server according to SMTP standard.
 Perform STARTTLS
 Verify TLS negotiation and hostname matches STS policy [section
reference].

transmission into authenticated, downgrade-resistent encrypted
tarnsmission.


Fix spelling: resistent->resistant, tarnsmission => transmission

sts-version     = %x76 *WSP "=" *WSP %x53 %x54       ; "v=STSv1"
                  %x53 %x76 %x31


I recommend you improve ABNF readability by referencing RFC 7405.

 std-version    = %s"v=STSv1"

The policy itself is a JSON [RFC7159] object served via the HTTPS GET


This reference needs to be changed to draft-ietf-jsonbis-rfc7159bis, or you need to explicitly require use of UTF-8 charset, or reference I-JSON
(RFC 7493). With RFC 7159 there's a requirement to support and detect
UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE charsets (and possibly other Unicode
encodings) that I find highly problematic for interoperability.

  When fetching a new policy or updating a policy, the HTTPS endpoint
  MUST present a X.509 certificate which is valid for the "mta-sts"
host (as described below), chain to a root CA that is trusted by the


After reading the document, I'm not sure I understand how to construct the
DNS FQDN that I need to pass to the TLS API in order to validate the
mta-sts host. In the example workflow above, I made a guess. But the
document presently never says how to construct the FQDN explicitly.

  The certificate MAY be checked for revocation via the Online
Certificate Status Protocol (OCSP) [RFC2560], certificate revocation
  lists (CRLs), or some other mechanism.


Is there a reason this is a MAY rather than a SHOULD?


Yes. The security value of OCSP is contentious (e.g.
https://www.imperialviolet.org/2014/04/19/revchecking.html) and support for
it in HTTPS client libs is (AFAICT) haphazard; e.g.
https://curl.haxx.se/libcurl/c/CURLOPT_SSL_VERIFYSTATUS.htmlhttps://stackoverflow.com/questions/25803455/how-to-add-ocsp-support-into-python-requests-library.
Making OCSP a MUST seems to make implementation harder for questionable
gain.

I never suggested MUST OCSP, I suggested SHOULD implement some mechanism to check certificate revocation. From my perspective, it doesn't have to be any mechanism in particular, but having no way to revoke certificates is a problem. There have been real world cases where certificate revocation was needed. It's possible software update mechanisms have been more effective than other revocation mechanisms in practice, so that may be sufficient to meet the recommendation.

                - Chris

3.4.  Policy Selection for Smart Hosts and Subdomains


It's confusing to group two very different aspects of mail operations into
a single section. I'd suggest making this two sections.


  certificate MUST have a CN-ID ([RFC6125]) or SAN ([RFC5280]) with a


The abbreviation "SAN" doesn't appear in RFC 5280. Please expand it to
subjectAltName which does appear.

  DNS-ID matching the "mx" pattern.  The MX's certificate MAY also be
  checked for revocation via OCSP [RFC2560], certificate revocation
  lists (CRLs), or some other mechanism.


Is there a reason this is a MAY rather than a SHOULD?

  New fields are added to this registry using IANA's "Expert Review"
  policy.


Please add some guidance to the expert reviewer on the criteria that
should be met when registering new fields. You can leave the reviewer some
wiggle room, but having guidance sets expectations for the person
registering the new field, the expert reviewer and for any IESG appeal that
might result from a disagreement.

8.  Security Considerations


One more security consideration:

This mechanism causes an MTA (an automated system) to adopt the role of an
HTTPS client in a scenario where the HTTPS server may be hostile to
operation of the MTA. A full HTTP stack is a large amount of code that may
contain coding errors that expose the MTA to new implementation
vulnerabilities. This threat can be partially mitigated by using a hardened HTTPS client library that has been tested against a fuzzing HTTPS test server. This threat can also be partially mitigated by isolating the HTTPS code into a separate process that does not have access to the normal MTA machinery and making sure the MTA machinery gracefully handles a wedged
HTTPS client. Sites that are evaluating the cost/benefit of this
functionality may wish to compare the new attack surface of this mechanism with the new attack surface of alternate mechanisms such DANE [RFC7672].

                - Chris

_______________________________________________
Uta mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/uta



_______________________________________________
Uta mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/uta

Reply via email to