I was referring to a mobile client that passes the request via an external 
browser. That browser is capable of running SSL with server authentication only.

Phil
phil.h...@oracle.com




On 2011-04-04, at 12:08 PM, Skylar Woodward wrote:

> Maybe you can explain your example in more detail then? I'm assuming your 
> "client app" is a web application hosted on web server supporting only HTTP.
> 
> How does the nonce or request_id get to the provider as part of the 
> authorization request in your example?  (step 1)
> 
> 
> On Apr 4, 2011, at 3:03 PM, Phillip Hunt wrote:
> 
>> 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

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

Reply via email to