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-Typeheader ?Is the
X-Content-Type-Optionssecurity header not present ?Can the
Content-Typeheader be edited, and thePOSTrequest 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?

