Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2025-68116 — Eine Dokumentation zu CVE-2025-68116 | Kitploit
Tools/GitHubGitHub/x0root/cve-2025-68116
SchwachstellenanalyseExploitationWebsicherheitPenetrationstestsPapers & ForschungLernen & Bildung
GitHubx0root/cve-2025-68116

CVE-2025-68116

Eine Dokumentation zu CVE-2025-68116

Repository anzeigen
14vor 10 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2025-68116

Autor: @x0root
Sicherheitslücke: Persistentes Cross-Site-Scripting (XSS) durch browser-renderbare Uploads (SVG / HTML)
Betroffene Software: FileRise (< 2.7.1)
Gepatchte Version: 2.7.1
Offizielle CVE (beantragt via GHSA): CVE-2025-68116 (Tracking/Advisory: GHSA-35pp-ggh6-c59c)
Vorhergehendes zugehöriges Advisory (ursprüngliche Absicherung, die umgangen wurde): GHSA-qrcv-vjvf-fr29

CVSS-Bewertung:

  • CNA (GitHub): CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:L — 8,9 (Hoch)
  • Reporter (Autorenanalyse): CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:L — 9,6 (Kritisch)

CVSS-Bewertungsgrundlage (Reporter)

Die Bewertung des Reporters bewertet die erforderlichen Berechtigungen (Privileges Required, PR) zum Zeitpunkt der Ausnutzung, nicht zum Zeitpunkt des Einbringens der Sicherheitslücke.

Die Ausnutzung erfolgt, wenn ein Opfer auf einen generierten öffentlichen Freigabelink zugreift, was keine Authentifizierung oder Berechtigungen erfordert (PR:N).

Die CNA-Bewertung bewertet PR basierend auf der Fähigkeit, eine schädliche Datei hochzuladen. Jedoch definiert CVSS v3.1 die erforderlichen Berechtigungen (PR) als die Berechtigungen, die ein Angreifer zum Zeitpunkt der Ausnutzung der Sicherheitslücke besitzen muss, nicht die Berechtigungen, die erforderlich sind, um die verwundbare Bedingung zu platzieren oder vorzubereiten.

Daher spiegelt PR:N die realen Ausnutzungsbedingungen genauer wider, was zu einer Klassifizierung als Kritisch (9,6) führt.

Hinweis: GHSA-qrcv-vjvf-fr29 führte eine Absicherung ein, die verhinderte, dass SVGs innerhalb der FileRise-Weboberfläche (Vorschaufenster) gerendert wurden. Dieser Bericht dokumentiert eine Umgehung dieser Absicherung – insbesondere die Backend-Freigabe/Download-Endpunkte – die als GHSA-35pp-ggh6-c59c / CVE-2025-68116 verfolgt wird.


Zusammenfassung

Dieses Dokument ist eine vollständige technische Aufzeichnung von CVE-2025-68116: einem persistenten XSS in FileRise, das nach einer früheren Absicherung bestehen blieb und schließlich in v2.7.1 behoben wurde. Es umfasst die Entdeckung, Proof-of-Concepts zur Ausnutzung, wiederholte fehlgeschlagene Korrekturen, eine präzise Root-Cause-Kontrollflussanalyse (mit Belegen), die endgültige Verifizierung des Patches und eine Analyse der für die CVSS-Bewertung relevanten Ausnutzbarkeitsmerkmale. Alle nachfolgenden Inhalte basieren auf reproduzierten Tests, Controller-Inspektion und dem öffentlichen Advisory-Thread.


1. Hintergrund: Vorhergehendes Advisory und unvollständige Korrektur

Ein vorhergehendes Advisory, GHSA-qrcv-vjvf-fr29, adressierte persistentes XSS über SVG-Uploads, indem es die Inline-Rendering in der FileRise-Weboberfläche blockierte. Diese Absicherung adressierte nicht, wie SVG-Dateien von Backend-Endpunkten wie den folgenden ausgeliefert wurden:

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

CVE-2025-68116 (verfolgt als GHSA-35pp-ggh6-c59c) dokumentiert eine Umgehung der GHSA-qrcv-vjvf-fr29-Absicherung: Ein Angreifer kann ein präpariertes SVG speichern und es Opfern über öffentliche Freigabelinks oder bestimmte Download-Verhalten zustellen, was zur Skriptausführung im FileRise-Ursprung führt.


