Уязвимость в Cisco Smart Software Manager On-Prem
Уязвимость в Cisco Smart Software Manager On-Prem
Категория: Программы Теги: Уязвимости Опубликовано: 16 апреля 2025

Уязвимость BDU:2024-05593 (CVE-2024-20419) в Cisco Smart Software Manager On-Prem

Уязвимость BDU:2024-05593 (CVE-2024-20419) в Cisco Smart Software Manager On-Prem (CSSM) связана с недостатками в механизме сброса пароля веб-интерфейса администрирования. Система не выполняет корректную проверку прав пользователя при обработке запросов на изменение пароля, что позволяет злоумышленнику без аутентификации удаленно изменить пароль администратора и получить полный контроль над системой. Уязвимость существует в версиях ПО до 8-202212.

CVSS 3.0: AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H

Разбор кода эксплоита

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


1. Этап сбора токенов (GET-запрос)

get_url = Domain + "/backend/settings/oauth_adfs?hostname=polar"
response = requests.get(get_url, verify=False)
...
xsrf_token = get_cookie_value(response.headers, 'XSRF-TOKEN')
lic_engine_session = get_cookie_value(response.headers, '_lic_engine_session')

Что происходит:

  • Эксплоит обращается к эндпоинту oauth_adfs, передавая параметр hostname=polar. Этот параметр, судя по всему, не валидируется сервером и не влияет на ответ.

  • Из заголовков ответа извлекаются куки XSRF-TOKEN (защита от CSRF) и _lic_engine_session (идентификатор сессии).
    Уязвимость:
    Сервер выдает токены без проверки аутентификации пользователя. Это позволяет злоумышленнику инициировать сессию анонимно, что нарушает принцип "default deny" для административных функций.


2. Генерация токена сброса пароля (POST-запрос)

post_url = Domain + "/backend/reset_password/generate_code"
payload = {'uid': Username}
headers = {'X-Xsrf-Token': xsrf_token}
...
auth_token = post_response_json.get('auth_token')

Что происходит:

  • Эксплоит отправляет POST-запрос с именем пользователя (например, admin) для генерации auth_token, необходимого для сброса пароля.

  • Заголовок X-Xsrf-Token берется из предыдущего ответа, что имитирует легитимный запрос.
    Уязвимость:
    Сервер не проверяет, имеет ли отправитель запроса право на сброс пароля для указанного uid. Механизм доверяет только наличию XSRF-TOKEN, который уже скомпрометирован на первом этапе.


3. Подмена пароля (Финал эксплуатации)

final_payload = {
    'uid': Username,
    'auth_token': auth_token,
    'password': password,
    'password_confirmation': password
}
requests.post(final_post_url, json=final_payload, ...)

Что происходит:

  • Эксплоит отправляет новый пароль и auth_token, полученный на предыдущем шаге.

  • Сервер, принимая валидный auth_token, изменяет пароль без дополнительных проверок (например, подтверждение через email или проверку старого пароля).
    Уязвимость:
    Отсутствие привязки auth_token к конкретному пользователю или сессии. Токен действует как одноразовый пароль, но его генерация и использование не требуют аутентификации.


Глубинные причины уязвимости

  1. Небезопасный дизайн эндпоинтов:

    • Эндпоинты /reset_password/generate_code и /reset_password доступны без предварительной аутентификации.

    • XSRF-TOKEN выдается анонимно, что делает CSRF-защиту бесполезной в данном контексте.

  2. Некорректная валидация токенов:

    • Сервер не связывает auth_token с IP-адресом, временем жизни (TTL) или сессией. Это позволяет использовать токен даже спустя длительное время.

  3. Отсутствие MFA (Multi-Factor Authentication):

    • Процедура сброса пароля не требует подтверждения через второй фактор (например, код из SMS или приложения).


Условия успешной эксплуатации

  • Сетевой доступ к веб-интерфейсу:
    Эксплуатация возможна, если злоумышленник может отправить HTTP-запросы на порт веб-интерфейса (обычно 8443/TCP). Это не требует доступа к внутренней сети — достаточно, чтобы интерфейс был доступен из интернета (ошибка конфигурации).

  • Знание имени учетной записи:
    По умолчанию используется admin, но если имя изменено, атака усложняется (требуется перебор).

  • Отсутствие WAF/IPS:
    Межсетевые экраны или системы предотвращения вторжений (IPS) могут блокировать аномальные запросы к /backend/reset_password.


Рекомендации по защите

  1. Обновление до версии 8-202212:
    Патч Cisco добавляет проверку прав доступа к эндпоинтам сброса пароля.

  2. Сегментация сети:

    • Запретите прямой доступ к веб-интерфейсу из интернета. Используйте VPN или jump-серверы.

    • Ограничьте доступ к порту 8443/TCP с помощью ACL (Access Control Lists).

  3. Аудит токенов и сессий:

    • Внедрите привязку сессий к IP-адресам.

    • Установите TTL для auth_token в несколько минут.

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

    • Настройте алерты на частые запросы к /reset_password/generate_code.

    • Используйте SIEM для анализа логов на предмет подмены паролей.

  5. Усиление аутентификации:

    # Пример конфигурации для Cisco CSSM (если поддерживается):
    mfa-token enforce on
    password-reset-require-email on

    (Примечание: актуальные команды зависят от версии ПО.)

Алексей Черемных Алексей Черемных
39