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.
References
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_contentparameter of thesubmit_post()function. The vulnerability exists because the protected-shortcode blocklist guard inspects thesanitize_textarea_field()copy of the submittedpost_content, while the copy actually persisted to the database is processed throughwp_kses(), whosewp_kses_no_null()step strips C0 control bytes — allowing an attacker to inject a single\x01byte inside the[wpuf-registration]tag name to defeat thestrpos()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 viaadd_shortcode()is only instantiated whenis_admin()is false, andadmin-ajaxrequests haveis_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 defaultautologin_after_registrationsetting is enabled.References