Picking nits, but maybe "established and well-tested X.509 library
(such as one used by an established TLS library)", noting that TLS
1.3 has added a new protocol feature that allows for TLS and X.509
library capabilities to be separately indicated (as would be needed
if they were organizationally separate).

-Ben

On Tue, Apr 17, 2018 at 10:48:04AM +0100, Neil Madden wrote:
> OK, here’s a stab at a new security considerations section on X.509 parsing 
> and validation:
> 
> ---
> 5.3 X.509 Certificate Parsing and Validation Complexity
> 
> Parsing and validation of X.509 certificates and certificate chains is 
> complex and implementation mistakes have previously exposed security 
> vulnerabilities. Complexities of validation include (but are not limited to) 
> [1][2][3]:
> - checking of Basic Constraints, basic and extended Key Usage constraints, 
> validity periods, and critical extensions;
> - handling of null-terminator bytes and non-canonical string representations 
> in subject names;
> - handling of wildcard patterns in subject names;
> - recursive verification of certificate chains and checking certificate 
> revocation.
> For these reasons, implementors SHOULD use an established and well-tested TLS 
> library for validation of X.509 certificate chains and SHOULD NOT attempt to 
> write their own X.509 certificate validation procedures.
> 
> [1] 
> https://www.cryptologie.net/article/374/common-x509-certificate-validationcreation-pitfalls/
>  
> <https://www.cryptologie.net/article/374/common-x509-certificate-validationcreation-pitfalls/>
> [2] http://www.cs.utexas.edu/~shmat/shmat_ccs12.pdf 
> <http://www.cs.utexas.edu/~shmat/shmat_ccs12.pdf>
> [3] https://tools.ietf.org/html/rfc5280 <https://tools.ietf.org/html/rfc5280> 
> 
> ---
> 
> NB - this blog post [1] is the best concise summary of attacks I could find. 
> Most of these attacks have been published as Black Hat talks and I can’t seem 
> to find definitive references or good survey papers (beyond [2], which is a 
> little older).
> 
> Let me know what you think,
> 
> Neil
> 
> 
> > On 12 Apr 2018, at 20:42, Brian Campbell <bcampb...@pingidentity.com> wrote:
> > 
> > Thanks Neil. 
> > 
> > Other than the potential metadata changes, which I'd like more WG input on 
> > and may raise in a new thread, I think I've got enough to make updates 
> > addressing your comments.  But please do send text for that Security 
> > Considerations bit, if you come up with something.  
> > 
> > On Thu, Apr 12, 2018 at 3:03 AM, Neil Madden <neil.mad...@forgerock.com 
> > <mailto:neil.mad...@forgerock.com>> wrote:
> > Hi Brian,
> > 
> > Thanks for the detailed responses. Comments in line below (marked with ***).
> > 
> > Neil
> > 
> > On Wednesday, Apr 11, 2018 at 9:47 pm, Brian Campbell 
> > <bcampb...@pingidentity.com <mailto:bcampb...@pingidentity.com>> wrote:
> > Thanks for the review and feedback, Neil. I apologize for my being slow to 
> > respond. As I said to Justin recently 
> > <https://mailarchive.ietf.org/arch/msg/oauth/cNmk8fSuxp37L-z8Rvr6_EnyCug>, 
> > I've been away from things for a while. Also there's a lot here to get 
> > through so took me some time. 
> > 
> > It looks like John touched on some of your comments but not all. I'll try 
> > and reply to them as best I can inline below. 
> > 
> > 
> > On Thu, Mar 29, 2018 at 9:18 AM, Neil Madden <neil.mad...@forgerock.com 
> > <mailto:neil.mad...@forgerock.com>> wrote:
> > Hi,
> > 
> > I have reviewed this draft and have a number of comments, below. ForgeRock 
> > have not yet implemented this draft, but there is interest in implementing 
> > it at some point. (Disclaimer: We have no firm commitments on this at the 
> > moment, I do not speak for ForgeRock, etc).
> > 
> > 1. https://tools.ietf.org/html/draft-ietf-oauth-mtls-07#section-3.1 
> > <https://tools.ietf.org/html/draft-ietf-oauth-mtls-07#section-3.1> defines 
> > a new confirmation method “x5t#S256”. However, there is already a 
> > confirmation method “jwk” that can contain a JSON Web Key, which itself can 
> > contain a “x5t#S526” claim with exactly the same syntax and semantics. The 
> > draft proposes:
> > 
> >         { “cnf”: { “x5t#S256”: “…” } }
> > 
> > but you can already do:
> > 
> >         { “cnf”: { “jwk”: { … , “x5t#S256”: “…” } } }
> > 
> > If the intent is just to save some space and avoid the mandatory fields of 
> > the existing JWK types, maybe this would be better addressed by defining a 
> > new JWK type which only has a thumbprint? e.g., { “kty”: “x5t”, “x5t#S256”: 
> > “…” }.
> > 
> > The intent of the x5t#S256 confirmation method was to be space efficient 
> > and straightforward while utilizing the framework and registry that RFC 
> > 7800 gives.  Even a new JWK type like that would still use more space. And 
> > I'd argue that the new confirmation method is considerably more 
> > straightforward than registering a new JWK type (and the implications that 
> > would have on JWK implementations in general) in order to use the existing 
> > "jwk" confirmation method.  
> > 
> > ***
> > OK, that is reasonable. Given that the draft says SHOULD rather than MUST 
> > for using this confirmation key method, I think it is currently allowed to 
> > use either representation. 
> > 
> >  
> > 
> > 2. I find the naming “mutual TLS” and “mTLS” a bit of a misnomer: it’s 
> > really only the client authentication that we are interested here, and the 
> > fact that the server also authenticates with a certificate is not hugely 
> > relevant to this particular spec (although it is to the overall security of 
> > OAuth). Also, TLS defines non-certificate based authentication mechanisms 
> > (e.g. TLS-SRP extension for password authenticated key exchange, PSK for 
> > pre-shared key authentication) and even non-X.509 certificate types 
> > (https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#tls-extensiontype-values-3
> >  
> > <https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#tls-extensiontype-values-3>).
> >  I’d prefer that the draft explicitly referred to “X.509 Client Certificate 
> > Authentication” rather than mutual TLS, and changed identifiers like 
> > ‘tls_client_auth’ 
> > (https://tools.ietf.org/html/draft-ietf-oauth-mtls-07#section-2.1.1 
> > <https://tools.ietf.org/html/draft-ietf-oauth-mtls-07#section-2.1.1>) to 
> > something more explicit like ‘tls_x509_pki_client_auth’.
> > 
> > This is especially confusing in section 3 on sender constrained access 
> > tokens, as there are two different servers involved: the AS and the 
> > protected resource server, but there is no “mutual” authentication between 
> > them, only between each of them and the client.
> > 
> > Choosing names and terminology is difficult and the "right" wording is 
> > often subjective. I believe that the current wording sufficiently conveys 
> > what is going on in the draft to most readers. Most readers thus far seem 
> > to agree. There is some text now that does say that the mutual auth in the 
> > draft is in fact X.509 client cert authn but, in the next revision, I'll 
> > look for other opportunities where it could be stated more clearly. 
> > 
> > *** Thanks. 
> > 
> >  
> > 
> > 3. The draft links to the TLS 1.2 RFC, while the original OAuth 2.0 RFC 
> > only specifies TLS 1.0. Is the intention that TLS 1.2+ is required? The 
> > wording in Section 5.1 doesn’t seem clear if this could also be used with 
> > TLS 1.0 or 1.1, or whether it is only referring to future TLS versions.
> > 
> > The reference to BCP 195 (which unfortunately the original OAuth 2.0 RFC 
> > doesn't have because it didn't exist then) is meant to account for changing 
> > versions and recommendations around TLS. Currently that BCP says TLS 1.2 is 
> > a must and suggests against 1.1 & 1.0 but doesn't outright prohibit them. 
> > 
> > *** OK, that seems good to me. 
> > 
> >  
> > 
> > 4. It might be useful to have a discussion for implementors of whether TLS 
> > session resumption (and PSK in TLS 1.3) and/or renegotiation impact the use 
> > of client certificates, if at all?
> > 
> > That might well be useful but I don't myself know what it would say. I've 
> > (maybe naively) figured those are deployment details that will just work 
> > out. Perhaps you could propose some text around such a discussion that the 
> > WG could consider? 
> > 
> >  ***
> > To be honest, when I raised this it was because I didn’t really know what 
> > the implications were. I’ve done some reading around and I think it should 
> > all just work - both session resumption and PSK-based resumption preserve 
> > the original client and server authentication context so we can assume that 
> > any presented client cert is still valid for the resumed session. So I 
> > think we can leave out any discussion of this and assume it works as 
> > expected. 
> > 
> > 
> > 
> > 5. Section 3 defines sender-constrained access tokens in terms of the 
> > confirmation key claims (e.g., RFC 7800 for JWT). However, the OAuth 2.0 
> > Pop Architecture draft defines sender constraint and key confirmation as 
> > different things 
> > (https://tools.ietf.org/html/draft-ietf-oauth-pop-architecture-08#section-6.2
> >  
> > <https://tools.ietf.org/html/draft-ietf-oauth-pop-architecture-08#section-6.2>).
> >  The draft should decide which of those it is implementing and if sender 
> > constraint is intended, then reusing the confirmation key claims seems 
> > misleading. (I think this mTLS draft is doing key confirmation so should 
> > drop the language about sender constrained tokens).
> > 
> > I will say again that choosing names and terminology is difficult...
> > 
> > Although I must admit that I started using "sender constrained" somewhat 
> > indiscriminately at first and it's just sort of stuck. At the time I was 
> > trying to incorporate bits of draft-sakimura-oauth-jpop in a way that might 
> > help bring on and keep the authors of that draft onboard with this mtls 
> > draft. In retrospect it looks like I did that part wrong anyway. But that 
> > was the thinking at the time and the history, for whatever it's worth. More 
> > recently, Nat was requesting that "sender constrained" be included in the 
> > title. So there's that too.  
> > 
> > In defense of my mistake, however, if there's a line between "sender 
> > constrained" and "key confirmation" tokens, it's a bit of a fuzzy line. And 
> > I'd argue that what this draft is doing pretty close to the line. 
> > 
> > But ultimately I think you are right that what this mtls draft is doing 
> > with access tokens is more accurately described with the key confirmation 
> > term. 
> > 
> > So, yes, the draft should probably drop (or at least minimize) the language 
> > about sender constrained. I'll do that in the next draft version, barring 
> > big objections from the WG.
> > 
> > The tricky thing with making that change is that there a client and server 
> > metadata parameters with the name 
> > "mutual_tls_sender_constrained_access_tokens" that should probably also 
> > change. But that would be a breaking change (of sorts anyway), which 
> > shouldn't be taken lightly at this stage. I feel that some explicit okays 
> > from the WG are needed before doing so (rough consensus stye) . Any WG 
> > members want to weigh in here and help get a "sense of the group" 
> > concerning changing those metadata names? 
> > 
> > *** Thanks. I agree this might cause compatibility issues. It is not a big 
> > issue for us, but might cause some confusion. 
> > 
> >  
> > 
> > 6. The OAuth 2.0 PoP Architecture draft says 
> > (https://tools.ietf.org/html/draft-ietf-oauth-pop-architecture-08#section-5 
> > <https://tools.ietf.org/html/draft-ietf-oauth-pop-architecture-08#section-5>):
> > 
> >          Strong, fresh session keys:
> > 
> >                 Session keys MUST be strong and fresh.  Each session 
> > deserves an
> >                 independent session key, i.e., one that is generated 
> > specifically
> >                 for the intended use.  In context of OAuth this means that 
> > keying
> >                 material is created in such a way that can only be used by 
> > the
> >                 combination of a client instance, protected resource, and
> >                 authorization scope.
> > 
> > 
> > However, the mTLS draft section 3 
> > (https://tools.ietf.org/html/draft-ietf-oauth-mtls-07#section-3 
> > <https://tools.ietf.org/html/draft-ietf-oauth-mtls-07#section-3>) says:
> > 
> >         The client makes protected resource requests as described in
> >         [RFC6750], however, those requests MUST be made over a mutually
> >         authenticated TLS connection using the same certificate that was 
> > used
> >         for mutual TLS at the token endpoint.
> > 
> > These two statements are contradictory: the OAuth 2.0 PoP architecture 
> > effectively requires a fresh key-pair to be used for every access token 
> > request, whereas this draft proposes reusing the same long-lived client 
> > certificate for every single access token and every resource server.
> > 
> > In the self-signed case (and even in the CA case, with a bit of work - 
> > e.g., https://www.vaultproject.io/docs/secrets/pki/index.html 
> > <https://www.vaultproject.io/docs/secrets/pki/index.html>) it is perfectly 
> > possible for the client to generate a fresh key-pair for each access token 
> > and include the certificate on the token request (e.g., as per 
> > https://tools.ietf.org/html/draft-ietf-oauth-pop-key-distribution-03#section-5.1
> >  
> > <https://tools.ietf.org/html/draft-ietf-oauth-pop-key-distribution-03#section-5.1>
> >  - in which case an appropriate “alg” value should probably be described). 
> > This should probably at least be an option.
> > 
> > This draft doesn't necessarily seek to align with the (long expired) PoP 
> > architecture draft.  Rather it is aiming to provide a pragmatic solution 
> > for PoP style access tokens and OAuth client auth using mTLS client 
> > certificates. 
> > 
> > That said, with the current draft, it's certainly possible for a client to 
> > update its cert more frequently, even so far as using a new one for each 
> > access token. The details of how that would work will vary some based on 
> > the token endpoint authentication method. But it's not precluded. 
> > 
> > *** You are right, the text doesn’t preclude that. I am happy with that 
> > solution. I suspect most people will deploy and be happy with reusing a 
> > long-lived cert for every access token, so this may not matter in practice. 
> >  
> > 
> > 7. The use of a single client certificate with every resource server (RS) 
> > should be called out in a Privacy Considerations section, as it allows 
> > correlation of activity.
> > 
> > Practically speaking the access tokens being presented likely already have 
> > correlatable info in them about the client as well as the user. I don't 
> > know that there's much of a (new) concern in reality. If you feel this 
> > concern is unique and import enough though, perhaps there's some text you'd 
> > like to propose for a Privacy Considerations section that the WG could 
> > consider? I mean, I guess it doesn't hurt to mention it but I would like to 
> > avoid overstating the issue.  
> > 
> > *** On reflection, I am going to withdraw this comment. As you say there 
> > are other ways to correlate clients. The privacy issue would mainly arise 
> > in the context of dynamic client registration e.g., a pattern I’ve seen 
> > described where every instance of a mobile app does dynamic client 
> > registration to avoid including credentials directly in the app bundle. 
> > This would make clients one-to-one with users. But (a) those apps are 
> > fairly unlikely to be using TLS certs, and (b) that is more of a privacy 
> > consideration for dynamic client registration rather than this draft. 
> > 
> >  
> > 
> > 8. This is maybe a more general point, but RFC 6750 defines the 
> > Authorization: Bearer scheme (https://tools.ietf.org/html/rfc6750#section-2 
> > <https://tools.ietf.org/html/rfc6750#section-2>) for a client to 
> > communicate it’s access token to the RS in a standard way. As 
> > sender-constrained access tokens are not strictly bearer tokens any more, 
> > should this draft also register a new scheme for that? Should there be a 
> > generic PoP scheme?
> > 
> > The thinking and general consensus (in this draft as well as the OAuth 
> > token binding work) has been that continuing to use the RFC 6750 scheme 
> > while putting the "not strictly bearer" stuff in (or referenced by) the 
> > token itself will be easier on deployment and implementation. And better 
> > for adoption as a result. I believe some early implementation work has 
> > borne that out too. 
> > 
> >  *** OK. 
> > 
> > 
> > 9. The Security Considerations should really make some mention of the long 
> > history of attacks against X.509 certificate chain validation, e.g. failure 
> > to check the “CA” bit in the basic constraints, errors in parsing DNs, etc. 
> > It should be strongly suggested to use an existing TLS library to perform 
> > these checks rather than implementing your own checks. This relates to 
> > Justin’s comments around DN parsing and normalisation.
> > 
> > Suggesting to use an existing TLS library is certainly sound advice and I 
> > sort of felt is implied in the draft. But saying so more 
> > strongly/explicitly might be worthwhile.  And pointing to historical 
> > reasons to do so would probably be good too.  Could you propose a new 
> > Security Considerations section or maybe augmentation of §5.2 with that 
> > content? 
> > 
> > *** I’ll try and come up with some text. 
> > 
> >  
> > 
> > 10. The PKI client authentication method 
> > (https://tools.ietf.org/html/draft-ietf-oauth-mtls-07#section-2.1 
> > <https://tools.ietf.org/html/draft-ietf-oauth-mtls-07#section-2.1>) makes 
> > no mention at all of certificate revocation and how to handle checking for 
> > that (CRLs, OCSP - with stapling?). Neither does the Security 
> > Considerations. If this is a detail to be agreed between then AS and the CA 
> > (or just left up to the AS TLS stack) then that should perhaps be made 
> > explicit. Again, there are privacy considerations with some of these 
> > mechanisms, as OCSP requests are typically sent in the clear (plain HTTP) 
> > and so allow an observer to see which clients are connecting to which AS.
> > 
> > I didn't think that a TLS client could do OCSP stapling?
> > 
> > *** I think you are right about this. I always assumed it was symmetric 
> > (and I think it technically could work), but the spec only talks about 
> > stapling in the server-side of the handshake. 
> > 
> > That aside, revocation checking (how and even if) is something that's at 
> > the discretion of the AS. I can add something in §2.1 to say that more 
> > explicitly. 
> > 
> > *** Thanks. 
> > 
> > 
> > 
> > 11. The same comment applies to how the protected resource checks for 
> > revocation of the certificate presented during sender constrained access 
> > token usage. Should the RS make its own revocation checks based on the 
> > information in the certificate presented, or should it trust the 
> > certificate while the access token is still valid? If the latter case, is 
> > the AS responsible for revoking any access tokens whose certificate have 
> > been revoked (if so, should it be doing an OCSP call on every token 
> > introspection request, and should the RS be passing on the 
> > certificate/serial number on that request)? If the Client request uses OCSP 
> > Stapling (https://en.wikipedia.org/wiki/OCSP_stapling 
> > <https://en.wikipedia.org/wiki/OCSP_stapling>) how can the RS verify the 
> > signature on that if it does not have a separate trust relationship with 
> > the CA already?
> > 
> > The draft effectively uses cert mtls at the RS as a proof-of-possession 
> > method only and not as authentication. So revocation checking isn't really 
> > applicable. In specific deployment situations, I suppose an RS could check 
> > revocation. But that'd be a deployment decision for the RS that's beyond 
> > the scope of this draft. 
> > 
> > *** OK, that is an interesting observation. If either the client or AS 
> > suspect the key has been compromised they can revoke the access token(s) 
> > instead. 
> >  
> > 
> > 
> > 12. The use of only SHA-256 fingerprints means that the security strength 
> > of the sender-constrained access tokens is limited by the collision 
> > resistance of SHA-256 - roughly “128-bit security" - without a new 
> > specification for a new thumbprint algorithm. An implication of this is 
> > that is is fairly pointless for the protected resource TLS stack to ever 
> > negotiate cipher suites/keys with a higher level of security. In more 
> > crystal ball territory, if a practical quantum computer becomes a 
> > possibility within the lifetime of this spec, then the expected collision 
> > resistance of SHA-256 would drop quadratically, allowing an attacker to 
> > find a colliding certificate in ~2^64 effort. If we are going to pick just 
> > one thumbprint hash algorithm, I would prefer we pick SHA-512.
> > 
> > The idea behind haveing just one thumbprint hash algorithm was to keep 
> > things simple. And SHA-256 seems good enough for the reasonably foreseeable 
> > future (and space aware). Also a new little spec to register a different 
> > hash algorithm, should the need arise, didn't seem particularity onerous. 
> > 
> > That was the thinking anyway. Maybe it is too short sighted though?
> > 
> > I do think SHA-256 should stay regardless. 
> > 
> > But the draft could also define SHA-512 (and maybe others). What do you and 
> > WG folks think about that?
> > 
> > *** Yes please. 
> > 
> > It would probably then be useful for the metadata in §3.3 and §3.4 to 
> > change from just boolean values to something to convey what hash alg/cnf 
> > method the client expects and the list of what the server supports. That's 
> > maybe something that should be done anyway. That'd be a breaking change to 
> > the metadata. But there's already another potential breaking change 
> > identified earlier in this message. So maybe it's worth doing...
> > 
> > How do folks feel about making this kind of change? 
> > 
> > 
> > 
> > 
> >  
> > Cheers,
> > 
> > Neil
> > 
> > 
> > > On 19 Mar 2018, at 22:34, Rifaat Shekh-Yusef <rifaat.i...@gmail.com 
> > > <mailto:rifaat.i...@gmail.com>> wrote:
> > >
> > > All,
> > >
> > > As discussed during the meeting today, we are starting a WGLC on the MTLS 
> > > document:
> > > https://tools.ietf.org/html/draft-ietf-oauth-mtls-07 
> > > <https://tools.ietf.org/html/draft-ietf-oauth-mtls-07>
> > >
> > > Please, review the document and provide feedback on any issues you see 
> > > with the document.
> > >
> > > The WGLC will end in two weeks, on April 2, 2018.
> > >
> > > Regards,
> > >  Rifaat and Hannes
> > >
> > > _______________________________________________
> > > OAuth mailing list
> > > OAuth@ietf.org <mailto:OAuth@ietf.org>
> > > https://www.ietf.org/mailman/listinfo/oauth 
> > > <https://www.ietf.org/mailman/listinfo/oauth>
> > 
> > 
> > _______________________________________________
> > OAuth mailing list
> > OAuth@ietf.org <mailto:OAuth@ietf.org>
> > https://www.ietf.org/mailman/listinfo/oauth 
> > <https://www.ietf.org/mailman/listinfo/oauth>
> > 
> > 
> > 
> > CONFIDENTIALITY NOTICE: This email may contain confidential and privileged 
> > material for the sole use of the intended recipient(s). Any review, use, 
> > distribution or disclosure by others is strictly prohibited.  If you have 
> > received this communication in error, please notify the sender immediately 
> > by e-mail and delete the message and any file attachments from your 
> > computer. Thank you.
> > 
> > 
> > CONFIDENTIALITY NOTICE: This email may contain confidential and privileged 
> > material for the sole use of the intended recipient(s). Any review, use, 
> > distribution or disclosure by others is strictly prohibited.  If you have 
> > received this communication in error, please notify the sender immediately 
> > by e-mail and delete the message and any file attachments from your 
> > computer. Thank you.
> 

> _______________________________________________
> OAuth mailing list
> OAuth@ietf.org
> https://www.ietf.org/mailman/listinfo/oauth

_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to