Flozen WordPress Theme Unauthenticated Arbitrary File Upload (CVE-2025-49071)
by xShadow-Here (Friska); original vulnerability discovered by Phat RiO - BlueRock (Wordfence) · 2026-07-06
- Severity
- Critical
- CVE
- CVE-2025-49071
- Category
- web
- Affected product
- Flozen Theme for WordPress
- Affected versions
- < 1.5.1
- Disclosed
- 2026-07-06
- Patch status
- unpatched
Tags
References
Archive entry
intelseclab/poc-archiveMetadata
| Field | Value |
|---|---|
| Date Added | 2026-07-06 |
| Last Updated | 2026-07-06 |
| Author / Researcher | xShadow-Here (Friska); original vulnerability discovered by Phat RiO - BlueRock (Wordfence) |
| CVE / Advisory | CVE-2025-49071 |
| Category | web |
| Severity | Critical |
| CVSS Score | 9.8 (per NVD/Wordfence) |
| Status | Weaponized |
| Tags | wordpress, flozen-theme, arbitrary-file-upload, unauthenticated, webshell, zip-upload, rce, cwe-434, python |
| Related | N/A |
Affected Target
| Field | Value |
|---|---|
| Software / System | Flozen Theme for WordPress |
| Versions Affected | < 1.5.1 |
| Language / Platform | Python 3 PoC targeting a PHP/WordPress site |
| Authentication Required | No |
| Network Access Required | Yes (HTTP to target WordPress site) |
Summary
The Flozen Theme for WordPress (versions up to and including 1.5.1) registers a wp_handle_upload-routed AJAX action (backed by the theme’s flozen_add_new_custom_font() function) that accepts a ZIP file upload without checking authentication or validating its contents. The theme automatically extracts the uploaded ZIP into wp-content/uploads/nasa-custom-fonts/, so an attacker can package a PHP web shell inside a ZIP disguised as a “custom font” package. Because .htaccess in the payload allows PHP execution and the extracted files land in a public, web-accessible directory, this results in full unauthenticated remote code execution.
Vulnerability Details
Root Cause
The theme’s custom-font upload handler (flozen_add_new_custom_font()) is reachable via wp-admin/admin-ajax.php with action=wp_handle_upload and performs no capability/auth check and no validation that the uploaded ZIP contains only font files. It extracts the archive verbatim into a predictable, web-accessible path. The PoC’s payload (shadow.zip) contains:
index.php— a minimal web shell that accepts a file upload via$_FILES['f']and callsmove_uploaded_file(), printing a<button>-Shadow-Here-</button>marker used by the scanner to confirm success.htaccess— explicitly re-enables PHP execution in the extraction directory (Allow from allfor\.php$), defeating any Apache-level PHP-execution restriction that might otherwise apply to the uploads folderindex.phtml,index.phar— duplicate shell payloads with alternate executable extensions as a fallback in case.phpexecution is blocked
The exploit script (shadow.py) simply POSTs this ZIP:
| |
Attack Vector
- Probe the target for the Flozen theme by requesting
wp-content/themes/flozen-theme/style.cssand extracting theVersion:header; sites below 1.5.1 are flagged vulnerable. - POST the malicious
shadow.zip(containing the PHP web shell and permissive.htaccess) towp-admin/admin-ajax.phpwithaction=wp_handle_uploadand the file fieldzip_packet_font— no authentication cookie or nonce is required. - The theme’s handler extracts the ZIP into
wp-content/uploads/nasa-custom-fonts/shadow/, placingindex.php(the web shell) alongside a.htaccessthat guarantees PHP execution is allowed. - Verify success by requesting
wp-content/uploads/nasa-custom-fonts/shadow/index.phpand checking for the<button>-Shadow-Here-</button>marker string. - Use the deployed web shell’s file-upload form (
$_FILES['f']) to upload further tooling or a more capable shell, achieving full remote code execution.
Impact
Unauthenticated remote code execution on any WordPress site running the vulnerable Flozen theme — an attacker can plant and execute arbitrary PHP, then pivot to full server compromise.
Environment / Lab Setup
Target: WordPress site with Flozen Theme < 1.5.1 active
Attacker: Python 3 + requests, colorama; shadow.zip payload and a text file of target URLs
Proof of Concept
PoC Script
See
shadow.pyandshadow.zipin this folder.
| |
Detection & Indicators of Compromise
Signs of compromise:
- Unexpected directories/files under
wp-content/uploads/nasa-custom-fonts/ - A
.htaccessfile granting.phpexecution inside the uploads tree (normally blocked by default WordPress hardening) - Files containing the string
-Shadow-Here-or an unexplained$_FILES['f']upload form - Unauthenticated POSTs to
admin-ajax.php?action=wp_handle_uploadwith ZIP attachments
Remediation
| Action | Detail |
|---|---|
| Primary fix | Upgrade the Flozen Theme to version 1.5.1 or later, which is expected to add authentication/capability checks and file-type validation to the custom-font upload handler |
| Interim mitigation | Disable or remove the Flozen theme’s custom-font upload feature pending patch; block PHP execution in wp-content/uploads/ at the web server level; monitor/alert on ZIP uploads to admin-ajax.php |
References
Notes
Mirrored from https://github.com/xShadow-Here/CVE-2025-49071 on 2026-07-06. shadow.py detects the vulnerable theme version and uploads a minimal PHP webshell matching the file-upload CVE, with no hidden extra payloads — the ZIP contains only the expected shell/.htaccess files consistent with the documented vulnerability.
| |