Subject: [nfsv4] Martin Duke's Discuss on draft-ietf-nfsv4-rpc-tls-08: (with DISCUSS and COMMENT)

From: Martin Duke via Datatracker <[email-masked]>
Date: Thu, 25 Jun 2020 13:56:10 -0700

Martin Duke has entered the following ballot position for
draft-ietf-nfsv4-rpc-tls-08: Discuss

When responding, please keep the subject line intact and reply to all
email addresses included in the To and CC lines. (Feel free to cut this
introductory paragraph, however.)

Please refer to https://www.ietf.org/iesg/statement/discuss-criteria.html
for more information about IESG DISCUSS and COMMENT positions.

The document, along with other ballot positions, can be found here:
https://datatracker.ietf.org/doc/draft-ietf-nfsv4-rpc-tls/

----------------------------------------------------------------------
DISCUSS:
----------------------------------------------------------------------

This presumably a trivial fix but I think it's important enough to be a DISCUSS:

I think the document needs some discussion of the security properties of TLS1.3
early data over TCP, if only to refer to Section 8 of RFC 8446 (replay) and
mention that it is not forward-secure, unlike the rest of the payload.

----------------------------------------------------------------------
COMMENT:
----------------------------------------------------------------------

Thank you for this draft. I fully support bringing TLS into more use cases of
this type.

Some comments:
Sec 1.
"Moreover, the use of AUTH_SYS remains common despite the adverse effects that
acceptance of UIDs and GIDs from unauthenticated clients brings with it.
Continued use is in part because:

Per-client deployment and administrative costs are not scalable. Administrators
must provide keying material for each RPC client, including transient clients.
Host identity management and user identity management must be enforced in the
same security realm. In certain environments, different authorities might be
responsible for provisioning client systems versus provisioning new users."

The text above says that something is still in use because..., and then
mentions two things that are bad. I think the two items are supposed to refer
to GSS?

Sec 4.2 This sure looks like normative text, so s/must not/MUST NOT "...
utilize the remote TLS peer identity for RPC user authentication"

Sec 5.1.2 Similarly, s/should/SHOULD "...employ ConnectionIDs of at least 4
bytes in length."

---

From: Chuck Lever <[email-masked]>
Date: Sat, 27 Jun 2020 13:27:47 -0400

Hi Martin-

Thank you for your comments.

> On Jun 25, 2020, at 4:56 PM, Martin Duke via Datatracker <[email-masked]> wrote:
> 

We could extend the first paragraph of Section 7, as follows:

OLD:

7.  Security Considerations

   One purpose of the mechanism described in the current document is to
   protect RPC-based applications against threats to the confidentiality
   of RPC transactions and RPC user identities.  A taxonomy of these
   threats appears in Section 5 of [RFC6973].  Also, Section 6 of
   [RFC7525] contains a detailed discussion of technologies used in
   conjunction with TLS.  Implementers should familiarize themselves
   with these materials.

NEW:

7.  Security Considerations

   One purpose of the mechanism described in the current document is to
   protect RPC-based applications against threats to the confidentiality
   of RPC transactions and RPC user identities.  A taxonomy of these
   threats appears in Section 5 of [RFC6973].  Also, Section 6 of
   [RFC7525] contains a detailed discussion of technologies used in
   conjunction with TLS.  Implementers should familiarize themselves
   with these materials.

   Once a TLS session is established, the RPC payload carried on TLSv1.3
   is forward-secure. However, implementers need to be aware that replay
   attacks can occur during session establishment. Remedies for such
   attacks are discussed in detail in Section 8 of [RFC 8446].

Indeed, they do.

NEW:

   Moreover, the use of AUTH_SYS remains common despite the adverse
   effects that acceptance of UIDs and GIDs from unauthenticated clients
   brings with it.  Continued use is in part because:

   *  Per-client GSS deployment and administrative costs are not
      scalable.  Administrators must provide keying material for each
      RPC client, including transient clients.

   *  GSS host identity management and user identity management must be
      enforced in the same security realm.  In certain environments,
      different authorities might be responsible for provisioning client
      systems versus provisioning new users.

