]> git.p6c8.net - jirafeau/jirafeau.git/commitdiff
Check for commas in MIME type before generating preview
authorPatrick Canterino <patrick@patrick-canterino.de>
Mon, 16 Jun 2025 09:58:15 +0000 (11:58 +0200)
committerPatrick Canterino <patrick@patrick-canterino.de>
Mon, 16 Jun 2025 09:58:15 +0000 (11:58 +0200)
It was possible to bypass the preview check by sending a manipulated HTTP request with a MIME type like "image/png,text/html".
When parsing the Content-Type of a HTTP response, browsers see multiple MIME types, and the last one, text/html, takes precedence, allowing to execute potentially harmful JavaScript code.

This check was originally implemented to address CVE-2022-30110 then CVE-2024-12326.

Reported by:
- Yann CAM (ycam) (https://yann.cam/)
- Killian CHEVRIER (palmier) (https://killianchevrier.fr/)

lib/functions.php

index 7ac4c9e3f4eb18fb27c2e443131e339b1cf54227..f9fbd9b72a92d79fa24e883db6f470bd30cb998a 100644 (file)
@@ -623,7 +623,7 @@ function jirafeau_is_viewable($mime)
     if (!empty($mime)) {
         $viewable = array('image', 'video', 'audio');
         $decomposed = explode('/', $mime);
-        if (in_array($decomposed[0], $viewable) && stripos($mime, 'image/svg+xml') === false) {
+        if (in_array($decomposed[0], $viewable) && stripos($mime, 'image/svg+xml') === false && strpos($mime, ',') === false) {
             return true;
         }
         $viewable = array('text/plain');

patrick-canterino.de