[ 
https://issues.apache.org/jira/browse/WW-5841?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Gouri Sankar A updated WW-5841:
-------------------------------
    Description: 
StrutsBootServer embeds Tomcat and does not set a session tracking mode, so the 
context
falls back to Tomcat's default of COOKIE and URL. The session cookie also has 
no SameSite
attribute.

Effects on main:
- A session id sent in the URL (/app.action;jsessionid=<id>) is accepted as the 
session.
- Tomcat's encodeURL appends ;jsessionid=<id> to links generated by <s:url> and 
<s:a>,
  which puts the session id in rendered pages and in Referer headers.
- Set-Cookie for JSESSIONID carries no SameSite attribute.

Fix: restrict the context to cookie-only session tracking and set SameSite=Lax 
on the
session cookie. THREAT_MODEL.md section 5 lists both as Boot defaults.

Secure is not forced, because the embedded connector is plain HTTP

  was:
Without a web.xml, the embedded Tomcat context StrutsBootServer starts 
defaulted to the servlet-spec COOKIE+URL session tracking modes, so a session 
id supplied only via ";jsessionid=" in the URL (no cookie at all) was accepted 
and kept alive with no fresh Set-Cookie -- a session-fixation vector.

Live-reproduced before this fix: a session established by cookie was resumed by 
replaying the id via the URL parameter with no Cookie header sent at all.

Fix restricts session tracking to COOKIE only, and the session cookie now 
carries SameSite=Lax (previously unset). Secure is deliberately not forced: 
Boot opens a plain HTTP listener by default, and an operator terminating TLS in 
front of it sets Secure themselves, as with any other servlet container.

Boot is part of 7.5.0 (unreleased, no production deployments yet), so this 
lands before anyone is exposed to it.

Tests: StrutsBootTomcatTest gains testSessionCookieHasSameSiteLax and a 
URL-supplied-session-id-is-not-honoured test, with a 
cookie-based-session-still-works control. Full boot suite: 52/0 failures.


> Struts Boot accepts a session id via URL ;jsessionid= with no cookie and no 
> SameSite
> ------------------------------------------------------------------------------------
>
>                 Key: WW-5841
>                 URL: https://issues.apache.org/jira/browse/WW-5841
>             Project: Struts 2
>          Issue Type: Improvement
>          Components: Core
>            Reporter: Gouri Sankar A
>            Priority: Minor
>             Fix For: 7.5.0
>
>          Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> StrutsBootServer embeds Tomcat and does not set a session tracking mode, so 
> the context
> falls back to Tomcat's default of COOKIE and URL. The session cookie also has 
> no SameSite
> attribute.
> Effects on main:
> - A session id sent in the URL (/app.action;jsessionid=<id>) is accepted as 
> the session.
> - Tomcat's encodeURL appends ;jsessionid=<id> to links generated by <s:url> 
> and <s:a>,
>   which puts the session id in rendered pages and in Referer headers.
> - Set-Cookie for JSESSIONID carries no SameSite attribute.
> Fix: restrict the context to cookie-only session tracking and set 
> SameSite=Lax on the
> session cookie. THREAT_MODEL.md section 5 lists both as Boot defaults.
> Secure is not forced, because the embedded connector is plain HTTP



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to