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-14855-POC — SureForms <= 2.2.0 - Cross-Site Scripting Almacenado No Autenticado | Kitploit
Herramientas/GitHubGitHub/ch4r0nn/cve-2025-14855-poc
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebSeguridad WebPruebas de PenetraciónDesarrollo de Payloads
GitHubch4r0nn/cve-2025-14855-poc

CVE-2025-14855-POC

SureForms <= 2.2.0 - Cross-Site Scripting Almacenado No Autenticado

Ver Repositorio
212hace 7 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-14855: Prueba de Concepto de XSS Almacenado en el Plugin SureForms de WordPress

  • Objetivo: Plugin de WordPress "SureForms"
  • Plugin Wordpress: https://wordpress.org/plugins/sureforms/
  • Tipo de vulnerabilidad: Cross-Site Scripting Almacenado (XSS)
  • CVE: CVE-2025-14855
  • Referencia: https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/sureforms/sureforms-220-unauthenticated-stored-cross-site-scripting
  • Autenticación: Sin autenticar (Invitado/Público)
  • Impacto: Ejecución Remota de Código (RCE) mediante secuestro de sesión de administrador
  • Descubierto por: https://nguyentiendung1006.wixsite.com/tiendung

1. Resumen

Existe una vulnerabilidad crítica de XSS Almacenado en el plugin SureForms. La vulnerabilidad se origina en una implementación insegura del lado del cliente en entries.js, donde la entrada del usuario se decodifica programáticamente (revirtiendo la sanitización del lado del servidor) y luego se renderiza usando dangerouslySetInnerHTML sin una sanitización adecuada en el cliente. Esto permite a atacantes no autenticados inyectar cargas útiles de JavaScript malicioso a través de campos de formulario estándar, evadiendo los filtros predeterminados de WordPress.

wp_kses

2. Identificación de Versión

Para verificar si un sitio objetivo está ejecutando SureForms, inspeccione el encabezado del archivo de traducción, que normalmente contiene el número de versión.

URL objetivo: http://target-site.com/wp-content/plugins/sureforms/languages/sureforms.pot

Comando de verificación:

root@kitploit:~
curl -s "http://target-site.com/wp-content/plugins/sureforms/languages/sureforms.pot" | grep "Project-Id-Version"

3. Ingeniería Inversa y Análisis de Causa Raíz

La vulnerabilidad reside en la interfaz administrativa basada en React encargada de ver las entradas del formulario (entries.js).

3.1. La lógica del "Auto-Decodificador" (La Evasión)

En el archivo entries.js minificado, existe una función auxiliar (identificada como Xv en la compilación analizada) diseñada para manejar entidades HTML.

Lógica del código (reconstruida):

root@kitploit:~
// Function Xv: Pre-processing field values
var Xv = function(input) {
    var value = input.value;
    
    // VULNERABILITY ROOT CAUSE:
    // If the string contains HTML entities (e.g., &lt;), create a textarea,
    // inject the content, and extract the value. 
    // This effectively DECODES HTML entities back to raw HTML tags.
    // Example: "&lt;img ...&gt;" becomes ""
    
    if (typeof value === "string" && value.match(/&[a-zA-Z0-9#]+;/)) {
        var textarea = document.createElement("textarea");
        textarea.innerHTML = value;
        
        // Logic to revert sanitization
        if (textarea.value.includes("&lt;") || textarea.value.includes("&gt;")) {
             value = textarea.value; // Now 'value' contains RAW HTML
        }
    }
    return { ...input, value: value };
}

Análisis: Esta función anula la seguridad del backend. Incluso si WordPress almacena correctamente <script> como &lt;script&gt; en la base de datos, esta función lo convierte de nuevo a <script> inmediatamente después de obtenerlo de la API.

3.2. El Sumidero Peligroso

Después de la decodificación, los datos se pasan al componente de renderizado (identificado como Jv).

Lógica del código (reconstruida):

root@kitploit:~
// Function Jv: Rendering the field
var Jv = function(props) {
    var field = props.field;
    var val = field.value; // This value is now raw HTML (post-decoding)

    // THE TRIGGER: Check if the string looks like HTML
    if (typeof val === "string" && val.match(/<[^>]+>/g)) {
        // THE SINK: Render using dangerouslySetInnerHTML WITHOUT client-side sanitization (e.g., DOMPurify)
        return React.createElement("span", {
            dangerouslySetInnerHTML: { __html: val }
        });
    }
    
    // Safe render for non-HTML text
    return React.createElement("span", null, val);
}

4. Flujo del Ataque

  1. Inyección: Un atacante no autenticado envía un formulario en el frontend. En lugar de usar etiquetas HTML crudas (que serían eliminadas/sanitizadas por el backend de WordPress), el atacante envía Entidades HTML.

  2. Almacenamiento: WordPress ve la entrada (por ejemplo, &lt;img...) como texto seguro y la almacena en la base de datos.

  3. Ejecución (La Trampa):

    • El administrador navega a SureForms > Entries.
    • El navegador obtiene los detalles de la entrada a través de la API JSON.
    • La función Xv detecta las entidades y decodifica &lt;img... de vuelta a ` Entries.
  4. Haga clic en la entrada enviada en el Paso 1 para ver los detalles.

  5. Resultado: El navegador ejecutará la carga útil de JavaScript (alert('XSS_SUREFORMS')).

Descargar herramienta