Skip to content
KitploitKITPLOIT
OutilsBlog
Log in
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2025-68116 — Une documentation de CVE-2025-68116 | Kitploit
Outils/GitHubGitHub/x0root/cve-2025-68116
Analyse des VulnérabilitésExploitationSécurité WebTests d'IntrusionArticles et RechercheApprentissage et Éducation
GitHubx0root/cve-2025-68116

CVE-2025-68116

Une documentation de CVE-2025-68116

Voir le dépôt
13il y a 9 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2025-68116

Auteur : @x0root
Vulnérabilité : Cross-Site Scripting (XSS) stocké via des téléversements interprétables par le navigateur (SVG / HTML)
Logiciel concerné : FileRise (< 2.7.1)
Version corrigée : 2.7.1
CVE officielle (demandée via GHSA) : CVE-2025-68116 (suivi/avis : GHSA-35pp-ggh6-c59c)
Avis connexe antérieur (atténuation originale contournée) : GHSA-qrcv-vjvf-fr29

Évaluation CVSS :

  • CNA (GitHub) : CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:L — 8,9 (Élevé)
  • Signaleur (analyse de l’auteur) : CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:L — 9,6 (Critique)

Justification du score CVSS (signaleur)

L’évaluation du signaleur évalue les Privilèges Requis (PR) au moment de l’exploitation, et non au moment du dépôt de la vulnérabilité.

L’exploitation se produit lorsqu’une victime accède à un lien de partage public généré, ce qui ne nécessite aucune authentification ni privilège (PR:N).

L’évaluation du CNA évalue PR en fonction de la capacité à téléverser un fichier malveillant. Cependant, CVSS v3.1 définit les Privilèges Requis (PR) comme les privilèges qu’un attaquant doit posséder au moment où la vulnérabilité est exploitée, et non les privilèges nécessaires pour placer ou préparer la condition vulnérable.

Par conséquent, PR:N reflète plus précisément les conditions d’exploitation réelles, ce qui donne une classification de sévérité Critique (9,6).

Note : GHSA-qrcv-vjvf-fr29 a introduit une atténuation qui empêchait le rendu des SVG dans l’interface web de FileRise (volet de prévisualisation). Ce rapport documente un contournement de cette atténuation — spécifiquement les points de terminaison backend de partage/téléchargement — qui est suivi sous GHSA-35pp-ggh6-c59c / CVE-2025-68116.


Résumé

Ce document constitue un enregistrement technique complet de CVE-2025-68116 : un XSS stocké dans FileRise qui a persisté après une atténuation précédente et a finalement été corrigé dans la v2.7.1. Il comprend la découverte, les preuves de concept d’exploitation, les correctifs infructueux répétés, une analyse précise du flux de contrôle de la cause racine (avec preuves), la vérification finale du correctif, ainsi qu’une analyse des caractéristiques d’exploitabilité pertinentes pour l’évaluation CVSS. Tout le contenu ci-dessous est basé sur des tests reproduits, une inspection du contrôleur et le fil de discussion public de l’avis.


1. Contexte : Avis antérieur et correctif incomplet

Un avis antérieur, GHSA-qrcv-vjvf-fr29, traitait du XSS stocké via les téléversements SVG en bloquant le rendu en ligne dans l’interface web de FileRise. Cette atténuation n’a pas traité la manière dont les fichiers SVG étaient servis par les points de terminaison backend tels que :

  • /api/file/download.php
  • /api/file/share.php

CVE-2025-68116 (suivi sous GHSA-35pp-ggh6-c59c) documente un contournement de l’atténuation GHSA-qrcv-vjvf-fr29 : un attaquant peut stocker un SVG conçu et le livrer aux victimes via des liens de partage publics ou certains comportements de téléchargement, entraînant l’exécution de scripts dans l’origine FileRise.


2. Découverte : Téléversement de preuve de concept et contournement

Pour valider si le backend exposait encore les SVG de manière interprétable, j’ai téléversé un SVG PoC simple :

L’accès au fichier via :

  • /api/file/download.php?…
    et, plus important encore, via :
  • /api/file/share.php?token=…

a entraîné l’exécution de alert(). L’atténuation originale de GHSA-qrcv-vjvf-fr29 (blocage de la prévisualisation dans l’interface) a été contournée par un accès direct à ces points de terminaison.


