Cybersecurity
  • Mon Blog
    • 🏠Home
    • 📦Archives
      • 2024
      • 2023
      • 2022
    • 📂Catégories
    • 📧A propos de moi
  • Mes projets
    • Livres / publications
      • Sécurité des applications web - Stratégies offensives et défensives
    • MyExpense
    • XSS Exploitation Tool
  • Mes Articles
    • 2025
      • Mars
        • Comment les requêtes préparées (prepared statement) protègent-elles contre les injections SQL ?
      • Janvier
        • XSS Exploitation Tool v0.7.0
    • 2024
      • Décembre
        • XSS Exploitation Tool v0.6.0
      • Septembre
        • MyExpense v1.4
      • Aout
        • XSS Exploitation Tool v0.5.0
        • Exploitation des injections SQL au sein de la clause ORDER BY
      • Juin
        • Parution de mon livre, Sécurité des applications web - Stratégies offensives et défensives
      • Mai
        • Dompurify 3.0.10 bypass - Confusion nodeName and CDATA
        • Dompurify 3.0.9 bypass - Node type confusion
      • Avril
        • Bypass de validation d'URL et embedded credentials côté front
      • Mars
        • MyExpense v1.3
    • 2023
      • Mai
        • MyExpense v1.2
      • Mars
        • MyExpense v1.1
        • Fonctionnement de l'entête X-Content-Type-Options - Contournement de CSP
      • Février
        • Fonctionnement de l'entête HTTP Strict Transport Security Header (HSTS)
    • 2022
      • Décembre
        • Les injections CSS - Règle @import
        • Les injections CSS - Scroll-to-Text Fragment
      • Novembre
        • Les injections CSS - Attribute Selector
        • Les injections CSS - Règle @font-face et descripteur unicode
      • Octobre
        • XSS Exploitation Tool v0.4.0
      • Septembre
        • Cross-Site Scripting (XSS) et schéma d'URI javascript
      • Juillet
        • SAST - PHP CodeSniffer orienté sécurité dans Visual Studio (sous Windows)
        • SAST - PHP CodeSniffer orienté sécurité dans Visual Studio (sous Debian)
        • Est-il possible de contourner la fonction PHP htmlspecialchars() ?
  • Common Vulnerabilities and Exposures (CVE)
    • 2024
      • CVE-2024-29415
    • 2023
      • CVE-2023-42282
    • 2022
      • CVE-2022-33910
      • CVE-2022-32444
      • CVE-2022-32442
    • 2020
      • CVE-2020-26311
  • Livres
    • 2023
      • Attacking and Exploiting Modern Web Applications
      • DevSecOps - Développez et administrez vos services en toute sécurité
    • 2022
      • Hacking APIs - Breaking Web Application Programming Interfaces
    • 2018
      • Practical Web Penetration Testing
      • Web Hacking 101: How to Make Money Hacking Ethically
  • Walkthroughs
    • Capture The Flag
      • Hack.lu CTF 2019
        • Nucular Power Plant
      • TAMUctf 2019
        • 1337 Secur1ty
        • Bird Box Challenge
        • Science!
    • Deliberately Vulnerable
      • CORS vulnerable Lab
        • Application Trust Arbritrary Origin
        • Application has bad "regex" Implementation to check Trusted Origin
        • Application Trust "null" Origin
      • Damn Vulnerable Web Application (DVWA)
        • Brute Force
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • Command Injection
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • CSRF
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • File Inclusion
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • File Upload
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • Insecure CAPTCHA
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • SQL Injection
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • SQL Injection (Blind)
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • Weak Session IDs
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • XSS (DOM)
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • XSS (Reflected)
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • XSS (Stored)
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • CSP Bypass
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
        • Javascript
          • Niveau "Low"
          • Niveau "Medium"
          • Niveau "High"
      • Unescape() room
        • Level 1 (practice)
        • Level 2 (practice)
        • Level 3 (practice)
        • Level 4 (practice)
        • Level 5 (practice)
        • Level 6 (practice)
        • Level 7 (practice)
        • Level 8 (practice)
        • Level 9 (practice)
        • Level 10 (practice)
      • VulnHub
        • GoatseLinux: 1
        • Hackademic: RTB1
        • Hackademic: RTB2
        • Holynix: v1
        • Holynix: v2
        • Kioptrix: Level 1 (#1)
        • Kioptrix: Level 1.1 (#2)
        • Kioptrix: Level 1.2 (#3)
        • Kioptrix: Level 1.3 (#4)
        • LAMPSecurity: CTF4
        • LAMPSecurity: CTF5
        • LAMPSecurity: CTF6
        • Metasploitable: 1
        • pWnOS 1.0
        • pWnOS 2.0 (Pre-Release)
      • XSS Vulnerability Challenges
        • xss1
        • xss2
        • xss3
        • xss4
        • xss5
        • xxs6
        • xss7
        • xss8
Propulsé par GitBook
Sur cette page
  • Description
  • Analyse de la vulnérabilité
  • Code vulnérable
  • Correction
  • Ressources
  1. Common Vulnerabilities and Exposures (CVE)
  2. 2022

CVE-2022-33910

01 Juillet 2022

Précédent2022SuivantCVE-2022-32444

Dernière mise à jour il y a 3 mois

Je vous propose mon analyse de la CVE-2022-33910, qui est une vulnérabilité de type Cross-Site Scripting (XSS) dans l'application de suivi de bogues MantisBT.

Description

  • Vendeur : MantisBT ()

  • Produit : MantisBT ()

  • Version(s) impactée(s) : < 2.25.5

  • Type de vulnérabilité : Stored Cross-Site Scripting (XSS) ()

Les versions <2.25.5 de Mantis Bug Tracker sont vulnérables à une faille de type Cross-Site Scripting via l'upload d'un fichier au format SVG en tant que pièce jointe d'un rapport ou d'une note d'anomalie.

Analyse de la vulnérabilité

Il est possible d'attacher le fichier SVG créé pour l'occasion en déclarant une nouvelle anomalie :

ou également dans une note/commentaire d'une anomalie :

Une fois le fichier malveillant ainsi uploadé, il faudra que la victime visualise le fichier SVG, qui s'ouvrira alors dans un nouvel onglet, provoquant ainsi l'exécution du code malicieux, ou presque :

En effet, un problème de CSP vient empêcher l'exécution du script inline :

A noter que l'attaque ne peut être réalisée directement à la visualisation de l'anomalie, car le fichier SVG est affiché grâce à une balise <img /> :

Code vulnérable

Par défaut, tous les types de fichiers peuvent être uploadés :

config_default_inc.php
/**
 * Files that are allowed or not allowed.  Separate items by commas.
 * eg. 'php,html,java,exe,pl'
 * if $g_allowed_files is filled in NO other file types will be allowed.
 * $g_disallowed_files takes precedence over $g_allowed_files
 * @global string $g_allowed_files
 */
$g_allowed_files = '';

/**
 *
 * @global string $g_disallowed_files
 */
$g_disallowed_files = '';

Les fichiers ainsi présents en tant que pièces jointes sont soit, consultés directement dans le navigateur (pour les formats jpeg, gif, tiff, bmp, svg+xml, png et pdf), soit téléchargés :

file_download.php
$t_show_inline = $f_show_inline;
$t_mime_force_inline = array( 'image/jpeg', 'image/gif', 'image/tiff', 'image/bmp', 'image/svg+xml', 'image/png', 'application/pdf' );

A priori donc, rien n'interdit d'uploader un fichier SVG malveillant et aucun traitement d'assainissement ne semble être effectué :

malicious.svg
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
   <rect width="300" height="100" style="fill:rgb(0,0,255);stroke-width:3;stroke:rgb(0,0,0)" />
     <script type="text/javascript">
    alert(document.domain)
  </script>
</svg>

En temps normal, la visualisation du fichier SVG devrait provoquer l'exécution du code Javascript mais c'est sans compter sur la configuration par défaut de MantisBT. La configuration propose un ensemble de directives CSP, dont celle concernant l'exécution de Javascript, ne permettant l'exécution de fichiers Javascript provenant seulement du même domaine (self) :

HTTP/1.1 200 OK
X-Frame-Options: DENY
Content-Security-Policy: default-src 'self'; frame-ancestors 'none'; style-src 'self' 'unsafe-inline'; script-src 'self'; img-src 'self' 'self' data:
Content-Disposition: filename*=UTF-8''xss.svg; filename="xss.svg"
X-Content-Type-Options: nosniff
CContent-Type: image/svg+xml; charset=us-ascii

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
   <rect width="300" height="100" style="fill:rgb(0,0,255);stroke-width:3;stroke:rgb(0,0,0)" />
     <script type="text/javascript">
    alert(document.cookie)
  </script>
</svg>

Cette configuration est appliquée par la méthode http_security_headers() présente dans le fichier core/http_api.php :

http_api.php
# Define Content Security Policy
http_csp_add( 'default-src', "'self'" );
http_csp_add( 'frame-ancestors', "'none'" );
http_csp_add( 'style-src', "'self'" );
http_csp_add( 'style-src', "'unsafe-inline'" );
http_csp_add( 'script-src', "'self'" );
http_csp_add( 'img-src', "'self'" );
http_csp_add( 'img-src', "'self' data:" );

Pour exploiter cette vulnérabilité il faudra donc ici espérer un relâchement de la configuration de MantisBT de la part de l'administrateur en charge du site, ou alors, identifier un moyen d'uploader un fichier javascript sur le serveur puis de l'exécuter via le fichier SVG.

Correction

La vulnérabilité a été corrigée dans la version 2.25.5 de MantisBT. Tout d'abord, la configuration par défaut évolue et interdit maintenant l'upload de fichier au format SVG :

config_defaults_inc.php
/**
 * Forbidden file types (blacklist).
 *
 * All file extensions in this list will be unauthorized.
 * Separate items by commas, e.g. 'php,html,java,exe,pl,svg'.
 *
 * SVG files are disabled by default, for security reasons. It is recommended to
 * also disable all extensions that can be executed by your server;
 *
 * @see $g_allowed_files
 * @global string $g_disallowed_files
 */
$g_disallowed_files = 'svg';

Dans un second temps, lorsqu'un utilisateur va ouvrir une pièce jointe de type SVG (dans le cas ou l'administrateur aura modifié la configuration par défaut), le fichier ne sera plus visualisé dans le navigateur mais un téléchargement forcé sera effectué :

file_download.php
$t_mime_force_attachment = array(
  'application/x-shockwave-flash',
  'image/svg+xml', # SVG could contain CSS or scripting, see #30384
  'text/html',
);

Cette dernière modification permet également de corriger une vulnérabilité de type Injection CSS au sein d'un fichier SVG.

Ressources

https://github.com/mantisbt/mantisbt/commits/release-2.25.5
https://mantisbt.org/bugs/view.php?id=29135
https://www.mantisbt.org/
https://www.mantisbt.org/download.php
CWE-79 - Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')