Hi all,

I am working on formulating developer guidelines on using Refresh Token 
Rotation (RTR), as required by "OAuth 2.0 for Browser-Based Apps". 

The protection offered by RTR kicks in the moment a refresh token is used 
twice, so the assumption is that the attacker has the ability to steal tokens 
from the client. In general, this means the attacker has malicious code running 
in the application (e.g., XSS, remote JS inclusion, ...). 

Within these constraints, I can think of a couple of malicious payloads that 
sidestep the protection offered by RTR:

1. Stealing access tokens in an online XSS attack
2. Stealing refresh tokens, but waiting to use the latest until the original 
client is no longer active
3. Running a silent authentication flow in an iframe to obtain a new and 
unrelated AT and RT, and use that until it expires

Scenario 1 is straightforward in most applications, but the attack requires the 
vulnerable application to remain online. Scenario 2 might be difficult if the 
RT is kept out of reach from the main application (e.g. in a worker thread). 
Scenario 3 is most dangerous, but also a bit tricky to implement as the payload 
needs to make sure the application's code does not interfere (however, the 
browser's Same-Origin Policy will not intervene). The specifics depend on the 
concrete implementation, but all three attacks are technically feasible.

With these attacks in mind, it seems that the use of the Authorization Code 
flow with RTR does not really add much improvement for security, if other best 
practices are followed (e.g., using HTTPS). RTR does a lot for usability and 
handling third-party cookie blocking scenarios though.

In this context, my advice to developers is to avoid handling tokens in the 
browser in security-sensitive scenarios. A Backend-for-frontend pattern gives a 
server-side component control over tokens, along with the ability to implement 
additional security measures.

Additionally, is there any official recommendation to link the validity of a 
refresh token to the lifetime of the user's session with the Authorization 
Server? Having that property gives RTR similar security properties as the 
silent renew scenario. 

Any feedback on this train of thought is more than welcome.

Philippe


_______________________________________________
OAuth mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to