CVE-2026-120070 in User Frontend Plugininfo

Summary

by MITRE • 10/31/2026

The User Frontend – Membership, User Registration, User Profile, User Directory & Content Restriction with Frontend Post Submission plugin for WordPress is vulnerable to Privilege Escalation in all versions up to, and including, 4.3.13 via the `post_content` parameter of the `submit_post()` function. The vulnerability exists because the protected-shortcode blocklist guard inspects the `sanitize_textarea_field()` copy of the submitted `post_content`, while the copy actually persisted to the database is processed through `wp_kses()`, whose `wp_kses_no_null()` step strips C0 control bytes — allowing an attacker to inject a single `\x01` byte inside the `[wpuf-registration]` tag name to defeat the `strpos()` blocklist check while the clean, functional shortcode is stored verbatim; `strip_shortcodes()` does not neutralize the stored shortcode either, because the Frontend container that registers it via `add_shortcode()` is only instantiated when `is_admin()` is false, and `admin-ajax` requests have `is_admin() === true`. This makes it possible for authenticated attackers, with Subscriber-level access and above, to inject a `[wpuf-registration role="editor"]` shortcode into a published post, causing a live Editor-role registration form to be rendered publicly on the frontend that any visitor — or the attacker themselves — can submit to mint a WordPress Editor account with an immediately active privileged session when the default `autologin_after_registration` setting is enabled.

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Analysis

by VulDB Data Team • 10/31/2026

The vulnerability identified in versions up to 4.3.13 of the User Frontend plugin for WordPress represents a critical privilege escalation flaw rooted in inconsistent input sanitization and state management within the post submission workflow. The core technical failure occurs during the processing of the `post_content` parameter via the `submit_post()` function. When an authenticated user submits content, the application employs a blocklist guard to prevent the execution of potentially dangerous shortcodes such as `[wpuf-registration]`. However, this security check is performed on a sanitized copy of the input data that has been passed through `sanitize_textarea_field()`, which strips null bytes and other control characters. In contrast, the actual content persisted to the database undergoes processing by `wp_kses()`, specifically its internal function `wp_kses_no_null()`. This discrepancy creates an inconsistency where the validation logic operates on a different data representation than what is ultimately stored.

An attacker can exploit this divergence by injecting a specific byte sequence into the shortcode tag name, such as inserting a `\x01` character within `[wpuf-registration]`. The `sanitize_textarea_field()` function removes or alters this control byte during the initial validation phase, causing the blocklist check to fail to detect the malicious intent. Consequently, the content is deemed safe by the guard logic and proceeds to storage. However, when stored via `wp_kses()`, the null-byte stripping behavior allows the original structure of the shortcode to be preserved in a functional form that bypasses the initial inspection. This technique effectively defeats the strpos-based blocklist check because the validation sees one version of the string while the database stores another, cleaner version capable of execution.

The impact of this vulnerability is further amplified by how WordPress handles shortcodes during administrative versus frontend operations. The Frontend container responsible for registering the `[wpuf-registration]` shortcode via `add_shortcode()` is only instantiated when the condition `is_admin()` returns false. Since AJAX requests triggered from the admin dashboard, such as those used in post submission, operate with `is_admin() === true`, the shortcode handler is not active during the validation phase. This architectural detail ensures that while the malicious content passes through the security checks without triggering frontend execution logic at that moment, it remains stored in a state ready for immediate exploitation once accessed from the public-facing side of the website where `is_admin()` is false.

The operational impact allows authenticated attackers with Subscriber-level access and above to escalate their privileges significantly. By injecting the crafted shortcode into a published post, an attacker can cause a registration form configured for Editor role assignment to be rendered publicly on the frontend. Any visitor or the attacker themselves can then submit this form to create a new WordPress account with Editor privileges. If the site has the default `autologin_after_registration` setting enabled, which is common in many configurations, the newly created user receives an immediately active privileged session upon registration completion. This results in unauthorized administrative access without requiring password guessing or other complex exploitation techniques beyond basic content submission capabilities.

From a classification perspective, this vulnerability aligns with CWE-269: Improper Privilege Management and CWE-74: Improper Neutralization of Special Elements in Output Used by a Downstream Component (Injection). The failure to consistently sanitize input before validation constitutes an Input Validation error that leads directly to privilege escalation. In the context of the MITRE ATT&CK framework, this behavior maps to T1068: Exploitation for Privilege Escalation and potentially T1136: Create Account if the attacker creates a new user account rather than modifying existing credentials. The attack vector relies on authenticated access but exploits logical flaws in data handling rather than traditional buffer overflows or SQL injection techniques, making it particularly insidious as it bypasses standard input filtering mechanisms through semantic manipulation of control characters.

Mitigation strategies must address both the immediate code flaw and broader security hygiene practices. For administrators using affected versions, upgrading to a patched version where `post_content` is consistently sanitized before validation is essential. Until an update is applied, restricting user roles that can submit posts or disabling frontend post submission features may reduce exposure. Additionally, reviewing site configurations to disable `autologin_after_registration` for any role-based registration forms adds a layer of defense by requiring manual login verification after account creation. Security audits should also focus on ensuring that all input sanitization steps are applied uniformly across validation and storage phases to prevent similar bypasses in other plugins or custom code implementations.

Responsible

Wordfence

Reservation

10/30/2026

Disclosure

10/31/2026

Moderation

accepted

EPSS

0.00302

KEV

no

Activities

low

Sources

Want to stay up to date on a daily basis?

Enable the mail alert feature now!