
Informe y prueba de concepto de CVE-2026-2002
El complemento Forminator Forms – Contact Form, Payment Form & Custom Form Builder para WordPress es vulnerable a Cross-Site Scripting Almacenado a través del parámetro form_name en todas las versiones hasta la 1.50.2 inclusive, debido a una sanitización insuficiente de entrada y escape de salida. Esto permite a atacantes autenticados, con acceso de nivel administrador, inyectar scripts web arbitrarios en páginas que se ejecutarán cada vez que un usuario acceda a una página inyectada. El complemento permite a los administradores otorgar permisos de gestión de formularios a usuarios de nivel inferior, lo que podría hacer que esto sea explotable por usuarios como suscriptores.
La causa raíz es algo que requiere una fina conciencia de errores lógicos: (Esta función en el archivo /fields/html.php)
public function markup( $field, $views_obj ) {
$settings = $views_obj->model->settings;
$html = '';
$label = esc_html( self::get_property( 'field_label', $field ) );
$id = self::get_property( 'element_id', $field );
$form_id = false;
$html .= '<div class="forminator-field forminator-merge-tags" data-field="' . $id . '">';
if ( $label ) {
$html .= sprintf(
'<label class="forminator-label">%s</label>',
self::convert_markdown( $label )
);
}
// Check if form_id exist.
if ( isset( $settings['form_id'] ) ) {
$form_id = $settings['form_id'];
}
// To allow iframes in content.
add_filter( 'wp_kses_allowed_html', array( 'Forminator_Core', 'add_iframe_to_kses_allowed_html' ) );
$content = wp_kses_post( self::get_property( 'variations', $field ) ); // root cause here
remove_filter( 'wp_kses_allowed_html', array( 'Forminator_Core', 'add_iframe_to_kses_allowed_html' ) );
$html .= forminator_replace_variables(
$content,
$form_id
);
$html .= '</div>';
return $html;
}
Este código utiliza una función de sanitización (wp_kses_post) para proteger contra XSS de usuarios con menor privilegio, pero el problema es que sanitiza antes de reemplazar las variables. Como resultado, el atacante con el privilegio adecuado puede usar etiquetas HTML válidas para eludir wp_kses_post e inyectar el payload de JavaScript en las variables para desencadenar XSS.
Un atacante con privilegio de Editar Formulario puede insertar un HTML en el campo HTML que se vea así:
Y luego cambiar el form_name a:
javascript:alert(1) or javascript:<Payload>
| Puntuación | Severidad | Versión | Cadena de vector |
|---|---|---|---|
| 4.4 | MEDIUM | 3.1 | CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:L/I:L/A:N |
En mi opinión, aunque este error no tiene una gran severidad, requiere una fina conciencia en la lógica y la revisión de código, como se puede ver: con solo un pequeño error entre dos líneas de código se crea una vulnerabilidad.

Si te identificas con este tipo de investigación y quieres apoyar más excavaciones, puedes donar y apoyarme. Aprecio tu contribución.
╰(°▽°)╯