> utilize the remote TLS peer identity for RPC user authentication"

This paragraph formerly had MUST NOT, but was rewritten to address this issue:

  https://github.com/chucklever/i-d-rpc-tls/issues/5

There was a concern that the existing statement was not specific enough to make
it a compliance requirement. In particular, some implementations do want to use
the peer identity for access control decisions, though not on a per-user basis.

I'm open to some change here, but I'd like to hear suggestions about wording
to make the new compliance statement more actionable.

> Sec 5.1.2 Similarly, s/should/SHOULD "...employ ConnectionIDs of at least 4

No objection to using SHOULD.

--
Chuck Lever

---

From: Martin Duke <[email-masked]>
Date: Mon, 29 Jun 2020 11:35:28 -0700

All of these changes are satisfactory, thanks.

On the issue of  Sec 4.2:
I am not knowledgeable about this, but how about:
OLD:

   In either of these modes, RPC user authentication is not affected by
   the use of transport layer security.  When a client presents a TLS
   peer identity to an RPC server, the protocol extension described in
   the current document provides no way for the server to know whether
   that identity represents one RPC user on that client, or is shared
   amongst many RPC users.  Therefore, a server implementation must not
   utilize the remote TLS peer identity for RPC user authentication.

NEW:

   In either of these modes, RPC user authentication is not affected by
   the use of transport layer security.  When a client presents a TLS
   peer identity to an RPC server, the protocol extension described in
   the current document provides no way for the server to know whether
   that identity represents one RPC user on that client, or is shared
   amongst many RPC users.  Therefore, a server that wishes to authenti

---

From: Martin Duke <[email-masked]>
Date: Mon, 29 Jun 2020 11:38:22 -0700

Oops, hit send too early.

In either of these modes, RPC user authentication is not affected by
   the use of transport layer security.  When a client presents a TLS
   peer identity to an RPC server, the protocol extension described in
   the current document provides no way for the server to know whether
   that identity represents one RPC user on that client, or is shared
   amongst many RPC users.  Therefore, a server that wishes to
authenticate clients in accordance with Section 7 of [RFC5531] MUST
use an auth_flavor other than AUTH_TLS in a call message after the
TLS handshake is complete.

This suggestion is meant to be helpful and is non-blocking in my review.

---

From: Chuck Lever <[email-masked]>
Date: Tue, 30 Jun 2020 09:57:35 -0400

Hi Martin -

> On Jun 29, 2020, at 2:38 PM, Martin Duke <[email-masked]> wrote:
> 

It turns out the document already has such a compliance requirement
in Section 4.1:

   If an RPC client uses the AUTH_TLS authentication flavor on any
   procedure other than the NULL procedure, or an RPC client sends an
   RPC AUTH_TLS probe within an existing (D)TLS session, the RPC server
   MUST reject that RPC Call by setting the reply_stat field to
   MSG_DENIED, the reject_stat field to AUTH_ERROR, and the auth_stat
   field to AUTH_BADCRED.

I'm considering the following replacement, which is directly on point
with the discussion that led to the OLD text. It replaces the ambiguous
"must not".

OLD:

NEW:

   In either of these modes, RPC user authentication is not affected by
   the use of transport layer security.  When a client presents a TLS
   peer identity to an RPC server, the protocol extension described in
   the current document provides no way for the server to know whether
   that identity represents one RPC user on that client, or is shared
   amongst many RPC users.  Therefore, a server implementation cannot
   utilize the remote TLS peer identity to authenticate RPC users.

There is an implication here that, if a server has other means to know
whether the client's TLS identity represents a specific RPC user, then
it is feasible to use that identity to authenticate that user. That's
why we removed the restrictive compliance language.

> On Mon, Jun 29, 2020 at 11:35 AM Martin Duke <[email-masked]> wrote:

--
Chuck Lever