2. Entdeckung: Proof-of-Concept-Upload und Umgehung

Um zu validieren, ob das Backend SVGs immer noch in einer renderbaren Weise auslieferte, lud ich ein einfaches PoC-SVG hoch:

Der Zugriff auf die Datei über:

  • /api/file/download.php?…
    und, was wichtiger ist, über:
  • /api/file/share.php?token=…

führte zur Ausführung von alert(). Die ursprüngliche GHSA-qrcv-vjvf-fr29-Absicherung (UI-Vorschau-Block) wurde durch direkten Zugriff auf diese Endpunkte umgangen.


3. Nachweis der realen Auswirkungen

Ein alert() ist ein PoC; ich testete auf sinnvolle Auswirkungen, indem die Nutzlast mit internen APIs interagierte.

Verwendete Testnutzlast:

<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>

Wenn ein eingeloggter Administrator einen Freigabelink öffnete, der dieses SVG enthielt, wurde das Skript ausgeführt und stellte authentifizierte API-Anfragen. Beobachtete Effekte umfassten:

  • API-Antworten wurden an das Skript zurückgegeben (sensible Informationen könnten offengelegt werden)
  • Die API-Antwort zeigte den CSRF-Token-Status an (z. B. {"csrf_expired":true,"csrf_token":"..."})
  • Die Interaktion invalidiierte den bestehenden CSRF-Token des Administrators, wodurch weitere zustandsändernde Aktionen bis zur Wiederherstellung verhindert wurden (praktischer Denial-of-Service gegen Admin-Funktionen)

Während der Tests demonstrierte Impact-Klassifizierung:

  • Vertraulichkeit: Hoch (C:H)
  • Integrität: Hoch (I:H)
  • Verfügbarkeit: Niedrig (A:L)

4. Offenlegungszeitplan und wiederholte Korrekturversuche

Ich meldete das Problem privat. Der Maintainer veröffentlichte mehrere inkrementelle Korrekturen:

  • v2.6.0 — Absicherung auf den Download-Endpunkt angewendet; Freigabe-Endpunkt weiterhin verwundbar.
  • v2.6.2 — Weitere Versuche; Freigabe-Endpunkt blieb in meinen Tests verwundbar.
  • v2.7.0 — Behauptete Härtung für den Freigabe-Endpunkt; in meiner Umgebung weiterhin ausnutzbar.
  • v2.7.1 — Endgültige Korrektur, die ich als das Problem behoben verifizierte (siehe Verifizierungsabschnitt).

Während v2.6.0 → v2.7.0 lieferte der Freigabelink-Endpunkt das SVG weiterhin so aus, dass Inline-Rendering und Skriptausführung möglich waren. Die folgende Root-Cause-Analyse erklärt, warum die früheren Korrekturen den Vektor nicht vollständig schließen konnten.


5. Root-Cause-Analyse — Kontrollfluss und Header-Fehler (Belege)

Die zugrunde liegende Ursache war nicht ein einzelner fehlender Header, sondern Kontrollfluss und Ausgabereihenfolge innerhalb von shareFile() (Controller), die verhinderten, dass die Sicherheitsheader in vielen Ausführungspfaden angewendet wurden. Zwei Problemklassen waren vorhanden:

  • Mehrere frühe exit;-Punkte, die die Funktion kurzschlossen, bevor Sicherheitsheader gesetzt wurden.
  • PHP-Warnungen/Hinweise, die vor den Header-Aufrufen Ausgabe erzeugten, was „Headers already sent“-Fehler verursachte.

5.1 Aufzählung der frühen Ausstiege

Ich verwendete einen awk-Scan, um header()- und exit;-Vorkommen innerhalb von shareFile() bis zum readfile()-Aufruf aufzulisten:

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

Beobachtete Ausgabe (gekürzt aus meinem Lauf):

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;

Sicherheitsheader (die Härtungslogik) beginnen bei Zeile ~1743:

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

Da die Funktion in vielen Pfaden früher Header + exit; ausgibt, erreichten diese Anfragen nie den Härtungscode, der Content-Disposition, nosniff oder den restriktiven Typ setzt.

5.2 Passwortabfrage-Pfad

Im passwortgeschützten Freigabeablauf gab die Funktion das Passwortabfrage-HTML früh aus:

if (!empty($record['password']) && empty($providedPass)) { header("Content-Type: text/html; charset=utf-8"); ... exit; }

Tool herunterladen