Do we have deployments in the field and client-side developers giving
feedback / comments about the current DPoP, implementing it, and perhaps
those concerns about the access token?

Vladimir

On 08/12/2020 23:47, Brian Campbell wrote:
> Danial recently added some text to the working copy of the draft with
> https://github.com/danielfett/draft-dpop/commit/f4b42058 that I think
> aims to better convey the "nutshell: XSS = Game over" sentiment and
> maybe dissuade folks from looking to DPoP as a cure-all for browser
> based applications. Admittedly a lot of the initial impetus behind
> producing the draft in the first place was born out of discussions
> around browser based apps. But it's neither specific to browser based
> apps nor a panacea for them. I hope the language in the document and
> how it's recently been presented is reflective of that reality.
>
> The more specific discussions/recommendations around in-browser apps
> are valuable (if somewhat over my head) but might be more appropriate
> in the OAuth 2.0 for Browser-Based Apps
> <https://datatracker.ietf.org/doc/draft-ietf-oauth-browser-based-apps/>
> draft.
>
> With respect to the contents of the DPoP draft, I am still keen to try
> and flush out some consensus around the question posed in the start of
> this thread, which is effectively whether or not to include a hash of
> the access token in the proof.  Acknowledging that "XSS = Game over"
> does sort of evoke a tendency to not even bother with such incremental
> protections (what I've tried to humorously coin as "XSS Nihilism" with
> no success). And as such, I do think that leaving it how it is (no AT
> hash in the proof) is not unreasonable. But, as Filip previously
> articulated, including the AT hash in the proof would prevent
> potentially prolonged access to protected resources even when the
> victim is offline. And that seems maybe worthwhile to have in the
> protocol, given that it's not a huge change to the spec. But it's a
> trade-off either way and I'm personally on the fence about it.
>
> Including an RT hash in the proof seems more niche. Best I can tell,
> it would guard against prolonged offline access to protected resources
> when access tokens are bearer and the RT was DPoP-bound and also gets
> rotated. The trade-off there seems less worth it (I think an RT hash
> would be more awkward in the protocol too).
>
>
>
>
>
>
>
> On Fri, Dec 4, 2020 at 5:40 AM Philippe De Ryck
> <phili...@pragmaticwebsecurity.com
> <mailto:phili...@pragmaticwebsecurity.com>> wrote:
>
>
>>     The suggestion to use a web worker to ensure that proofs cannot
>>     be pre-computed is a good one I think. (You could also use a
>>     sandboxed iframe for a separate sub/sibling-domain -
>>     dpop.example.com <http://dpop.example.com/>).
>
>     An iframe with a different origin would also work (not really
>     sandboxing, as that implies the use of the sandbox attribute to
>     enforce behavioral restrictions). The downside of an iframe is the
>     need to host additional HTML, vs a script file for the worker, but
>     the effect is indeed the same.
>
>>     For scenario 4, I think this only works if the attacker can
>>     trick/spoof the AS into using their redirect_uri? Otherwise the
>>     AC will go to the legitimate app which will reject it due to
>>     mismatched state/PKCE. Or are you thinking of XSS on the
>>     redirect_uri itself? I think probably a good practice is that the
>>     target of a redirect_uri should be a very minimal and locked down
>>     page to avoid this kind of possibility. (Again, using a separate
>>     sub-domain to handle tokens and DPoP seems like a good idea).
>
>     My original thought was to use a silent flow with Web Messaging.
>     The scenario would go as follows:
>
>     1. Setup a Web Messaging listener to receive the incoming code
>     2. Create a hidden iframe with the DOM APIs
>     3. Create an authorization request such as
>     
> “//authorize?response_type=code&client_id=...&redirect_uri=https%3A%2F%example.com
>     
> <http://example.com>&state=...&code_challenge=7-ffnU1EzHtMfxOAdlkp_WixnAM_z9tMh3JxgjazXAk&code_challenge_method=S256&prompt=none&response_mode=web_message/”
>     4. Load this URL in the iframe, and wait for the result
>     5. Retrieve code in the listener, and use PKCE (+ DPoP if needed)
>     to exchange it for tokens
>
>     This puts the attacker in full control over every aspect of the
>     flow, so no need to manipulate any of the parameters.
>
>
>     After your comment, I also believe an attacker can run the same
>     scenario without the “/response_mode=web_message/”. This would go
>     as follows:
>
>     1. Create a hidden iframe with the DOM APIs
>     2. Setup polling to read the URL (this will be possible for
>     same-origin pages, not for cross-origin pages)
>     3. Create an authorization request such as
>     
> “//authorize?response_type=code&client_id=...&redirect_uri=https%3A%2F%example.com
>     
> <http://example.com>&state=...&code_challenge=7-ffnU1EzHtMfxOAdlkp_WixnAM_z9tMh3JxgjazXAk&code_challenge_method=S256/”
>     4. Load this URL in the iframe, and keep polling
>     5. Detect the redirect back to the application with the code in
>     the URL, retrieve code, and use PKCE (+ DPoP if needed) to
>     exchange it for tokens
>
>     In step 5, the application is likely to also try to exchange the
>     code. This will fail due to a mismatching PKCE verifier. While
>     noisy, I don’t think it affects the scenario. 
>
>
>>     IMO, the online attack scenario (i.e., proxying malicious
>>     requests through the victim’s browser) is quite appealing to an
>>     attacker, despite the apparent inconvenience:
>>
>>      - the victim’s browser may be inside a corporate firewall or
>>     VPN, allowing the attacker to effectively bypass these restrictions
>>      - the attacker’s traffic is mixed in with the user’s own
>>     requests, making them harder to distinguish or to block
>>
>>     Overall, DPoP can only protect against XSS to the same level as
>>     HttpOnly cookies. This is not nothing, but it means it only
>>     prevents relatively naive attacks. Given the association of
>>     public key signatures with strong authentication, people may have
>>     overinflated expectations if DPoP is pitched as an XSS defence.
>
>     Yes, in the cookie world this is known as “Session Riding”. Having
>     the worker for token isolation would make it possible to enforce a
>     coarse-grained policy on outgoing requests to prevent total abuse
>     of the AT.
>
>     My main concern here is the effort of doing DPoP in a browser
>     versus the limited gains. It may also give a false sense of security. 
>
>
>
>     With all this said, I believe that the AS can lock down its
>     configuration to reduce these attack vectors. A few initial ideas:
>
>     1. Disable silent flows for SPAs using RT rotation
>     2. Use the sec-fetch headers to detect and reject non-silent
>     iframe-based flows
>
>     For example,  an OAuth 2.0 flow in an iframe in Brave/Chrome
>     carries these headers:
>     /
>     sec-fetch-dest: iframe
>     sec-fetch-mode: navigate
>     sec-fetch-site: cross-site
>     sec-fetch-user: ?1
>     /
>
>
>     Philippe
>
>
> /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

-- 
Vladimir Dzhuvinov

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

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

Reply via email to