On 2024/07/03 20:17:06 Christopher Schultz wrote:
> Francesco,
> 
> On 7/2/24 05:44, Francesco Chicchiriccò wrote:
> > On 2024/06/27 14:47:48 Christopher Schultz wrote:
> >> Rainer,
> >>
> >> On 6/21/24 07:55, Rainer Jung wrote:
> >>> Am 20.06.24 um 17:52 schrieb Christopher Schultz:
> >>>> Francesco,
> >>>>
> >>>> On 6/20/24 09:03, Francesco Chicchiriccò wrote:
> >>>>> On 2024/06/20 12:18:15 Konstantin Kolinko wrote:
> >>>>>> чт, 20 июн. 2024 г. в 13:25, Francesco Chicchiriccò
> >>>>>> <ilgro...@apache.org>:
> >>>>>>>
> >>>>>>> Hi there,
> >>>>>>> at Syncope we usually use the latest Tomcat versions to run a large
> >>>>>>> chunk of our integration tests.
> >>>>>>>
> >>>>>>> In our master branch we relay on Tomcat 10.1.x, and upgrading to
> >>>>>>> 10.1.25 from 10.1.24 went smooth as usual.
> >>>>>>>
> >>>>>>> In our 3_0_X branch we relay on Tomcat 9.0.x; with 9.0.89
> >>>>>>> everything goes as expected, but with 9.0.90 we are getting the
> >>>>>>> exception [1].
> >>>>>>>
> >>>>>>> Any idea of what could be changed in 9.0.90 within this regard?
> >>>>>>> Thank you.
> >>>>>>>
> >>>>>>> [1] https://gist.github.com/ilgrosso/be1fb1f2ea205eef60fb221973f87b34
> >>>>>>>
> >>>>>>
> >>>>>> The "java.lang.IllegalStateException: The request object has been
> >>>>>> recycled and is no longer associated with this facade" message means
> >>>>>> that a Request object has been (illegally) stored and is accessed
> >>>>>> outside of its lifecycle - when the underlying structures and buffers
> >>>>>> have already been recycled and may have been reused to process
> >>>>>> subsequent requests.
> >>>>>>
> >>>>>> Mark wrote:
> >>>>>>> You could try explicitly setting discardFacades to false.
> >>>>>>
> >>>>>> In general, not recommended.
> >>>>>> https://tomcat.apache.org/tomcat-9.0-doc/security-howto.html#Connectors
> >>>>>>
> >>>>>> Calling getScheme() might be safe (as IIRC the info will come from a
> >>>>>> connector configuration), but anything beyond that may lead to either
> >>>>>> false results or to security issues. It would be better to identify
> >>>>>> and fix the underlying cause.
> >>>>>
> >>>>> Are you suggesting there is something to fix on Syncope's or CXF's
> >>>>> code? Or rather on Tomcat?
> >>>>
> >>>> This is a protection that Tomcat is providing to the application.
> >>>> There is no known bug in Tomcat's code.
> >>>>
> >>>> It's not clear to me whether Syncope's or CXF's code is retaining such
> >>>> a reference, but, given the stack trace I would suspect that
> >>>> UserServiceImpl in Syncope's code is where you should start looking.
> >>>>
> >>>>> As I am writing above, we have no issues with Tomcat 9.0.89 nor with
> >>>>> Tomcat 10.1.25.
> >>>>
> >>>> It looks like this change was made in 9.0.90 *only* and was not ported
> >>>> to the other June releases. Honestly, this change should have been
> >>>> made to all active branches... I'm not sure why Rémy only applied it
> >>>> to 9.0.x.
> >>>
> >>> The default value for discardFacades is already "true" in 10.1 and 11
> >>> and the old system property
> >>> org.apache.catalina.connector.RECYCLE_FACADES no longer exists for
> >>> these. So setting discardFacades to "true" in 9.0.x makes the default
> >>> behavior consistent.
> >>
> >> +1 thanks for pointing this out. This commit was Rémy aligning 9.0.x
> >> with the other active branches, not making it /out/ of alignment.
> >>
> >>> No idea, why the application now shows different behavior for 9.0.x
> >>> and 10.1.x.
> >> Agreed. But wrapping in HttpServletRequestWrapper, using Async, and
> >> performing what the OP described as "multiplex[ing] the incoming request
> >> onto atomic requests, injected to CXF service processing" sounds like a
> >> recipe for retaining references to these objects after they go out of 
> >> scope.
> > 
> > Hi Chris,
> > the fix mentioned above was exactly addressed to copy (as opposite as 
> > reference) the needed values from the original request.
> > While coding the fix, however, I've discovered that the Syncope master 
> > branch (run on Tomcat 10.1) was already updated to work this way, while the 
> > 3_0_X branch (run on Tomcat 9) was simply not as fresh.
> > 
> > Everything is back working as expected, thanks for information.
> > 
> > Finally, about:
> > 
> >> If your application is retaining a reference to an HttpServletRequest
> >> after the request has been completed, then your application has a bug.
> >> You can tell me it doesn't have a bug, but it does. If you want
> >> information from that request, you should copy it out of the request.
> > 
> > I just wanted to reassure you that my intention was not to deny there was 
> > an issue, just to explain that probably it was not much about "security 
> > and/or privacy".
> 
> I disagree. If you retain references to those objects, it's entirely 
> possible to return data in a response to the wrong user. Or get 
> information from a request whose user has changed out from underneath you.
> 
> Any time user A and user B can see each other's data, that's a privacy 
> and/or security issue in my book.

Hi Chris,
I couldn't agree more with your book, in the general case.

But in this context the caller is one, which is conveying multiple JAX-RS 
requests onto a single HTTP request, so we don't have user A and user B, only a 
single user.

Regards.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to