
CVE-2026-2002 Write-up und Proof-of-Concept
Das Plugin Forminator Forms – Contact Form, Payment Form & Custom Form Builder für WordPress ist in allen Versionen bis einschließlich 1.50.2 anfällig für gespeichertes Cross-Site-Scripting über den form_name-Parameter, bedingt durch unzureichende Eingabebereinigung und Ausgabe-Escaping. Dadurch ist es authentifizierten Angreifern mit Administratorzugriff möglich, beliebige Web-Skripte in Seiten einzuschleusen, die immer dann ausgeführt werden, wenn ein Benutzer eine manipulierte Seite aufruft. Das Plugin erlaubt Administratoren, Formularverwaltungsrechte an Benutzer mit niedrigeren Berechtigungen zu vergeben, was diese Schwachstelle auch für Benutzer wie Abonnenten ausnutzbar machen könnte.
Die Grundursache ist etwas, das ein feines Gespür für das Erkennen von Logikfehlern erfordert: (Diese Funktion in der Datei /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;
}
Dieser Code verwendet eine Bereinigungsfunktion (wp_kses_post), um XSS durch Benutzer mit niedrigeren Berechtigungen zu verhindern. Das Problem ist jedoch, dass die Bereinigung vor dem Ersetzen der Variablen erfolgt. Infolgedessen kann ein Angreifer mit entsprechenden Berechtigungen gültige HTML-Tags verwenden, um wp_kses_post zu umgehen und die JavaScript-Nutzlast in die Variablen einzuschleusen, um XSS auszulösen.
Ein Angreifer mit der Berechtigung „Formular bearbeiten“ kann HTML-Code in ein HTML-Feld einfügen, der wie folgt aussieht:
Und dann den form_name in Folgendes ändern:
javascript:alert(1) or javascript:<Payload>
| Punktzahl | Schweregrad | Version | Vektor-String |
|---|---|---|---|
| 4.4 | MITTEL | 3.1 | CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:L/I:L/A:N |
Meiner Meinung nach hat dieser Bug zwar keinen großen Schweregrad, aber er erfordert ein feines Gespür für Logik- und Code-Review-Bewusstsein, wie man sieht: Schon ein kleiner Fehler zwischen zwei Codezeilen kann eine Schwachstelle erzeugen.

Wenn dir diese Art von Forschung gefällt und du weitere Untersuchungen unterstützen möchtest, kannst du spenden und mich unterstützen. Ich weiß deinen Beitrag zu schätzen.
╰(°▽°)╯