
Уязвимость 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
к конкретному пользователю или сессии. Токен действует как одноразовый пароль, но его генерация и использование не требуют аутентификации.
Глубинные причины уязвимости
-
Небезопасный дизайн эндпоинтов:
-
Эндпоинты
/reset_password/generate_code
и/reset_password
доступны без предварительной аутентификации. -
XSRF-TOKEN
выдается анонимно, что делает CSRF-защиту бесполезной в данном контексте.
-
-
Некорректная валидация токенов:
-
Сервер не связывает
auth_token
с IP-адресом, временем жизни (TTL) или сессией. Это позволяет использовать токен даже спустя длительное время.
-
-
Отсутствие MFA (Multi-Factor Authentication):
-
Процедура сброса пароля не требует подтверждения через второй фактор (например, код из SMS или приложения).
-
Условия успешной эксплуатации
-
Сетевой доступ к веб-интерфейсу:
Эксплуатация возможна, если злоумышленник может отправить HTTP-запросы на порт веб-интерфейса (обычно 8443/TCP). Это не требует доступа к внутренней сети — достаточно, чтобы интерфейс был доступен из интернета (ошибка конфигурации). -
Знание имени учетной записи:
По умолчанию используетсяadmin
, но если имя изменено, атака усложняется (требуется перебор). -
Отсутствие WAF/IPS:
Межсетевые экраны или системы предотвращения вторжений (IPS) могут блокировать аномальные запросы к/backend/reset_password
.
Рекомендации по защите
-
Обновление до версии 8-202212:
Патч Cisco добавляет проверку прав доступа к эндпоинтам сброса пароля. -
Сегментация сети:
-
Запретите прямой доступ к веб-интерфейсу из интернета. Используйте VPN или jump-серверы.
-
Ограничьте доступ к порту 8443/TCP с помощью ACL (Access Control Lists).
-
-
Аудит токенов и сессий:
-
Внедрите привязку сессий к IP-адресам.
-
Установите TTL для
auth_token
в несколько минут.
-
-
Мониторинг аномалий:
-
Настройте алерты на частые запросы к
/reset_password/generate_code
. -
Используйте SIEM для анализа логов на предмет подмены паролей.
-
-
Усиление аутентификации:
# Пример конфигурации для Cisco CSSM (если поддерживается): mfa-token enforce on password-reset-require-email on
(Примечание: актуальные команды зависят от версии ПО.)
