From: "J. Bruce Fields" <bfields@fieldses.org>
To: Volodymyr Khomenko <volodymyr@vastdata.com>
Cc: linux-nfs@vger.kernel.org, Ilan Steinberg <ilan.steinberg@vastdata.com>
Subject: Re: NFS4 RPCGSS state protection (SP4_MACH_CRED) is not handled
Date: Mon, 15 Nov 2021 10:50:58 -0500 [thread overview]
Message-ID: <20211115155058.GA22737@fieldses.org> (raw)
In-Reply-To: <CANkgwevBKzrz_rDt0djguCXLsQWuTj8WwHNia0Bk+LSgDK-aQw@mail.gmail.com>
On Mon, Nov 15, 2021 at 04:37:10PM +0200, Volodymyr Khomenko wrote:
> Hello linux-nfs,
>
> We have the following NFS4 test (implemented using pynfs framework,
> not regular NFS4 client):
> 1. NFS4 client wants to use RPCGSS (Kerberos) and starts NFS4 traffic
> with NFS4 NULL request to establish RPCGSS context of a machine
> account.
> 2. During EXCHANGE_ID operation (client establishment), client asks
> for SP4_MACH_CRED state protection with
> spo_must_enforce/spo_must_allow fields set to values that are usually
> used by NFS4 clients (as defined by rfc5661).
> 3. CREATE_SESSION and RECLAIM_COMPLETE operations (required for NFS4
> session) are also done with RPCGSS and sevice=svc_gss_integrity - as
> required by spo_must_enforce option of state protection. If
> CREATE_SESSION is done with the wrong protection type, error is
> returned to the client (as expected).
> 4. However, when operations that are neither in spo_must_enforce nor
> in spo_must_allow list are done with the wrong protection type
> (flavor=AUTH_UNIX), NFS server accepts the request and replies by
> unexpected result (NFS4_OK) instead of error. In our test we used
> SEQUENCE + PUTROOTFH + GETFH compound operation with RPC credentials
> using flavor=AUTH_UNIX instead of RPCGSS.
>
> As for me, it looks like a security issue: client asked for state
> protection but man-in-the-middle can make unprotected requests for
> state-protected client and session. Expected behaviour from my side
> is:
> if NFS4 operation (like GETFH) from state-protected client is neither
> in spo_must_enforce nor in spo_must_allow lists of SP4_MACH_CRED, the
> server must fail the request if used credentials has a different
> flavor than RPCGSS (neither user GSS context nor machine account GSS
> context).
There are two separate questions here:
- Does the spec require that?
- Should the server do it anyway?
I think the answer to the first question is "no". If the requirement is
in the language you've quoted below, I'm not seeing it. As far as I can
tell, GSS is required only for operations in spo_must_enforce.
I haven't thought about #2 very much. If an operation's not in
spo_must_support, I think the server just checks the sec= option on the
export. If we were to require something more than that, I guess that
would affect the values returned from SECINFO and friends too.
I think the spec's meant to allow the client to use a combination of
krb5 and sys, and that current server behavior is correct, though it's
always possible there's some case I haven't thought through.
--b.
>
> >From rfc5661 (18.35.3. DESCRIPTION):
>
> o For SP4_MACH_CRED or SP4_SSV state protection:
>
> * The list of operations (spo_must_enforce) that MUST use the
> specified state protection. This list comes from the results
> of EXCHANGE_ID.
>
> * The list of operations (spo_must_allow) that MAY use the
> specified state protection. This list comes from the results
> of EXCHANGE_ID.
>
> ...
>
> o SP4_MACH_CRED. If spa_how is SP4_MACH_CRED, then the client MUST
> send the EXCHANGE_ID request with RPCSEC_GSS as the security
> flavor, and with a service of RPC_GSS_SVC_INTEGRITY or
> RPC_GSS_SVC_PRIVACY. If SP4_MACH_CRED is specified, then the
> client wants to use an RPCSEC_GSS-based machine credential to
> protect its state. The server MUST note the principal the
> EXCHANGE_ID operation was sent with, and the GSS mechanism used.
> These notes collectively comprise the machine credential.
>
> Please see pcap file of the traffic (attached) - EXCHANGE_ID with
> SP4_MACH_CRED is the packet #41 and problematic PUTROOTFH + GETFH
> request is the packet #49.
>
> User linux NFS4 server was:
> [centos@rnd-nfs4-srv01 ~]$ uname -a
> Linux rnd-nfs4-srv01 3.10.0-1062.18.1.el7.x86_64 #1 SMP Tue Mar 17
> 23:49:17 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
>
> [centos@rnd-nfs4-srv01 ~]$ cat /etc/redhat-release
> CentOS Linux release 7.7.1908 (Core)
next prev parent reply other threads:[~2021-11-15 15:51 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-15 14:37 NFS4 RPCGSS state protection (SP4_MACH_CRED) is not handled Volodymyr Khomenko
2021-11-15 15:50 ` J. Bruce Fields [this message]
2021-11-15 19:35 ` Volodymyr Khomenko
2021-11-15 19:46 ` J. Bruce Fields
2021-11-16 8:46 ` Volodymyr Khomenko
2021-11-16 14:28 ` J. Bruce Fields
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20211115155058.GA22737@fieldses.org \
--to=bfields@fieldses.org \
--cc=ilan.steinberg@vastdata.com \
--cc=linux-nfs@vger.kernel.org \
--cc=volodymyr@vastdata.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox