[
https://issues.apache.org/jira/browse/SLING-13355?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Joerg Hoh updated SLING-13355:
------------------------------
Description:
Currently the error handling in the Sling Engine is not aware of the
content-type which has been already set.
For example I have this warn message:
{quote}
POST /content/dam/folder.initiateUpload.json HTTP/1.1]
org.apache.sling.engine.impl.SlingHttpServletResponseImpl Servlet
BundledScriptServlet (/libs/sling/servlet/errorhandler/404.jsp) tried to
override the 'Content-Type' header from 'application/json' to 'text/html'. This
is a violation of the RequestDispatcher.include() contract -
https://jakarta.ee/specifications/servlet/4.0/apidocs/javax/servlet/requestdispatcher#include-javax.servlet.ServletRequest-javax.servlet.ServletResponse-.
, Include stack: BundledScriptServlet
(/libs/sling/servlet/errorhandler/404.jsp)#1 ->
com.adobe.cq.assetcompute.impl.servlet.InitiateUploadAssetServlet#0. All
RequestProgressTracker messages:
[...]
310546 TIMER_END\{771,ServletResolution\}
URI=/content/dam/folder.initiateUpload.json handled by
Servlet=com.adobe.cq.assetcompute.impl.servlet.InitiateUploadAssetServlet
[...]
311308
TIMER_START\{com.adobe.cq.assetcompute.impl.servlet.InitiateUploadAssetServlet#0\}
311659 LOG Applying Error filters
[...]
311834 TIMER_START\{handleError:status=404\}
312328 TIMER_END\{494,handleError:status=404\} Using handler
BundledScriptServlet (/apps/sling/servlet/errorhandler/404.html)
312938
TIMER_START\{resolveIncludedResource(/libs/sling/servlet/errorhandler/404.jsp)\}
313050
TIMER_END\{112,resolveIncludedResource(/libs/sling/servlet/errorhandler/404.jsp)\}
path=/libs/sling/servlet/errorhandler/404.jsp resolves to
Resource=ServletResource, servlet=BundledScriptServlet
(/libs/sling/servlet/errorhandler/404.jsp),
path=/libs/sling/servlet/errorhandler/404.jsp
313062 LOG Including resource ServletResource, servlet=BundledScriptServlet
(/libs/sling/servlet/errorhandler/404.jsp),
path=/libs/sling/servlet/errorhandler/404.jsp (SlingRequestPathInfo:
path='/libs/sling/servlet/errorhandler/404.jsp',
selectorString='initiateUpload', extension='json', suffix='null')
313065 TIMER_START\{resolveServlet(/libs/sling/servlet/errorhandler/404.jsp)\}
313094
TIMER_END\{28,resolveServlet(/libs/sling/servlet/errorhandler/404.jsp)\} Using
servlet BundledScriptServlet (/libs/sling/servlet/errorhandler/404.jsp)
313345 TIMER_START\{BundledScriptServlet
(/libs/sling/servlet/errorhandler/404.jsp)#1\}
{quote}
Here the com.adobe.cq.assetcompute.impl.servlet.InitiateUploadAssetServlet
triggers the error handling of the Sling Engine (for whatever reason, but at
this point it already has set the content-type to "application/json". And as a
next step the error handler kicks in and writes the error messages with the
content-type text/html.
We should fix this for 2 reasons:
# It is a potential XSS (the browser's JSON parser encounters HTML markup)
# In my experience the default error handling frequently focuses on the the
"main request" only, that means it renders HTML; in some cases this error
handling is even configured to render full fledged HTML pages which can get
slow. This can be misused for DOS attacks, e.g. by requesting non-existing
images.
For this reason we should make the error handling aware of the requested
content-type and be able to register error handlers by status and content-type.
was:
Currently the error handling in the Sling Engine is not aware of the
content-type which has been already set.
For example I have this warn message:
{quote}
POST /content/dam/folder.initiateUpload.json HTTP/1.1]
org.apache.sling.engine.impl.SlingHttpServletResponseImpl Servlet
BundledScriptServlet (/libs/sling/servlet/errorhandler/404.jsp) tried to
override the 'Content-Type' header from 'application/json' to 'text/html'. This
is a violation of the RequestDispatcher.include() contract -
https://jakarta.ee/specifications/servlet/4.0/apidocs/javax/servlet/requestdispatcher#include-javax.servlet.ServletRequest-javax.servlet.ServletResponse-.
, Include stack: BundledScriptServlet
(/libs/sling/servlet/errorhandler/404.jsp)#1 ->
com.adobe.cq.assetcompute.impl.servlet.InitiateUploadAssetServlet#0. All
RequestProgressTracker messages:
[...]
310546 TIMER_END\{771,ServletResolution\}
URI=/content/dam/folder.initiateUpload.json handled by
Servlet=com.adobe.cq.assetcompute.impl.servlet.InitiateUploadAssetServlet
[...]
311308
TIMER_START{com.adobe.cq.assetcompute.impl.servlet.InitiateUploadAssetServlet#0}
311659 LOG Applying Error filters
[...]
311834 TIMER_START{handleError:status=404}
312328 TIMER_END{494,handleError:status=404} Using handler
BundledScriptServlet (/apps/sling/servlet/errorhandler/404.html)
312938
TIMER_START{resolveIncludedResource(/libs/sling/servlet/errorhandler/404.jsp)}
313050
TIMER_END{112,resolveIncludedResource(/libs/sling/servlet/errorhandler/404.jsp)}
path=/libs/sling/servlet/errorhandler/404.jsp resolves to
Resource=ServletResource, servlet=BundledScriptServlet
(/libs/sling/servlet/errorhandler/404.jsp),
path=/libs/sling/servlet/errorhandler/404.jsp
313062 LOG Including resource ServletResource, servlet=BundledScriptServlet
(/libs/sling/servlet/errorhandler/404.jsp),
path=/libs/sling/servlet/errorhandler/404.jsp (SlingRequestPathInfo:
path='/libs/sling/servlet/errorhandler/404.jsp',
selectorString='initiateUpload', extension='json', suffix='null')
313065 TIMER_START{resolveServlet(/libs/sling/servlet/errorhandler/404.jsp)}
313094 TIMER_END{28,resolveServlet(/libs/sling/servlet/errorhandler/404.jsp)}
Using servlet BundledScriptServlet (/libs/sling/servlet/errorhandler/404.jsp)
313345 TIMER_START{BundledScriptServlet
(/libs/sling/servlet/errorhandler/404.jsp)#1}
{quote}
Here the com.adobe.cq.assetcompute.impl.servlet.InitiateUploadAssetServlet
triggers the error handling of the Sling Engine (for whatever reason, but at
this point it already has set the content-type to "application/json". And as a
next step the error handler kicks in and writes the error messages with the
content-type text/html.
We should fix this for 2 reasons:
# It is a potential XSS (the browser's JSON parser encounters HTML markup)
# In my experience the default error handling frequently focuses on the the
"main request" only, that means it renders HTML; in some cases this error
handling is even configured to render full fledged HTML pages which can get
slow. This can be misused for DOS attacks, e.g. by requesting non-existing
images.
For this reason we should make the error handling aware of the requested
content-type and be able to register error handlers by status and content-type.
> Make request error handlign aware of content-types
> --------------------------------------------------
>
> Key: SLING-13355
> URL: https://issues.apache.org/jira/browse/SLING-13355
> Project: Sling
> Issue Type: New Feature
> Components: Engine
> Reporter: Joerg Hoh
> Priority: Major
>
> Currently the error handling in the Sling Engine is not aware of the
> content-type which has been already set.
> For example I have this warn message:
> {quote}
> POST /content/dam/folder.initiateUpload.json HTTP/1.1]
> org.apache.sling.engine.impl.SlingHttpServletResponseImpl Servlet
> BundledScriptServlet (/libs/sling/servlet/errorhandler/404.jsp) tried to
> override the 'Content-Type' header from 'application/json' to 'text/html'.
> This is a violation of the RequestDispatcher.include() contract -
> https://jakarta.ee/specifications/servlet/4.0/apidocs/javax/servlet/requestdispatcher#include-javax.servlet.ServletRequest-javax.servlet.ServletResponse-.
> , Include stack: BundledScriptServlet
> (/libs/sling/servlet/errorhandler/404.jsp)#1 ->
> com.adobe.cq.assetcompute.impl.servlet.InitiateUploadAssetServlet#0. All
> RequestProgressTracker messages:
> [...]
> 310546 TIMER_END\{771,ServletResolution\}
> URI=/content/dam/folder.initiateUpload.json handled by
> Servlet=com.adobe.cq.assetcompute.impl.servlet.InitiateUploadAssetServlet
> [...]
> 311308
> TIMER_START\{com.adobe.cq.assetcompute.impl.servlet.InitiateUploadAssetServlet#0\}
> 311659 LOG Applying Error filters
> [...]
> 311834 TIMER_START\{handleError:status=404\}
> 312328 TIMER_END\{494,handleError:status=404\} Using handler
> BundledScriptServlet (/apps/sling/servlet/errorhandler/404.html)
> 312938
> TIMER_START\{resolveIncludedResource(/libs/sling/servlet/errorhandler/404.jsp)\}
> 313050
> TIMER_END\{112,resolveIncludedResource(/libs/sling/servlet/errorhandler/404.jsp)\}
> path=/libs/sling/servlet/errorhandler/404.jsp resolves to
> Resource=ServletResource, servlet=BundledScriptServlet
> (/libs/sling/servlet/errorhandler/404.jsp),
> path=/libs/sling/servlet/errorhandler/404.jsp
> 313062 LOG Including resource ServletResource, servlet=BundledScriptServlet
> (/libs/sling/servlet/errorhandler/404.jsp),
> path=/libs/sling/servlet/errorhandler/404.jsp (SlingRequestPathInfo:
> path='/libs/sling/servlet/errorhandler/404.jsp',
> selectorString='initiateUpload', extension='json', suffix='null')
> 313065
> TIMER_START\{resolveServlet(/libs/sling/servlet/errorhandler/404.jsp)\}
> 313094
> TIMER_END\{28,resolveServlet(/libs/sling/servlet/errorhandler/404.jsp)\}
> Using servlet BundledScriptServlet (/libs/sling/servlet/errorhandler/404.jsp)
> 313345 TIMER_START\{BundledScriptServlet
> (/libs/sling/servlet/errorhandler/404.jsp)#1\}
> {quote}
> Here the com.adobe.cq.assetcompute.impl.servlet.InitiateUploadAssetServlet
> triggers the error handling of the Sling Engine (for whatever reason, but at
> this point it already has set the content-type to "application/json". And as
> a next step the error handler kicks in and writes the error messages with the
> content-type text/html.
> We should fix this for 2 reasons:
> # It is a potential XSS (the browser's JSON parser encounters HTML markup)
> # In my experience the default error handling frequently focuses on the the
> "main request" only, that means it renders HTML; in some cases this error
> handling is even configured to render full fledged HTML pages which can get
> slow. This can be misused for DOS attacks, e.g. by requesting non-existing
> images.
> For this reason we should make the error handling aware of the requested
> content-type and be able to register error handlers by status and
> content-type.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)