
CVE-2026-2002 writeup e Proof-of-concept
O plugin Forminator Forms – Contact Form, Payment Form & Custom Form Builder para WordPress é vulnerável a Cross-Site Scripting Armazenado através do parâmetro form_name em todas as versões até, e incluindo, 1.50.2 devido à sanitização insuficiente da entrada e escapamento da saída. Isso permite que atacantes autenticados, com acesso de nível administrador, injetem scripts web arbitrários em páginas que serão executados sempre que um usuário acessar uma página injetada. O plugin permite que administradores concedam permissões de gerenciamento de formulários a usuários de nível inferior, o que pode tornar isso explorável por usuários como assinantes.
A causa raiz é algo que exige uma fineza de consciência de bugs lógicos: (Esta função no arquivo /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 aqui usa uma função de sanitização (wp_kses_post) para proteger XSS de usuários com privilégios inferiores, mas o problema é que ele sanitiza antes de substituir as variáveis. Como resultado, o atacante com privilégios apropriados pode usar tags HTML válidas para contornar o wp_kses_post e injetar o payload JavaScript nas variáveis, a fim de desencadear XSS.
Um atacante com privilégio de Editar Formulário pode inserir um HTML no campo HTML que se pareça com isto
E então alterar o form_name para
javascript:alert(1) ou javascript:<Payload>
| Pontuação | Severidade | Versão | String do Vetor |
|---|---|---|---|
| 4.4 | MÉDIO | 3.1 | CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:L/I:L/A:N |
Na minha opinião, este bug, embora não tenha grande severidade, exige fineza de consciência em lógica e revisão de código, como você pode ver: com apenas um pequeno erro entre duas linhas de código, ele cria uma vulnerabilidade.

Se você se identifica com esse tipo de pesquisa e quer apoiar mais investigações, pode doar e me apoiar. Agradeço sua contribuição.
╰(°▽°)╯