Sure. The preconditions are:
 
1. Execution of malicious _javascript_ code within the context of one of the application’s pages with the same origin. Such as
   - Cross-Site Scripting (XSS)
   - A vulnerable or compromised dependency, or third-party script
2. The ability to obtain the parameters of the authorization response:
  - Using the web message response mode and setting up one’s own event listener
  - Injecting an invisible iframe and obtaining the authorization response from the location object + breaking the OAuth flow
  - Briefly opening a new window and obtaining the authorization response from the location object + breaking the OAuth flow
3. Breaking the OAuth flow. To break the OAuth flow means to prevent the authorization response parameters (such as the authorization code) from being received and consumed by the application itself. This can be achieved by
   - Passing an invalid state value
   - Changing the response type/response mode for the authorization request
   - Case-shifting the redirect URI value
   - Path extension for the redirect URI value
   - Adding query parameters to the redirect URI value
   - Using previously added, but forgotten valid values for the redirect URI
4. SSO mechanism and seamless user authorization. The user must have an active session on the authorization server, so that the authentication form is not returned in response to the authorization request. 
 
 
----------------
Кому: Andrey Kuznetsov ([email protected]);
Копия: Philippe De Ryck ([email protected]), [email protected];
Тема: [OAUTH-WG] Re: Question: Form Post Response Mode in OAuth/OIDC Security Best Practices;
06.11.2025, 13:41, "Warren Parad" <[email protected]>:
I'm using the word "assumption", and you've used the word "precondition", that's fine, but it doesn't clarify the situation. Can you state what "preconditions" you are expecting here?
 
On Thu, Nov 6, 2025 at 11:30 AM Andrey Kuznetsov <[email protected]> wrote:
Philippe,
Yes, i suppose, i do.
I have a short video demonstration for the described attack. Also there is another demo for the same attack but done manually for clarity.
The source code for applications used in those examples is available on GitHub. The app may take some setup but can be used with any OAuth/OIDC-compatible authorization server.
 
Warren,
Perhaps, i may misunderstand your questions, but with the necessary preconditions met it's not an assumption, but a statement.
 
 
----------------
Кому: Philippe De Ryck ([email protected]);
Копия: [email protected];
Тема: [OAUTH-WG] Re: Question: Form Post Response Mode in OAuth/OIDC Security Best Practices;
06.11.2025, 12:46, "Warren Parad" <[email protected]>:
Would someone be able to state the obvious for me?
 
Is the assumption that there is a code injection attack present where an attacker has access to _javascript_ running in the application's interface? Is that the core assumption or is it something else?
 
On Thu, Nov 6, 2025 at 8:18 AM Philippe De Ryck <[email protected]> wrote:
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.
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.
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]>:
 

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]);
Копия: [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]>:
 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]>:
 
 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]
To unsubscribe send an email to [email protected]

 
 
-- 
Best regards,
Andrey Kuznetsov
Software Architect
Identity & Access Management
Yandex Cloud
 
,

_______________________________________________
OAuth mailing list -- [email protected]
To unsubscribe send an email to [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]
 
 
-- 
С уважением,
Андрей Кузнецов
Архитектор, YC IAM & Resource Management
 
 
 
-- 
С уважением,
Андрей Кузнецов
Архитектор, YC IAM & Resource Management
TG: @andreukuznetsov_work
 
_______________________________________________
OAuth mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to