3. Preuve de l’impact réel

Un alert() est une preuve de concept ; j’ai testé un impact significatif en faisant interagir la charge utile avec les API internes.

Charge utile de test utilisée :

<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
  <script type="text/javascript">
    fetch('/api/upload/upload.php')
      .then(response => response.text())
      .then(data => alert('API Response: ' + data));
  </script>
</svg>

Lorsqu’un administrateur connecté ouvrait un lien de partage contenant ce SVG, le script s’exécutait et effectuait des requêtes API authentifiées. Les effets observés comprenaient :

  • Les réponses API renvoyées au script (des informations sensibles pouvaient être exposées)
  • La réponse API indiquait l’état du token CSRF (par exemple {"csrf_expired":true,"csrf_token":"..."})
  • L’interaction invalidait le token CSRF existant de l’administrateur, empêchant d’autres actions modifiant l’état jusqu’à la récupération (déni de service pratique contre les fonctions d’administration)

Classification de l’impact démontrée lors des tests :

  • Confidentialité : Élevée (C:H)
  • Intégrité : Élevée (I:H)
  • Disponibilité : Faible (A:L)

4. Calendrier de divulgation et tentatives de correctif répétées

J’ai signalé le problème de manière privée. Le mainteneur a publié plusieurs correctifs progressifs :

  • v2.6.0 — Atténuation appliquée au point de terminaison de téléchargement ; le point de terminaison de partage restait vulnérable.
  • v2.6.2 — Autres tentatives ; le point de terminaison de partage restait vulnérable dans mes tests.
  • v2.7.0 — Durcissement revendiqué pour le point de terminaison de partage ; toujours exploitable dans mon environnement.
  • v2.7.1 — Correctif final que j’ai vérifié comme résolvant le problème (voir section Vérification).

Tout au long des versions v2.6.0 → v2.7.0, le point de terminaison du lien de partage continuait de servir le SVG d’une manière permettant le rendu en ligne et l’exécution de scripts. L’analyse de la cause racine ci-dessous explique pourquoi les correctifs précédents n’ont pas réussi à fermer complètement la vecteur.


5. Analyse de la cause racine — Flux de contrôle et échec des en-têtes (preuves)

La cause sous-jacente n’était pas un seul en-tête manquant mais l’ordre du flux de contrôle et de la sortie dans shareFile() (contrôleur), ce qui empêchait l’application des en-têtes de sécurité dans de nombreux chemins d’exécution. Deux classes de problèmes étaient présentes :

  • Plusieurs points exit; précoces qui court-circuitaient la fonction avant que les en-têtes de sécurité ne soient définis.
  • Des avertissements/notices PHP qui émettaient une sortie avant les appels d’en-tête, provoquant des erreurs « headers already sent ».

5.1 Énumération des sorties précoces

J’ai utilisé un scan awk pour lister les occurrences de header() et exit; dans shareFile() jusqu’à l’appel readfile() :

Commande : awk '/function shareFile(/ {flag=1} /readfile(/ {flag=0} flag && /(header|exit;)/ {printf "%4d | %s\n", NR, $0}' src/controllers/FileController.php

Sortie observée (abrégée de mon exécution) :

1649 | header('Content-Type: application/json; charset=utf-8'); 1651 | exit; 1657 | header('Content-Type: application/json; charset=utf-8'); 1659 | exit; 1664 | header('Content-Type: application/json; charset=utf-8'); 1666 | exit; 1670 | header("Content-Type: text/html; charset=utf-8"); 1693 | exit; 1699 | header('Content-Type: application/json; charset=utf-8'); 1701 | exit; 1719 | header('Content-Type: application/json; charset=utf-8'); 1721 | exit; 1725 | header('Content-Type: application/json; charset=utf-8'); 1727 | exit;

Les en-têtes de sécurité (la logique de durcissement) commencent vers la ligne ~1743 :

1743 | header('X-Content-Type-Options: nosniff'); ... 1770 | header("Content-Disposition: attachment; ...");

Parce que la fonction émet des en-têtes + exit; plus tôt dans de nombreux chemins, ces requêtes n’atteignaient jamais le code de durcissement qui définit Content-Disposition, nosniff ou le type restrictif.

5.2 Chemin de demande de mot de passe

Télécharger l’outil