I will follow up with you off-list to chat further, thanks!

Aaron

On Thu, Jun 16, 2022 at 5:50 AM Yannick Majoros <yann...@valuya.be> wrote:

> Hello Aaron,
>
> I'd be happy to contribute. What would be an appropriate time to talk
> about this?
>
> Thanks
>
> Le jeu. 16 juin 2022 à 04:56, Aaron Parecki <aa...@parecki.com> a écrit :
>
>> These are exactly the kinds of things I would expect to see in the
>> Browser-based app BCP. There isn't one best way to do things, but it's
>> worth pointing out the options and the tradeoffs of each. Some people may
>> not share the same concerns as others, but it's useful to point out the
>> different options and the tradeoffs. If you're willing to contribute to the
>> doc, I'd be happy to set up some time to talk offline about how to make
>> that happen.
>>
>> Aaron
>>
>>
>> On Wed, Jun 15, 2022 at 4:08 AM Yannick Majoros <yann...@valuya.be>
>> wrote:
>>
>>> Hello,
>>>
>>> >>Best practices according to whom?
>>>
>>> >This list, and documents such as:
>>> https://datatracker.ietf.org/doc/html/draft-ietf-oauth-security-topics
>>>
>>> According to the explanation about rfc-6749 / oauth 2.1 and the PKCE
>>> example, it seems that document would indeed be the right place to document
>>> security issues and their workarounds.
>>>
>>> But I don't see any justification for section 6 in that document (which
>>> is also a draft BTW). That document seems to not say much about token
>>> storage, unless I'm mistaken.
>>>
>>> I am aware of discussions about potential issues about in-browser token
>>> storage and the risks they involve, mostly in case of successful XSS. As
>>> you all know, the point is also quite controversial, as there are also
>>> voices arguing that this isn't the main attention point: in case of XSS,
>>> the user is actually impersonated anyway and actually getting hold of the
>>> token is a moot point, as accessing all protected resources is then
>>> trivial, the client having all necessary technical means for that.
>>>
>>> If protecting tokens from the client (typically, javascript frontend)
>>> after successful XSS is still a point, which it seems to be for some people
>>> according to various widespread resources (though not universally so),
>>> there are options for that which are at least as secure as a stateful BFF.
>>>
>>> For example, a service worker can effectively isolate tokens and call a
>>> resource server in a safe way, with the frontend having no token access at
>>> all:
>>> [image: image.png]
>>>
>>> OTOH, a commonly (though not consensual) recommended solution is a
>>> stateful BFF. Popular common sense is that it's safe to leakage because of
>>> HTTPOnly cookies, but that's actually not the case. Here is an example of
>>> exploit, once XSS has happened (which is the actual problem, not
>>> javascript-accessible token storage):
>>> [image: image.png]
>>> This attack isn't even specific to HTTPOnly cookies: it can be made to
>>> target any form of secret (tokens or cookies) in an *authorization code*
>>> flow. But this illustrates that cookies aren't inherently safer than, say,
>>> a *service worker*.
>>>
>>> For these reasons, I suggest:
>>> - documenting that kind of security issues in the *OAuth 2.0 Security
>>> Best Current Practice* document
>>> - recommend more alternatives (e.g. service/web workers, among others),
>>> or instead even focusing attention on XSS
>>> - rewriting section 6 to not mislead people into thinking that pure
>>> frontend / pure SPA solutions are inherently less safe than cookie-based
>>> approaches.
>>> - generally focusing on documenting attacks and countermeasures, as
>>> https://datatracker.ietf.org/doc/html/draft-ietf-oauth-security-topics is
>>> doing quite well :-)
>>>
>>> How can we improve the current situation? Would it be useful to list and
>>> detail some attacks that are not documented in the *OAuth 2.0 Security
>>> Best Current Practice* document? Would submitting a new draft for
>>> frontends be a good idea?
>>>
>>> Best regards,
>>>
>>> Yannick Majoros
>>>
>>> Le mer. 15 juin 2022 à 04:11, Dick Hardt <dick.ha...@gmail.com> a
>>> écrit :
>>>
>>>>
>>>>
>>>> Best practices according to whom?
>>>>
>>>>
>>>> This list, and documents such as:
>>>> https://datatracker.ietf.org/doc/html/draft-ietf-oauth-security-topics
>>>>
>>>> Wouldn't the concerns of section 6 of your draft better be parts of a
>>>> follow-up or addendum to rfc-6749?
>>>>
>>>>
>>>> OAuth 2.1 has no normative changes over OAuth 2.0, and includes all the
>>>> docs and learnings that have come out since OAuth 2.0 was published.
>>>>
>>>> Creating a new version allows implementors to reference OAuth 2.1 and
>>>> deployments will know that it is compliant with all the learnings rather
>>>> than having to reference numerous, sometimes conflicting documents.
>>>>
>>>> A good example is PKCE -- it is best practice and deals with the
>>>> security concerns -- but trying to understand what to do reading both 6749
>>>> and 7636 is non-trivial for many.
>>>>
>>>> While adding an addendum would solve a few of the issues addressed by
>>>> the 2.1 doc -- the WG decided that the 2.1 doc was the approach to take.
>>>>
>>>> /Dick
>>>>
>>>> On Tue, Jun 14, 2022 at 12:12 AM Yannick Majoros <yann...@valuya.be>
>>>> wrote:
>>>>
>>>>> Hello Aaron and anyone in the group,
>>>>>
>>>>> Could you further comment on my last email?
>>>>>
>>>>> I'd have an additional question: in
>>>>> https://datatracker.ietf.org/doc/html/rfc6749#section-10 there is a
>>>>> list of security considerations. Wouldn't the concerns of section 6 of 
>>>>> your
>>>>> draft better be parts of a follow-up or addendum to rfc-6749?
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Yannick
>>>>>
>>>>>
>>>>> Le sam. 11 juin 2022 à 20:55, Yannick Majoros <yann...@valuya.be> a
>>>>> écrit :
>>>>>
>>>>>> >> There is a lot of debate around the question. Are these really
>>>>>> security best practices?
>>>>>> >The intent of this draft is to document the best practices today. If
>>>>>> >anything in the document is not the best way to do something given
>>>>>> the
>>>>>> >documented constraints, then that should be revisited.
>>>>>>
>>>>>> Best practices according to whom? There are various opinions on the
>>>>>> subject, it's not black and white, so wouldn't it be best to be factual,
>>>>>> e.g. describing attack X and counter-measures, and how solution Y is the
>>>>>> best known tradeoff for that case.
>>>>>>
>>>>>> I indeed suggest section 6 to be revisited, as this the options
>>>>>> described there are neither universally agreed upon, neither the 
>>>>>> best/only
>>>>>> options to secure an application.
>>>>>>
>>>>>> I'd be happy to contribute, btw. I'm in the process of completing a
>>>>>> kind of matrix which associates all known options (BFF, local/session
>>>>>> storage/service worker/web worker/closure/token in a cookie/...), the
>>>>>> security issues involved and their impact. I do also have POCs and 
>>>>>> further
>>>>>> documentation for each solution, along with attack descriptions and their
>>>>>> mitigations.
>>>>>>
>>>>>> > Did you consider using a service worker or other frontend solutions
>>>>>> (web worker, closure...) for safe token storage? That would make a pure
>>>>>> frontend solution at least as safe as cookies.
>>>>>>
>>>>>> This has been on my list to write up as another option.
>>>>>>
>>>>>> Great. I'd be interested in providing input here. Would it be useful?
>>>>>>
>>>>>> >> What if the backend is stateless and so doesn't have any session
>>>>>> >You would need to use an encrypted session cookie to avoid storing
>>>>>> >server-side state, but this is available in many web frameworks.
>>>>>>
>>>>>> Isn't that encrypted session cookie a kind of token? :-) Is this a
>>>>>> best practice?
>>>>>>
>>>>>> Best regards,
>>>>>>
>>>>>> Yannick
>>>>>>
>>>>>> Le ven. 10 juin 2022 à 23:02, Aaron Parecki <aa...@parecki.com> a
>>>>>> écrit :
>>>>>>
>>>>>>> Hi Yannick, answers inline:
>>>>>>>
>>>>>>> > There is a lot of debate around the question. Are these really
>>>>>>> security best practices?
>>>>>>>
>>>>>>> The intent of this draft is to document the best practices today. If
>>>>>>> anything in the document is not the best way to do something given
>>>>>>> the
>>>>>>> documented constraints, then that should be revisited.
>>>>>>>
>>>>>>> > Did you consider using a service worker or other frontend
>>>>>>> solutions (web worker, closure...) for safe token storage? That would 
>>>>>>> make
>>>>>>> a pure frontend solution at least as safe as cookies.
>>>>>>>
>>>>>>> This has been on my list to write up as another option.
>>>>>>>
>>>>>>> > Why would a cookie be safer, as this opens CSRF attacks that would
>>>>>>> make the same actions available to a hacker that would be possible by
>>>>>>> getting hold of a token (which might even be more difficult)?
>>>>>>>
>>>>>>> The assumption is that you would also protect against CSRF attacks
>>>>>>> like any typical web application.
>>>>>>>
>>>>>>> > What if the backend is stateless and so doesn't have any session
>>>>>>>
>>>>>>> You would need to use an encrypted session cookie to avoid storing
>>>>>>> server-side state, but this is available in many web frameworks.
>>>>>>>
>>>>>>> Aaron
>>>>>>>
>>>>>>>
>>>>>>> On Fri, Jun 10, 2022 at 5:12 AM Yannick Majoros <yann...@valuya.be>
>>>>>>> wrote:
>>>>>>> >
>>>>>>> > Hello,
>>>>>>> >
>>>>>>> > Regarding "OAuth 2.0 for Browser-Based Apps" section 6 (
>>>>>>> https://datatracker.ietf.org/doc/html/draft-ietf-oauth-browser-based-apps-09#section-6
>>>>>>> ), I do have some questions and concerns. Can I get in touch with 
>>>>>>> someone
>>>>>>> about this?
>>>>>>> >
>>>>>>> > My main questions are:
>>>>>>> > - There is a lot of debate around the question. Are these really
>>>>>>> security best practices?
>>>>>>> > - Did you consider using a service worker or other frontend
>>>>>>> solutions (web worker, closure...) for safe token storage? That would 
>>>>>>> make
>>>>>>> a pure frontend solution at least as safe as cookies.
>>>>>>> > - Why would a cookie be safer, as this opens CSRF attacks that
>>>>>>> would make the same actions available to a hacker that would be 
>>>>>>> possible by
>>>>>>> getting hold of a token (which might even be more difficult)?
>>>>>>> > - What if the backend is stateless and so doesn't have any session
>>>>>>> (which defeats 6.1 & 6.2 and leaves no option according to current 
>>>>>>> draf)?
>>>>>>> >
>>>>>>> > Best regards.
>>>>>>> >
>>>>>>> > Yannick Majoros
>>>>>>> > Valuya sprl
>>>>>>> > _______________________________________________
>>>>>>> > OAuth mailing list
>>>>>>> > OAuth@ietf.org
>>>>>>> > https://www.ietf.org/mailman/listinfo/oauth
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Yannick Majoros
>>>>>> Valuya sprl
>>>>>>
>>>>>>
>>>>>
>>>>> --
>>>>> Yannick Majoros
>>>>> Valuya sprl
>>>>>
>>>>> _______________________________________________
>>>>> OAuth mailing list
>>>>> OAuth@ietf.org
>>>>> https://www.ietf.org/mailman/listinfo/oauth
>>>>>
>>>>
>>>
>>> --
>>> Yannick Majoros
>>> Valuya sprl
>>>
>>>
>
> --
> Yannick Majoros
> Valuya sprl
>
>
_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to