Thank you for writing this BCP. I believe it provides important guidance and 
support its publication.

I have the following comments on draft -13:

Overall:
The draft uses the term “adversary” (3 times) and the term “attacker” (>100 
times). I suggest using one term consistently.

My understanding of the document structure is that Section 3 provides specific 
implementable recommendations up-front, while Section 4 describes in detail the 
threats that provide the rationale for those recommendations along with a 
discussion of various potential countermeasures and their tradeoffs. If that 
understanding is correct, I believe much of the specific recommendation text in 
the countermeasures sections (4.1.3, 4.2.4, 4.4.2, 4.5.3) would be a better fit 
in Section 3.

Section 3.5:
It is not clear to me how MTLS or “private_key_jwt” provide non-repudiation, or 
what it is that non-repudiation is being provided for. Could you explain or 
consider removing the non-repudiation discussion?

It is clear to me how MTLS enables use of sender-constrained access tokens. 
However it’s not clear to me how private_key_jwt does so – at least not without 
something like DPoP that hasn’t yet been finalized? 

Maybe change the text to something like “Additionally, MTLS enables use of 
sender-constrained access tokens (without requiring additional keys to be 
distributed).”?

Section 4.5:
“In such an attack, the adversary attempts to inject a stolen authorization 
code into a legitimate client on a device under his control.”

This text implies to me that the client is running on a device under the 
adversary’s control (but that the adversary presumably can’t directly control 
the client’s behavior)? But I think the intention is that the adversary is 
using a device/user agent under the adversary’s control to perform the code 
injection, not that the client is running on the adversary’s device? (e.g. 
previously discussed cut and paste attacks where the adversary has a session 
with the client and injects a stolen authorization code into that session)

If I’m understanding correctly how about text like “In such an attack, the 
adversary attempts to inject a stolen authorization code into the adversary’s 
own session with the client, in an attempt to associate the adversary’s session 
with the client to the victim’s resources or identity.”?

Section 4.5.1:
“The attacker obtains an authorization code by performing any of the attacks 
described above.”
Section 4.5 says “an attacker with advanced capabilities (A3-A5)” are out of 
scope, but would those advanced capabilities (e.g. A3 – ability to read the 
authorization response) potentially be useful to steal the authorization code? 
Should the text about attacker capabilities A3-A5 being out of scope be removed?

Section 4.5.3:
It may be worth noting that PKCE is verified by the authorization server, while 
the OpenID Connect nonce is verified by the client. There could be an argument 
to be made that authorization servers are more likely than clients to properly 
implement checks (e.g. the papers cited in section 4.8.1.1?), and so PKCE 
should be preferred. There could also be a defense-in-depth argument towards 
using both PKCE and nonce.

“PKCE is a deployed OAuth feature, even though it is used today to secure 
native apps only.”
That is not necessarily true anymore (the recommendations in this draft are 
already being adopted in other work such as FAPI). How about something like:
“PKCE is a deployed OAuth feature, although its original intended use was 
solely focused on securing native apps, not the broader use recommended by this 
document.”

Section 4.6:
Similar concerns about the “on a device under his control” text as expressed 
above for section 4.5.

Thanks,
Mike

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

Reply via email to