Content-Type juggling
Theory
Content-Type juggling exploits the lack of checking on the Content-Type
header when submitting an HTTP request.
Most of the time, Content-Type juggling is a way to carry out other attacks such as unrestricted-file-upload or xxe-injection (see examples).
If the XCTO (X-Content-Type-Options) security header is present, it will be difficult to perform the Content-Type
juggling, as indicated in mime-sniffing. The XCTO security header can be used to indicate that the MIME types advertised in the Content-Type
headers should be followed and not be changed by the browser depending on the page's content. Websites that implement this security header with the nosniff
directive must also include a valid Content-Type
header in their responses.
Practice
Identify a target vulnerable to Content-Type juggling
In order to identify if the target is vulnerable to Content-Type
juggling, testers need to answer the following questions :
Is there a post request with value(s) and
Content-Type
header ?Is the
X-Content-Type-Options
security header not present ?Can the
Content-Type
header be edited, and thePOST
request still be submitted successfully ?
If the answer is yes to the questions above, then one should be able to perform Content-Type
juggling and might find a way to perform other attacks as a result:
If one can switch to
application/xml
, XXE should be tried.If one can switch to
application/zip
, uploading malicious zip file should be tried.If one can switch to
application/php
, uploading PHP payloads should be tried.If one can switch to
application/image
, uploading malicious image should be tried.
One should not stick to this list and always try several Content-Type values.
Example attacks
Resources
Last updated
Was this helpful?