Огромное удовольствие было получено от прочтения вашей статьи, все четко и по полочкам!
РАЗБОР
AppSec
Статья
Технический анализ Fortinet FortiNAC CVE-2022-39952
[ обложка статьи ]
Режим чтения
Прежде чем переходить к техническим деталям, стоит обозначить масштаб проблемы. Уязвимость затрагивает целый ряд версий FortiNAC — от 9.1 до 9.4 и более ранние ветки линейки, что делает её актуальной для значительного числа установленных инсталляций. Fortinet присвоила проблеме критический уровень серьёзности и рекомендовала администраторам как можно скорее обновить устройства до исправленных версий, а также ограничить сетевой доступ к веб-интерфейсу управления, если немедленное обновление невозможно. Это важный контекст, который стоит держать в голове при разборе самого механизма эксплуатации.
Далее мы подключаем файловую систему в созданный нами каталог:
Уязвимость
После извлечения обеих файловых систем из уязвимого и исправленного vmdk видно, что файл
Изучая содержимое
После успешной записи файла вызов
Сценарий bash вызывает команду unzip на только что записанном файле. Сразу же, увидев этот вызов на файле, контролируемом злоумышленником, мы вспомнили несколько недавних уязвимостей, которые мы рассматривали и которые использовали распаковку архивов. Хотя наши первоначальные мысли были связаны с проблемой обхода каталога, unzip помогает удалить относительные пути и защищает от обхода.
На самом деле проблема гораздо более проста, и никакого обхода не требуется. Непосредственно перед вызовом unzip сценарий bash вызывает cd /. Unzip позволит размещать файлы по любым путям, если они не выходят за пределы текущего рабочего каталога. Поскольку рабочим каталогом является /, вызов unzip внутри сценария bash позволяет записать любой произвольный файл.
POC
github.com
Уязвимостью произвольной записи файлов можно злоупотреблять несколькими способами для получения удаленного выполнения кода. В данном случае мы записываем задание cron в файл
- Затронутые версии: линейки 9.1.x, 9.2.x и 9.4.0 (точный перечень указан в бюллетене Fortinet)
- Рекомендация: обновление до патченной версии либо временное ограничение доступа к уязвимому сервису
Введение
В четверг, 16 февраля 2023 года, компания Fortinet выпустила PSIRT, в котором подробно описана CVE-2022-39952, критическая уязвимость, затрагивающая ее продукт FortiNAC. Эта уязвимость, обнаруженная Gwendal Guégniaud из Fortinet, позволяет неаутентифицированному злоумышленнику записать произвольные файлы в системе и в результате получить RCE от root'а.Извлечение образа
Извлечение файловых систем из устройств происходит просто, сначала из vmdk перечисляются пути к монтируемым файловым системам:sudo virt-filesystems --filesystems -a fortinac-9.4.1.0726.vmdk
Далее мы подключаем файловую систему в созданный нами каталог:
sudo guestmount -a fortinac-9.4.1.0726.vmdk -m /dev/centos/root --ro /tmp/fnac941
Уязвимость
После извлечения обеих файловых систем из уязвимого и исправленного vmdk видно, что файл
/bsc/campusMgr/ui/ROOT/configWizard/keyUpload.jsp был удален в патче, а также совпадает с именем servlet, упомянутого в changelog.
Изучая содержимое
keyUpload.jsp, мы видим, что неаутентифицированная конечная точка будет анализировать запросы, которые предоставляют файл в параметре key, и, если он найден, записывать его в /bsc/campusMgr/config.applianceKey.
После успешной записи файла вызов
Runtime().Exec() выполняет сценарий bash, расположенный по адресу /bsc/campusMgr/bin/configApplianceXml.
Сценарий bash вызывает команду unzip на только что записанном файле. Сразу же, увидев этот вызов на файле, контролируемом злоумышленником, мы вспомнили несколько недавних уязвимостей, которые мы рассматривали и которые использовали распаковку архивов. Хотя наши первоначальные мысли были связаны с проблемой обхода каталога, unzip помогает удалить относительные пути и защищает от обхода.
На самом деле проблема гораздо более проста, и никакого обхода не требуется. Непосредственно перед вызовом unzip сценарий bash вызывает cd /. Unzip позволит размещать файлы по любым путям, если они не выходят за пределы текущего рабочего каталога. Поскольку рабочим каталогом является /, вызов unzip внутри сценария bash позволяет записать любой произвольный файл.
Эксплуатация
Подобно использованию предыдущих уязвимостей в архивах, позволяющих произвольную запись файлов, мы используем эту уязвимость для записи задания cron в файл /etc/cron.d/payload. Это задание запускается каждую минуту и инициирует reverse shell для хакера. Сначала мы создаем zip-архив, содержащий файл, и указываем путь, по которому мы хотим его извлечь. Затем мы отправляем вредоносный zip-файл на уязвимую конечную точку в поле key. В течение минуты мы получаем обратную оболочку от root. Наш POC, автоматизирующий эту процедуру, можно найти на GitHub.Демо
POC
GitHub - horizon3ai/CVE-2022-39952: POC for CVE-2022-39952
POC for CVE-2022-39952. Contribute to horizon3ai/CVE-2022-39952 development by creating an account on GitHub.
Индикатор взлома
К сожалению, устройство FortiNAC не позволяет получить доступ к графическому интерфейсу, пока не будет добавлен лицензионный ключ, поэтому для проверки индикаторов не были доступны журналы GUI. Однако использование проблемы можно было наблюдать в журналах файловой системы, расположенных по адресу/bsc/logs/output.master. В частности, можно было проверить наличие строки Running configApplianceXml, пока атакующий не очистил этот файл журнала.
Уязвимостью произвольной записи файлов можно злоупотреблять несколькими способами для получения удаленного выполнения кода. В данном случае мы записываем задание cron в файл
/etc/cron.d/, но злоумышленники также могут перезаписать и регулярно выполняемый двоичный файл в системе или SSH-ключи пользователей.
AI-выжимка
сгенерировано ИИ
Тезисы статьи скоро
Статья читается полностью. Тезисы со ссылками на разделы появятся позже.
Содержание
Codeby Academy
Практика и мастерство
От основ до продвинутого — программы для практиков Codeby.
Перейти к курсу →
Продолжить чтение
Следующий разбор
CVE-2026-33453: Header Injection -> RCE в Apache Camel
Комментарии
1