It doesn't require client side ssl. Phil
Sent from my phone. On 2011-04-04, at 11:47, Skylar Woodward <sky...@kiva.org> wrote: > How does the client app transmit the nonce (random number) to the web browser > for redirect to the provider? If the client app does not support HTTPS, it > can't set up a secure session on its own to give the browser/user something > to pass on during the provider authorization. > > To me, this is nothing different that a unique value of "state" which robust > clients will already use to differentiate request flows. Such a state > variable would be exposed both on its way and back of the provider's redirect. > > > In any case, I see HTTPS as the simple solution here. I question if it is in > the scope of OAuth to provide a mechanism to the community to protect against > such MITM attacks between a hosted web application and the web browser. If > the nature of the data requires such protection, the app developer (or the > provider) can work to provide such security outside of HTTPS. In the right > context, tunneling customer traffic through a provider-provided VPN could be > considered a reasonable protection for the cases folks have outlined. It > just doesn't seem like a popular need at this point, and there seem to be no > easy wins for hosted clients unable to register with a certificate authority. > > > > On Apr 4, 2011, at 2:23 PM, Phil Hunt wrote: > >> I have been wondering if we can combine a couple of things such as a client >> generated transaction secret and use limited TLS to achieve a fix. Note: >> this would address a hacker sniffing a returned authorization code, but it >> probably does little for the MITM scenario that was also outlined. >> >> 1. The client app generate a random number or sequence of characters, lets >> call it "request_id", then that value would be included and securely (using >> TLS) transmitted in the authorization request. >> 2. The authorization server does its usual thing and returns, preferably >> securely but not necessarily, the authorization code to the client app. >> 3. Upon requesting an access_token, the client app also includes the same >> request_id in its secure request to the token endpoint. >> 4. The token server verifies that the "request_id" matches the request_id >> supplied in the authorize request (in addition to all the other processing). >> >> Since both requests are sent securely a sniffing client cannot obtain the >> client request_id even though it might be able to obtain the authorization >> code being returned. >> >> What this might allow is that the client can transmit a secret protected by >> TLS in its outbound request, but can accept non-secure delivery of the >> authorization code. The token server then has a means to verify that the >> client exchanging the authorization code is the same one that made the >> initial request. >> >> This is off the top of my head, I am sure the proposal is likely not yet a >> complete solution, but maybe someone can build on that. >> >> Phil >> phil.h...@oracle.com >> >> >> >> >> On 2011-04-04, at 10:52 AM, Oleg Gryb wrote: >> >>> After looking into exiting (and working) implementations of OAuth 1.0 in >>> mobile world I have strong doubts about possibility of implementing what >>> was suggested in option #3. >>> >>> In my view, two conditions are needed to achieve that: >>> >>> 1. Something unique stored on a mobile client. >>> 2. That something should be a secret, so other (malicious) clients could >>> not reuse it. >>> >>> Distribution of that "unique secrets" should be automated in the mobile >>> world and is usually included to mobile application >>> activation process, but that activation process can't make conditions 1 & 2 >>> above met in full, becuase: >>> >>> 1. As soon as secrets are distributed to a mobile device they are not quite >>> secret any more >>> 2. As soon as the secret becomes known, a simulator or other mobile device >>> can be used to spoof the traffic >>> >>> I would consider option #3 as an illusion until somebody comes up with a >>> solution that would address the described issues. >>> >>> BTW, the draft of "OAuth Dynamic Client Registration Protocol" >>> (http://tools.ietf.org/html/draft-oauth-dyn-reg-v1-00) has expired on Feb. >>> 12 and I didn't see any attempts to re-vitalise it. I think it would be >>> better and more beneficial for the community to return to this protocol >>> rather than inventing a new method of "mutual authentication". >>> >>> >>> >>> >>> From: Phil Hunt <phil.h...@oracle.com> >>> To: Prateek Mishra <prateek.mis...@oracle.com> >>> Cc: OAuth WG <oauth@ietf.org> >>> Sent: Mon, April 4, 2011 9:52:17 AM >>> Subject: Re: [OAUTH-WG] Authorization code security issue (reframed) >>> >>> Apologies for the long message (again). I have attempted to sum things up >>> and bring out the issue without using any existing service or party as an >>> example of problems. It seems some have taken offence to my previous >>> message pushing for a solution. As a result it was not productive. I >>> apologize. Hopefully this message sticks to the issue of developing an >>> appropriate counter measure to threats as that is my only intent. >>> >>> As Prateek clarified in the previous message to Francisco, SAML also uses >>> SHOULD, but artifact security is achieved by an additional >>> counter-measure... >>>> The identity provider MUST ensure that only the service provider to whom >>>> the <Response> message has >>>> been issued is given the message as the result of an <ArtifactResolve> >>>> request. >>> >>> Yet, in OAuth the client app is not unique for a particular set of client >>> credentials we currently have no way to verify that the correct client got >>> the code. This has been the mechanism that the community has been assuming >>> solves the problem. Client credentials do not always work to protect the >>> authorization code because in OAuth you can have many many clients with the >>> same credential. For example everyone with the same mobile app likely has >>> the same client credential. Thus a copy of a valid client app which is easy >>> to obtain becomes the hacker's attack vector. So, the client credential is >>> not an effective counter in this case. >>> >>> Several have commented that there are other supplementary techniques for >>> protection, but in my view, most of them work indirectly and/or depend on >>> correct collective configuration of several components. Some of these are: >>> tokens may be used one time; tokens are invalidated if used a second time, >>> tokens are sufficiently unique, etc. All of these will help. But none are >>> designed to directly counter the attack. In fact the best one - token >>> invalidation carries the additional problem of unreliable service for the >>> legitimate client. The hacker can deny service to anyone in the room simply >>> by re-using any tokens seen. >>> >>> From my perspective, the "easy" solution was to increase the requirements >>> on TLS from SHOULD to MUST to prevent eavesdropping of the code. This was >>> echoed by several others. I agree this will not work for everyone. Many >>> have made strong arguments for why they can't use it. But without a MUST we >>> are still missing a direct counter to the threat. >>> >>> I don't want to change things at this late date, but maybe this means >>> introducing some form of mutual authentication -- some way for the >>> requesting client "instance" to prove that they are the copy eligible to >>> use an authorization code. >>> >>> To end this discussion, I propose we vote on the proposal from Eran plus >>> one new option... >>> 1. Include a normative MUST use TLS for the client redirection URI endpoint. >>> 2. Include a normative SHOULD use TLS for the client redirection URI >>> endpoint with strong language explaining the various attacks possible if >>> the endpoint is not made secure. >>> 3. Keep current language of SHOULD, but develop a direct counter-measure to >>> token theft such as specific client instance identification or mutual >>> authentication. >>> >>> Phil >>> phil.h...@oracle.com >>> >>> >>> >>> >>> On 2011-04-04, at 8:57 AM, Prateek Mishra wrote: >>> >>>> Francisco, >>>> >>>> You are right, I was in error to suggest that it was a MUST. >>>> >>>> I think my main concern was that security considerations should not be >>>> based on polling developers/deployers of an existing or legacy protocol. >>>> >>>> SAML does include some additional countermeasures though - for example >>>> (lines 595-596, profiles document) - that specifically deal with the >>>> artifact being leaked - >>>> >>>> [quote] >>>> The identity provider MUST ensure that only the service provider to whom >>>> the <Response> message has >>>> been issued is given the message as the result of an <ArtifactResolve> >>>> request. >>>> [\quote] >>>> >>>> - prateek >>>>> Hi Prateek, >>>>> >>>>>> I would like to strongly disagree with this proposal. >>>>>> >>>>>> It amounts to explicitly making OAuth 2.0 insecure so as to >>>>>> satisfy some mysterious and unspecified set of legacy OAuth >>>>>> 1.0 deployments. >>>>>> >>>>>> The SAML web SSO (artifact) profile - which shares many >>>>>> characteristics with the initial steps in OAuth - requires >>>>>> precisely such a counter-measure and is widely implemented >>>>>> in 1000s of deployments. >>>>> >>>>> What counter-measure is this? Can you provide a reference? >>>>> Section 4.1.3.5 of >>>>> http://docs.oasis-open.org/security/saml/v2.0/saml-profiles-2.0-os.pdf >>>>> recommends TLS but does not require it. >>>>> >>>>> Francisco >>>>> >>>>> >>> >>> >> >> _______________________________________________ >> 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