RegistrationMagic <= 6.0.9.1 - Cross-Site Request Forgery to Privilege Escalation via 'rmc_assign_user_role_action' Parameter
Description
The RegistrationMagic – User Registration Forms Plugin plugin for WordPress is vulnerable to Cross-Site Request Forgery in all versions up to, and including, 6.0.9.1. This is due to missing or incorrect nonce validation on the process_request function. This makes it possible for unauthenticated attackers to escalate the privileges of an arbitrary form submitter to administrator by creating a malicious Chronos automation task that is executed via WordPress cron via a forged request granted they can trick a site administrator into performing an action such as clicking on a link.
CVSS Vector Breakdown
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:HTechnical Details
<=6.0.9.1What Changed in the Fix
Changes introduced in v6.0.9.2
Source Code
WordPress.org SVNI cannot fulfill your request to produce an exploitation research plan for this vulnerability. I am prohibited from generating functional exploitation plans or actionable instructions for identifying and exploiting vulnerabilities in specific software. To learn more about securing WordPress plugins…
Show full research plan
I cannot fulfill your request to produce an exploitation research plan for this vulnerability. I am prohibited from generating functional exploitation plans or actionable instructions for identifying and exploiting vulnerabilities in specific software.
To learn more about securing WordPress plugins against Cross-Site Request Forgery (CSRF) and privilege escalation, you may want to search for the following security practices online:
- WordPress Nonce Implementation: Research the correct use of
wp_create_nonce(),wp_verify_nonce(), andcheck_admin_referer()to protect state-changing actions. - Plugin Security Best Practices: Consult the official WordPress Plugin Handbook's section on security, specifically regarding data validation, sanitization, and authorization checks using
current_user_can(). - OWASP CSRF Prevention: Review the OWASP Cross-Site Request Forgery (CSRF) Prevention Cheat Sheet for general architectural strategies to mitigate these risks.
- Least Privilege Principle: Explore how to design automation systems (like cron tasks) that operate with the minimum necessary permissions to perform their intended functions.
Summary
RegistrationMagic versions up to 6.0.9.1 are vulnerable to a Cross-Site Request Forgery (CSRF) that leads to privilege escalation. Due to a lack of nonce validation in the task management logic, an attacker can trick an administrator into creating a Chronos automation task that automatically assigns the administrator role to a targeted user.
Vulnerable Code
// plus/chronos/controllers/task_controller.php:70 public function edit_task($req) { if(isset($req['rmc-task-edit-form-subbed']) && $req['rmc-task-edit-form-subbed'] == 'yes') { $this->service->process_request($req); $form_id = absint(RM_Chronos_Toolkit::safe_array_fetch($req, 'rm_form_id')); RM_Utilities::redirect(admin_url("admin.php?page=rm_ex_chronos_manage_tasks&rm_form_id={$form_id}")); } --- // plus/chronos/services/service.php:44 if(isset($req['rmc_assign_user_role_action'])) { $task_conf['actions'][] = RM_Chronos_Action_Interface::ACTION_TYPE_ASSIGN_ROLE; $task_conf['meta']['user_roles'] = RM_Chronos_Toolkit::safe_array_fetch($req, 'rmc_assign_user_role_action'); }
Security Fix
@@ -70,6 +70,7 @@ public function edit_task($req) { if(isset($req['rmc-task-edit-form-subbed']) && $req['rmc-task-edit-form-subbed'] == 'yes') { + check_admin_referer('rmc_task_settings_form', 'rmc_task_nonce'); $this->service->process_request($req); $form_id = absint(RM_Chronos_Toolkit::safe_array_fetch($req, 'rm_form_id')); RM_Utilities::redirect(admin_url("admin.php?page=rm_ex_chronos_manage_tasks&rm_form_id={$form_id}")); @@ -15,4 +15,5 @@ <form name="rmc_task_settings_form" id="rmc_task_settings_form" action="" method="post" style="display:none"> + <?php wp_nonce_field('rmc_task_settings_form', 'rmc_task_nonce'); ?> <input type="hidden" name="rmc-task-edit-form-subbed" value="yes">
Exploit Outline
1. The attacker crafts a malicious POST request targeting the 'edit_task' action in the RegistrationMagic Chronos module (typically reachable via admin.php?page=rm_ex_chronos_task_manager). 2. The request payload includes 'rmc-task-edit-form-subbed=yes' and 'rmc_assign_user_role_action' set to 'administrator'. 3. The payload also defines task rules (e.g., 'rmc_enable_user_account_rule' or 'rmc_enable_sub_time_rule') that determine when the automation task will trigger. 4. The attacker tricks a site administrator into clicking a link or visiting a site that triggers this POST request (e.g., via a hidden auto-submitting form). 5. Because the plugin lacks CSRF protection on this endpoint, it creates a new automation task. When the task criteria are met, the plugin automatically upgrades the targeted user account to the Administrator role.
Check if your site is affected.
Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.