Re: [kitten] rpcsec-gssv3 multi-principal authentication

"Adamson, Andy" <William.Adamson@netapp.com> Wed, 03 September 2014 16:35 UTC

Return-Path: <William.Adamson@netapp.com>
X-Original-To: kitten@ietfa.amsl.com
Delivered-To: kitten@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 201591A0077; Wed, 3 Sep 2014 09:35:12 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -7.57
X-Spam-Level:
X-Spam-Status: No, score=-7.57 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_HI=-5, RP_MATCHES_RCVD=-0.668, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001] autolearn=ham
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ZZMV-QOeWZe8; Wed, 3 Sep 2014 09:35:09 -0700 (PDT)
Received: from mx12.netapp.com (mx12.netapp.com [216.240.18.77]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 8BE4E1A0004; Wed, 3 Sep 2014 09:35:09 -0700 (PDT)
X-IronPort-AV: E=Sophos;i="5.04,458,1406617200"; d="scan'208";a="186077895"
Received: from hioexcmbx06-prd.hq.netapp.com ([10.122.105.39]) by mx12-out.netapp.com with ESMTP; 03 Sep 2014 09:35:07 -0700
Received: from HIOEXCMBX08-PRD.hq.netapp.com (10.122.105.41) by hioexcmbx06-prd.hq.netapp.com (10.122.105.39) with Microsoft SMTP Server (TLS) id 15.0.913.22; Wed, 3 Sep 2014 09:34:57 -0700
Received: from HIOEXCMBX08-PRD.hq.netapp.com ([::1]) by hioexcmbx08-prd.hq.netapp.com ([fe80::3405:c28f:f61a:e768%21]) with mapi id 15.00.0913.011; Wed, 3 Sep 2014 09:34:45 -0700
From: "Adamson, Andy" <William.Adamson@netapp.com>
To: Benjamin Kaduk <kaduk@MIT.EDU>
Thread-Topic: rpcsec-gssv3 multi-principal authentication
Thread-Index: AQHPvIu/oTjXtXsIRU6yu54YN8rMk5vunpMAgAGHnoA=
Date: Wed, 03 Sep 2014 16:34:45 +0000
Message-ID: <7F59B011-C2A7-4222-80A9-5FDC49901145@netapp.com>
References: <DC941FEB-725A-49E1-8C38-FF765454827C@netapp.com> <20140730163006.GG26316@fieldses.org> <alpine.GSO.1.10.1407311902230.21571@multics.mit.edu> <9BF7E3EA-59DB-4B91-A27A-659790AED727@netapp.com> <alpine.GSO.1.10.1408030153400.21571@multics.mit.edu> <alpine.GSO.1.10.1408201123060.21571@multics.mit.edu> <alpine.GSO.1.10.1409021306240.21571@multics.mit.edu>
In-Reply-To: <alpine.GSO.1.10.1409021306240.21571@multics.mit.edu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-mailer: Apple Mail (2.1874)
x-originating-ip: [10.122.56.79]
Content-Type: text/plain; charset="Windows-1252"
Content-ID: <E521F541AB023B49A2F1F51AB3AAB9C2@hq.netapp.com>
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
Archived-At: http://mailarchive.ietf.org/arch/msg/kitten/kyrHzh3kThGb_GTX6WSKdL7OQDw
Cc: "kitten@ietf.org" <kitten@ietf.org>, "Adamson, Andy" <William.Adamson@netapp.com>, NFSv4 <nfsv4@ietf.org>
Subject: Re: [kitten] rpcsec-gssv3 multi-principal authentication
X-BeenThere: kitten@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: Common Authentication Technologies - Next Generation <kitten.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/kitten>, <mailto:kitten-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/kitten/>
List-Post: <mailto:kitten@ietf.org>
List-Help: <mailto:kitten-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/kitten>, <mailto:kitten-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 03 Sep 2014 16:35:12 -0000

On Sep 2, 2014, at 1:13 PM, Benjamin Kaduk <kaduk@MIT.EDU> wrote:

> It would be nice if someone could confirm or contradict my conclusion that
> the triple of (opaque inner handle, nonce, mic) is a bearer token for
> performing multi-principal authentication.
> 
> -Ben

Hi Ben 

Vacation. Thanks for the review. Comments inline...
> 
> On Wed, 20 Aug 2014, Benjamin Kaduk wrote:
> 
>> I'm starting a new thread for this, since I think it is the most important
>> item revealed by my review, but it seems to have been lost amidst the
>> other discussions.
>> 
>> On Sun, 3 Aug 2014, Benjamin Kaduk wrote:
>> 
>>> On Fri, 1 Aug 2014, Adamson, Andy wrote:
>>> 
>>>> 
>>>> I have always thought of Multi-principal authentication in terms of it’s use
>>>> in NFSv4.2 Inter server to server copy, where all of the RPCSEC_GSS_CREATE
>>>> messages MUST use rpc_gss_svc_privacy’…. Good catch Bruce.
>>>> 
>>>> So for this attack to occur the rgmp_nonce must be re-used by the same
>>>> rgmp_handle (same user-principal). Insisting on using a random number
>>>> generator to create nounce could be by-passed by a bad implementation...
>>>> 
>>>> Bruces suggestion of using the new reply verifier data (rpc-header) should
>>>> do the trick. Any objections to this approach?
>> 
>> I don't think I correctly understand this proposal.  Can someone try to
>> explain it in more detail, please?
>> 
>>> If I understand correctly, the child RPCSEC contex handle will use the same
>>> GSS context as the parent RPCSEC context handle (i.e., using the host's
>>> credentials, not the user's credentials).  This means that when creating the
>>> child RPCSEC context, there must be some proof that the RPC client controls
>>> the GSS context corresponding to the inner RPCSEC context handle, since the
>>> child RPCSEC context will perform operations acting as the user specified by
>>> the GSS context of the inner RPCSEC context.
>>> 
>>> My reading of the current draft is that the only attempt to do this is by
>>> presenting a random nonce and a GSS_GetMIC of that nonce, created using the
>>> GSS context of the inner RPCSEC context.  The server must verify that the MIC
>>> is a valid mic, but I do not see any other binding to this GSS context.  In
>>> particular, the nonce+MIC could be eavesdropped on the wire, and inserted into
>>> an attacker's RPCSEC_GSS_CREATE call, where the attacker provides its own
>>> parent RPCSEC context

draft-08 section 2.6.1.1.  Multi-principal Authentication

   RPCSEC_GSSv3 clients MAY assert a multi-principal authentication of
   the client host principal and a user principal.  This feature is
   needed, for example, when a client wishes to use authority assertions
   that the server may only grant if a user and a client are
   authenticated together to the server.  Thus a server may refuse to
   grant requested authority to a user acting alone (e.g., via an
   unprivileged user-space program), or to a client acting alone (e.g.
   when a client is acting on behalf of a user) but may grant requested
   authority to a client acting on behalf of a user if the server
   identifies the user and trusts the client.

   It is assumed that an unprivileged user-space program would not have
   access to client host credentials needed to establish a GSS-API
   security context authenticating the client to the server, therefore
   an unprivileged user-space program could not create an RPCSEC_GSSv3
   RPCSEC_GSS_CREATE message that successfully binds a client and a user
   security context.

I believe the above last paragraph addresses this issue.  Do we need to make this section stronger, or perhaps clarify?

Indeed, an attacker that has it’s own parent RPCSEC context ( e.g. a proveable client machine-credential context ) can have her way.

This is nothing new as an attacker with such a context has ‘root’ for that machine in the RPCSEC world and can do a whole bunch of mischief :)

That said, I suppose we could replace the nonce with the RPCSEC_GSS_CREATE reply verifier data and prevent such an attacker from acting on behalf of a user.

—>Andy


>>> but does not actually have an inner context at all.  The
>>> attacker can reuse the valid nonce+MIC that it has intercepted, which will
>>> validate correctly on the server, and the server will issue a child RPCSEC
>>> context that acts as the user indicated by the GSS context of the inner RPCSEC
>>> context but uses the key material from the attacker's GSS context.
>> 
>> Basically, my reading is that the triple of (opaque inner handle, nonce,
>> mic) is a bearer token that is valid as long as the inner rpcsec context
>> is valid, as specified in the -08.  The inner handle is only used to
>> lookup the GSS security context to use to verify the MIC of the nonce, so
>> if all three are passed together, there is no binding to anything else
>> that I can see.
>> 
>> An attacker who gets a copy of this bearer token could then use it to
>> create its own child context from a parent context that the attacker
>> controls, and perform actions as the user corresponding to the GSS
>> security context of the inner context handle.
>> 
>> -Ben