Answers inline to add the proper nuance. > Would you not agree that a "good" CSP config is a good line of defense > against XSS attacks?
A good CSP policy can indeed help to stop the exploitation of an XSS vulnerability, should one exist in the application. I do not agree with the wording “a good line of defense”, as it can imply that a good CSP policy can be used as the only defense. XSS vulnerabilities are first and foremost avoided by adopting secure coding guidelines. CSP acts as a second line of defense, in case an XSS vulnerability still slips through. > I agree that the OAuth BCP should not provide details on CSP config. I do > think we should call out having a considered CSP config is a best practice. > > I differentiate between headers and cookies and SQL injection etc. in that > the headers and cookies are part of the HTTP requests, which is the protocol > OAuth is built on, so weaknesses there weaken the protocol. Just because CSP can be configured as a header (CSP can also be set with a <meta> tag) does not make it part of the protocol OAuth is built on. CSP is 100% an application-level feature. And as useful as CSP can be, I would not consider “not having CSP” as a protocol weakness. I’m not strongly against mentioning CSP, I’m just wondering how much good it does given the complexity of configuring CSP correctly. It suffices to include a CDN that hosts a version of AngularJS 1.x to have a bypassable (and thereby mostly useless) CSP policy. Philippe > > On Mon, Nov 6, 2023 at 11:25 AM Philippe De Ryck > <phili...@pragmaticwebsecurity.com > <mailto:phili...@pragmaticwebsecurity.com>> wrote: > I went back to the Security BCP and combed through the fine details, and > there is indeed some guidance on CSP. But your initial remark that this is > "vague" is definitely true, and this section is actually a good illustration > of what I was trying to say. Let me unpack the details a bit … > > In section 4.16, the security BCP talks about how to restrict framing to > avoid clickjacking/UI redressing attacks. Defending against such attacks > cannot be done with secure coding, but must be done with specific framing > restrictions. The best mechanism to achieve this is by setting security > headers: the legacy X-Frame-Options header or the more modern CSP > frame-ancestors directive. Given that this security requirement is closely > linked to OAuth and is not something that “happens naturally”, but must be > explicitly added, I totally agree that this should be part of the security > BCP. > > Now, in paragraph 5 of the section, things get somewhat confusing (included > below for reference). So far, every mention of "CSP" was used as a synonym > for the "frame-ancestors" directive to restrict framing. However, all the way > at the end of that paragraph, the text suddenly recommends using the > "script-src" directive to restrict sources of JS that can execute on the > page. The paragraph then points to a sample header, with the configuration of > "script-src 'self'". > > Using CSP allows authorization servers to specify multiple origins in a > single response header field and to constrain these using flexible patterns > (see [W3C.CSP-2 <https://www.w3.org/TR/CSP2>] for details). Level 2 of this > standard provides a robust mechanism for protecting against clickjacking by > using policies that restrict the origin of frames (using frame-ancestors) > together with those that restrict the sources of scripts allowed to execute > on an HTML page (by using script-src). > > Unfortunately, this advice is too simplistic to be useful, as it prevents the > loading of JS from any other origin, including CDNs, or third-party services. > Additionally, it violates modern best practices for CSP, which recommend the > use of hashes, nonces, and trust propagation (with nonce propagation or > 'strict-dynamic'). If you’re interested in the details, I’ve done a few guest > blog posts about CSP for Auth0 that cover this: > https://auth0.com/blog/authors/philippe-de-rick/ > <https://auth0.com/blog/authors/philippe-de-rick/> > > > What I'm trying to say here is that a detailed CSP config (apart from the > "frame-ancestors" directive) is not essential for a secure OAuth > implementation or deployment. It can and should act as a second line of > defense against content injection attacks, but not having such a CSP config > does not automatically create a vulnerability. Therefore, my recommendation > is to focus on the details directly relevant to OAuth security. > > For security guidelines for configuring cookies, I believe this would be more > directly related and more useful, as I mentioned before. > > Finally, I can totally see that the community could benefit from more > in-depth security best practices that go beyond OAuth-specific risks. Apart > from CSP, there's a whole bunch more response headers that can be configured > (as you and others have mentioned). On top of that, modern browsers send a > lot of metadata in a request (e.g., the Sec-Fetch Metadata headers) that > could be used by the AS to reject illegitimate requests. However, given the > rapid development of these features and lack of widespread support, I would > envision such recommendations to live in a more "dynamic" document than an > RFC. > > Philippe > > — > Pragmatic Web Security > Security for developers > https://pragmaticwebsecurity.com <https://pragmaticwebsecurity.com/> > >> On 6 Nov 2023, at 18:07, Dick Hardt <dick.ha...@gmail.com >> <mailto:dick.ha...@gmail.com>> wrote: >> >> That's a surprising response Philippe. The BCP already has >> Content-Security-Policy and Referrer-Policy headers recommendations. The >> core of my feedback is to add Cookie and Header best practices to Section 2, >> and point to one or more living documents. >> >> On Mon, Nov 6, 2023 at 8:45 AM Philippe De Ryck >> <phili...@pragmaticwebsecurity.com >> <mailto:phili...@pragmaticwebsecurity.com>> wrote: >> While I understand the idea of pointing to additional security resources, >> I’m not sure if it is the role of the security BCP (or other specs) to take >> on the responsibility to address these issues. In my point of view, the >> security BCP should focus on OAuth aspects, and discuss security topics that >> are directly relevant to that purpose. >> >> Concretely for the security mechanisms discussed here, I can see how cookie >> configurations could be relevant (the session with the AS is inherent to >> OAuth), but I don’t see defenses such as CSP as relevant in that scope. If >> these are in scope, should we then also provide advice or pointers on >> avoiding server-side implementation vulnerabilities, such as SQL injection >> or SSRF? >> >> Additionally, many of these security mechanisms are quite complex and >> non-trivial to deploy. For example, adding a generic pointer stating “you >> should add CSP” does not say much, as CSP can control more than a dozen >> features. >> >> To summarize, I would keep the scope of these specs as narrow as possible >> and avoid aiming to address security concerns that are beyond the realm of >> OAuth. >> >> Philippe >> >> — >> Pragmatic Web Security >> Security for developers >> https://pragmaticwebsecurity.com <https://pragmaticwebsecurity.com/> >> >>> On 6 Nov 2023, at 15:39, Dick Hardt <dick.ha...@gmail.com >>> <mailto:dick.ha...@gmail.com>> wrote: >>> >>> +1 to referring to calling out that cookies / headers should follow best >>> security practice, and pointing to living documents >>> >>> On Mon, Nov 6, 2023 at 6:21 AM Giuseppe De Marco <demarco...@gmail.com >>> <mailto:demarco...@gmail.com>> wrote: >>> Hi, >>> >>> everytime I have implemented SAML2, OAuth 2.0, OpenID Connect, for >>> different projects and orgs, I have included secured web cookie in the >>> recipe. >>> For the implementation profile of OpenID4VP I did the same, where the >>> secured and httponly cookie is used an in particular as a basic security >>> requirement for the cross device flow [1]. >>> >>> Even if I got perfectly Daniel's and Aaron's editorial strategy and I >>> agree, I think that Dick's proposal and your confirmation on that, Neil, is >>> something to take into account to bring developers awareness during the >>> implementation phases. >>> A ref to living OWASP specs surrounded by a generic refs to the user agent >>> security, even if out of scope, I think that should be in the specs. >>> >>> [1] >>> https://italia.github.io/eudi-wallet-it-docs/versione-corrente/en/relying-party-solution.html#remote-protocol-flow >>> >>> <https://italia.github.io/eudi-wallet-it-docs/versione-corrente/en/relying-party-solution.html#remote-protocol-flow> >>> Il giorno lun 6 nov 2023 alle ore 15:11 Neil Madden >>> <neil.e.mad...@gmail.com <mailto:neil.e.mad...@gmail.com>> ha scritto: >>> Although I think we could add some basic advice, the list of security >>> headers to use is still evolving. For example, there were several headers >>> added after Spectre to limit cross-site interactions. And then there’s >>> things like the “X-XSS-Protection” header, which was best practice to add >>> to responses not too long ago but has now been universally removed from >>> browsers as it enabled certain content disclosure attacks. >>> >>> Cookie security attributes are perhaps a bit more stable, but in general we >>> probably just want to point people at “living” guidance like OWASP. >>> >>> — Neil >>> >>>> On 5 Nov 2023, at 19:28, Dick Hardt <dick.ha...@gmail.com >>>> <mailto:dick.ha...@gmail.com>> wrote: >>>> >>>> The cookie and header recommendations I am thinking of would be for the AS >>>> as well as the client. >>>> >>>> A number of XSS attacks can be thwarted by a modern browser and the right >>>> HTTP headers. >>>> >>>> My question is: Did the authors consider adding cookie and header >>>> recommendations, and decided it was too general? >>>> >>>> Cookie and header best security practices have been around for years -- >>>> I'm not suggesting we make anything up -- I'm suggesting we raise >>>> awareness. >>>> >>>> I consider myself to be fairly security aware, and I was not aware of some >>>> of the HTTP headers that are best security practice. >>>> >>>> /Dick >>>> >>>> >>>> On Sun, Nov 5, 2023 at 11:19 AM Aaron Parecki >>>> <aaron=40parecki....@dmarc.ietf.org <mailto:40parecki....@dmarc.ietf.org>> >>>> wrote: >>>> I don't think it's necessary to say "do the right things with cookies" in >>>> the Security BCP. The Browser Apps BCP has a much deeper discussion of how >>>> different browser-based architectures work with cookies so that seems like >>>> a better place to actually have a real discussion about it. >>>> >>>> Also +1 to what Daniel said about not continuing to add little things. >>>> Plus I think it's too late anyway, publication has already been requested >>>> for the Security BCP. >>>> >>>> Aaron >>>> >>>> On Sun, Nov 5, 2023 at 11:14 AM Daniel Fett >>>> <fett=40danielfett...@dmarc.ietf.org >>>> <mailto:40danielfett...@dmarc.ietf.org>> wrote: >>>> I agree with Aaron! >>>> >>>> Also we should be very careful about any additions to the Security BCP at >>>> this point. It is very easy to re-start the "one more thing" loop we've >>>> been stuck in for the last years. There may be more useful things to say, >>>> but we should put them on the list for a future second version of the BCP. >>>> >>>> -Daniel >>>> >>>> Am 05.11.23 um 20:03 schrieb Aaron Parecki: >>>>> I don't think the Security BCP should incorporate cookie best practices >>>>> directly in the document. If anything, it sounds like possibly a >>>>> candidate for inclusion in the Browser Apps BCP. >>>>> >>>>> There are already some mentions of these cookie properties mentioned in >>>>> the Browser Apps BCP, though only in reference to specific architectures, >>>>> not as a general best practice. For example: >>>>> >>>>> https://www.ietf.org/archive/id/draft-ietf-oauth-browser-based-apps-15.html#pattern-bff-cookie-security >>>>> >>>>> <https://www.ietf.org/archive/id/draft-ietf-oauth-browser-based-apps-15.html#pattern-bff-cookie-security> >>>>> >>>>> Aaron >>>>> >>>>> On Sun, Nov 5, 2023 at 10:48 AM Dick Hardt <dick.ha...@gmail.com >>>>> <mailto:dick.ha...@gmail.com>> wrote: >>>>> Hey >>>>> >>>>> I was reviewing security on some sites I managed and checked to see if >>>>> the recommendations were in the BCP. >>>>> >>>>> I don't see anything around cookies such as httpOnly, sameSite, secure. >>>>> >>>>> I saw some HTTP security header suggestions buried in 4.16 >>>>> (X-Frame-Options, CSP), but not for Strict-Transport-Security, >>>>> Permissions-Policy, or X-Content-Type-Options, and the CSP guidance is >>>>> rather vague. >>>>> >>>>> I understand these are general web security best practices, and perhaps I >>>>> missed it, but I think it would be useful to call out that best security >>>>> practices around cookies and headers should also be followed in Section >>>>> 2, and either have the best practices included, or direct the reader >>>>> where to find them. >>>>> >>>>> /Dick >>>>> >>>>> _______________________________________________ >>>>> 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> >>>> _______________________________________________ >>>> 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> >>>> _______________________________________________ >>>> 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> >>> _______________________________________________ >>> 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 https://www.ietf.org/mailman/listinfo/oauth