Hi Andrey,

It seems that with this high degree of control, the attacker would indeed be 
able to manipulate the flows. 

However, I’m curious to know if you have an actual working demo of step 
9-10-11. I remember from a private discussion a while ago that someone pointed 
out that intermediate redirects are not observable in the browser. So if 
response 9 triggers a redirect to the backend (10), and the backend handles it 
and then redirects back to the main application (as a BFF would do), then the 
request in 10 is not observable from JS, and would prevent an attacker from 
stealing the authz code. 

Kind regards

Philippe

—
Pragmatic Web Security
Security for developers
https://pragmaticwebsecurity.com/


> On 6 Nov 2025, at 06:33, Andrey Kuznetsov <[email protected]> wrote:
> 
> I'm sorry for the delayed response.
>  
> Filip, i agree with your statements and you provided reasonable examples of 
> cookie that might be needed on the request to the redirect URI.
>  
> There is also a reply from Dick with the similar reasoning:
> As Filip stated, cookies are the main reason.  There is almost always some 
> session state that the app wants to maintain between making the authorization 
> request and getting the authorization response. It can be as simple as where 
> the user was in the app so they are redirected to the original place, to what 
> is already in the shopping cart, or even existing authentication context as 
> the user is linking another account. With the use of PKCE, the threats of 
> intercepted query parameters are reduced.
> 
> If we were to make a recommendation, it would be the redirect and not form 
> post as session hijacking is the larger threat now from my understanding.
>  
> Also there's been another thread started about Browser Swapping attack which 
> discusses the related topic. However, i would like to clear things up.
> 1. There is a real attack scenario in which the attacker can steal the 
> authorization code from the user's browser and use it even if the client 
> implements confidential client, PKCE, state and nonce (please, consult the 
> diagram 1.png attached)
> 2. The ways of authorization code stealing are not hypothetical or ephemeral: 
> basically it can be done if the attacker is able to execute JS on any page of 
> the legitimate application that has an origin matching the origin of the 
> redirect URI . Full preconditions are listed here 
> <https://medium.com/@anador/attacks-via-a-new-oauth-flow-authorization-code-injection-and-whether-httponly-pkce-and-bff-3db1624b4fa7#cd2e>.
> 3. The only complete mitigation for the attack is form post response mode 
> (please, consult the diagram 2.png attached). Other additional mitigations 
> are listed here 
> <https://medium.com/@anador/attacks-via-a-new-oauth-flow-authorization-code-injection-and-whether-httponly-pkce-and-bff-3db1624b4fa7#6da0>.
> 4. The attack is possible because of the nature of OAuth flows (please, 
> consult the diagram 3.png attached). All additional protection measures such 
> as PAR/JAR/JARM don’t prevent the attack.
> 4. When we use query/fragment/web message response modes we cannot prevent 
> the attacker that executes JS on the app's origin from accessing the 
> authorization response. However, form post response mode does not allow 
> access to the authorization response from the origin of the application 
> itself. But the authorization server must be able to limit the available 
> response modes at some level.
>  
> On the other hand we have downsides of using form post response mode: if we 
> need cookies to be received on the redirect URI page, those cookies (not 
> actual session cookies!) must have SameSite=None attribute. I agree that for 
> some cases it can be crucial, but for some it can add no risks.
> Also close attention should be paid to the values of the redirect URI that 
> the authorization server considers valid to prevent XSS at the AS side.
>  
>  
> I suggest we should point out that form post response mode protects from the 
> stated attack, while it should be considered if CSRF at client's side is 
> going to be possible because of marking some cookies with SameSite=None.
>  
> ----------------
> Кому: Andrey Kuznetsov ([email protected]);
> Копия: [email protected];
> Тема: [OAUTH-WG] Re: Question: Form Post Response Mode in OAuth/OIDC Security 
> Best Practices;
> 26.10.2025, 10:54, "Filip Skokan" <[email protected]>:
> > That is why I emphasized "significant".
>  
> Are they not significant?
>  
> I may not have read your blog post but i did read and quote the question I 
> was answering to. While these may appear as insignificant reasons at first 
> glance they are both blockers encountered at one point in time in my past 
> experience. 
>  
> > sameSite
>  
> Account Linking, Step-up, re-auth, site preferences, shopping carts are all 
> scenarios where you want/need an existing session loaded (regardless whether 
> it's preauth or not). 
>  
> > FOUC
>  
> User agent that's processing a 30x response with a location header and a 200 
> that contains a JS self-submitting form is different when it comes to FOUC. 
> Of course this problem is exaggerated on unstable or slow connections such as 
> mobile. 
>  
> - Filip
>  
> 25. 10. 2025 v 17:50, Andrey Kuznetsov <[email protected] 
> <mailto:[email protected]>>:
>  
> 
> That is why I emphasized "significant".
>  
> UX - FOUC or briefly displayed submit page at the AS when it's sending 
> responses
> - The returning page with the autosubmitted form usually does not contain any 
> explicit content. In fact, I'm not sure how it's different from any redirect 
> URI page that might appear briefly, as you mentioned, when other response 
> modes are in use
>  
> sameSite - the client is required to use sameSite=none for the cookies they 
> expect to load at the redirect_uri, that may include session related cookies 
> for which sameSite=none is the exact opposite of what they should strive for.
> - I agree with the first part of your statement, that's true. However, we 
> should define what we mean by a "session" here and determine if it's a 
> problem. Usually, this applies only to certain cookies that are used to 
> maintain a "pre-auth session" and for such a case I'm not sure if it's a 
> significant issue. I considered this nuance in the research i mentioned 
> previously and explicitly stated that constraint. Could you share your 
> example, If you have another case where we do need a cookie to be sent to the 
> redirect URI endpoint?
> ----------------
> Кому: Andrey Kuznetsov ([email protected] 
> <mailto:[email protected]>);
> Копия: [email protected] <mailto:[email protected]>;
> Тема: [OAUTH-WG] Re: Question: Form Post Response Mode in OAuth/OIDC Security 
> Best Practices;
> 25.10.2025, 16:40, "Filip Skokan" <[email protected] 
> <mailto:[email protected]>>:
>  On the other hand, i cannot identify any significant drawbacks to using this 
> response mode, aside from inconsistent support across implementations.
> 
> What about
> - UX - FOUC or briefly displayed submit page at the AS when it's sending 
> responses
> - sameSite - the client is required to use sameSite=none for the cookies they 
> expect to load at the redirect_uri, that may include session related cookies 
> for which sameSite=none is the exact opposite of what they should strive for.
> 
> - Filip
>  
> 
>  25. 10. 2025 v 15:21, Andrey Kuznetsov <[email protected] 
> <mailto:[email protected]>>:
>  
>  On the other hand, i cannot identify any significant drawbacks to using this 
> response mode, aside from inconsistent support across implementations.
> 
> _______________________________________________
> OAuth mailing list -- [email protected] <mailto:[email protected]>
> To unsubscribe send an email to [email protected] 
> <mailto:[email protected]>
>  
>  
> -- 
> Best regards,
> Andrey Kuznetsov
> Software Architect
> Identity & Access Management
> Yandex Cloud
>  
> ,
> _______________________________________________
> OAuth mailing list -- [email protected] <mailto:[email protected]>
> To unsubscribe send an email to [email protected] 
> <mailto:[email protected]>
>  
>  
> -- 
> Best regards,
> Andrey Kuznetsov
> Software Architect
> Identity & Access Management
> Yandex Cloud
>  
> <1.png><2.png><3.png>_______________________________________________
> OAuth mailing list -- [email protected]
> To unsubscribe send an email to [email protected]

_______________________________________________
OAuth mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to