Atomic Edge Proof of Concept automated generator using AI diff analysis
Published : June 11, 2026

CVE-2026-2500: Quick Playground <= 1.3.4 Authenticated (Administrator+) Arbitrary File Read via 'filename' Parameter PoC, Patch Analysis & Rule

CVE ID CVE-2026-2500
Severity Medium (CVSS 4.4)
CWE 22
Vulnerable Version 1.3.4
Patched Version 1.3.5
Disclosed June 4, 2026

Analysis Overview

Atomic Edge analysis of CVE-2026-2500:

This vulnerability allows an authenticated administrator to read arbitrary files from the server. The flaw exists in the Quick Playground plugin’s `qckply_data()` function, specifically in the `client-qckply_data.php` file. The vulnerability has a CVSS score of 4.4.

Root Cause: The `file_get_contents()` function in `client-qckply_data.php` (line 10 of the diff) directly uses the user-supplied `filename` POST parameter without any validation, sanitization, or path restriction. An attacker can supply an arbitrary file path (e.g., `../../wp-config.php`) as the `filename` parameter. The function then reads the contents of that file and returns them as a base64-encoded string. No checks ensure the path stays within the uploads directory or that it is a legitimate file.

Exploitation: An attacker with administrator privileges sends a POST request to the WordPress admin page at `/wp-admin/admin.php?page=qckply_data`. The request includes a `filename` POST parameter containing the path to the target file. For example, `filename=../../../../etc/passwd` or an absolute path. The response contains a `

` element with the base64-encoded contents of the file. The attacker can decode the base64 string to obtain the file contents in plaintext.

Patch Analysis: The patch adds multiple layers of validation. It uses `sanitize_file_name()` and `wp_unslash()` to normalize the input. It then resolves the absolute path using `realpath()` and checks that the resolved path starts with the WordPress uploads base directory (`$base_dir`). A successful read only occurs if the file exists (`is_file()`) and is readable (`is_readable()`). This ensures only files within the uploads directory can be accessed.

Impact: An attacker who exploits this vulnerability can read sensitive files from the server. This includes `wp-config.php` (which contains database credentials, salts, and secret keys), `/etc/passwd` (user account information), or any other file readable by the web server process. Such file disclosure can lead to complete compromise of the WordPress site, including database access and remote code execution via stolen credentials or secret keys.

Differential between vulnerable and patched code

Below is a differential between the unpatched vulnerable code and the patched update, for reference.

Code Diff
--- a/quick-playground/client-qckply_data.php
+++ b/quick-playground/client-qckply_data.php
@@ -6,10 +6,20 @@
     if(isset($_GET['att'])) {
         print_r(wp_get_attachment_metadata(intval($_GET['att'])));
     }
-    if(isset($_POST['filename'])) {
-    $imgcontent = file_get_contents($_POST['filename']);
-    $base64 = base64_encode($imgcontent);
-    printf('<p>%s</p>',$base64);
+    if ( isset( $_POST['filename'] ) ) {
+        $filename   = sanitize_file_name( wp_unslash( $_POST['filename'] ) );
+        $upload_dir = wp_upload_dir();
+        $base_dir   = realpath( $upload_dir['basedir'] );
+        $filepath   = realpath( $upload_dir['basedir'] . '/' . $filename );
+
+        // Ensure the resolved path is within the uploads directory.
+        if ( $base_dir && $filepath && strpos( $filepath, $base_dir ) === 0 && is_file( $filepath ) && is_readable( $filepath ) ) {
+            $imgcontent = file_get_contents( $filepath );
+            if ( false !== $imgcontent ) {
+                $base64 = base64_encode( $imgcontent );
+                printf( '<p>%s</p>', esc_html( $base64 ) );
+            }
+        }
     }
     printf('<form method="post" action="%s"><input name="filename" value=""><button>Submit</button></form>',admin_url('admin.php?page=qckply_data'));
     global $wpdb;
--- a/quick-playground/quick-playground.php
+++ b/quick-playground/quick-playground.php
@@ -3,7 +3,7 @@
  * Plugin Name: Quick Playground
  * Plugin URI:  https://quickplayground.com
  * Description: Preview your content in different themes or test plugins using WordPress Playground. Quickly create Theme and Plugin demo, testing, and staging websites.
- * Version:     1.3.4
+ * Version:     1.3.5
  * Author:      David F. Carr
  * License:     GPL2
  * Text Domain: quick-playground

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