Содержание статьи
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Необходимый уровень для понимания статьи и освоения подхода невысокий. Я не брал в качестве примера уязвимости со сложным процессом поиска и эксплуатации, тем не менее базовое представление о работе с прошивками (например, что такое binwalk
) иметь необходимо.
Цели
В качестве вендора для своих изысканий я выбрал Cisco. На самом деле на его месте мог быть кто угодно: Fortinet, Huawei, Juniper, — описанные методы плюс‑минус подойдут ко всем производителям сетевых устройств. Осталось найти перспективные CVE, которые в идеале способны дать нам RCE. Можно посмотреть информацию на CVE Details: Cisco, 2025 год, сортировка по оценке CVSS; а можно и адвайзори почитать: critical and high impact, сортировка по дате публикации.
На глаза в первую очередь попадает CVE-2025-20265: critical, CVSS 10.0, Cisco Secure FMC. Это нам интересно.
Дополнительно рассмотрим что‑то крупное и распространенное, например роутеры, сетевые коммутаторы, файрволы и прочее, что может торчать в сеть. С полным списком можно ознакомиться в Википедии. Я выбрал security-решение Cisco ASA.
Применяем фильтр адвайзори по этому продукту (Cisco Adaptive Security Appliance (ASA) Software), сортируем по дате публикации за 2025 год. Остаются только уязвимости high и medium по версии Cisco, но не critical. Ладно, работаем с тем, что есть. Не берем в расчет уязвимости, которые требуют аутентификации. Также постараемся найти те, что будут срабатывать на настройках по умолчанию.
В итоге у нас остаются только DoS. В таком случае надежда на невнимательность вендора, на вероятность того, что он мог пропустить потенциальный RCE. В первую очередь ищем намек на DoS из‑за повреждения памяти, а не логические баги и зацикливание выполнения. В описании CVE-2025-20263 находим следующее: «A successful exploit could allow the attacker to cause a buffer overflow condition». Думаю, этот вариант нам подходит, берем его в работу и начинаем анализ.
CVE-2025-20263
Ищем прошивки
Адвайзори по CVE-2025-20263, к сожалению, не дает никакой информации об уязвимых версиях. Он лишь предоставляет инструмент для проверки наличия уязвимостей, которые характерны для конкретного продукта конкретной версии. Можно обратиться за помощью к CVE.org — там есть полный список уязвимых версий.
Стоит отметить, что у Cisco ASA весьма нетривиальная система версионирования: чтобы познакомиться с ней поближе, смотри официальный сайт. Если вкратце, то Cisco параллельно поддерживает и выпускает патчи для множества версий, то есть для исследования можно брать любую минорную с необходимым vulnerability release (см. ссылку выше). Мне приглянулась 9.18.4.50, поскольку у меня уже были наработки по этой ветке релизов. В теории же можно было взять даже самую актуальную 9.22.1.3.
Поискав в интернете или же порыскав по сайту Cisco, мы можем наткнуться на Release Notes для Cisco ASA Interim, из которых узнаем, что следующая версия релиза после уязвимой — 9.18.4.52. Вдобавок нам открывается тот факт, что патч был выпущен еще в январе 2025 года (напомню, что первая публикация адвайзори датируется августом 2025-го).
Следующим этапом будет получение необходимых прошивок для анализа. На странице того же адвайзори можно найти ссылку на скачивание обновлений. Если я правильно понял лицензионную и корпоративную политику Cisco, то в случае патчей, которые фиксят баги уровня Critical и High, обновления можно получить бесплатно, в остальных случаях необходимо дополнительно платить за поддержку девайса. У меня в наличии не было ни устройства, ни оплаченного договора на получение обновлений и поддержку от Cisco.
Какие варианты получения прошивок мы можем использовать? Я думаю, что у каждого ресерчера свои подходы, мои же следующие:
- написать напрямую вендору как security researcher или bug bounty hunter (если у тебя только российское гражданство и нет навыков социальной инженерии, этот подход не сработает);
- получить триальную (или облачную) версию, если есть такая возможность, и хакнуть систему обновлений;
- взять конкретное имя файла прошивки и провести поиск в различных поисковых системах (на сайте получения обновлений есть точное указание имени файла:
asav9-18-4-50.
);zip - включить в поиск различные файлопомойки, архивы;
- искать в индексерах P2P-сетей (привет, DC++ и ed2k и, конечно же, BitTorrent со своим DHT);
- на сайтах, которые специализируются на конкретной тематике, например LabHub — Network Emulator Disk Images Repository;
- на форумах добродушных сисадминов, готовых за бутылочку пива предоставить конкретный файл прошивки;
- у друзей‑китайцев, например kanxue, 52pjie.
Кроме железячных Cisco ASA, в природе существует Cisco Adaptive Security Virtual Appliance (ASAv). Они представляют собой подготовленные образы виртуальных систем, например для KVM, VMware, Hyper-V. Их также рекомендую найти и скачать. На моей практике различия прошивок для виртуалок и для реальных железок практически минимальны, если не брать в расчет архитектуру. Проводить динамический анализ, собирать fingerprint, разрабатывать PoC гораздо проще и дешевле на виртуалке.
Распаковываем
Здесь, конечно, все индивидуально: есть вендоры, которые придумывают кастомные пакеры, а есть те, кто предоставляет всё в zip-архиве. Эмпирически я вывел для себя такую статистику: чем проще достать файл прошивки в сети (например, скачать с официального сайта), тем больше вероятность, что он будет зашифрован. Пример с Cisco ASA — прямое тому доказательство: достать актуальные версии нетривиально, распаковать же можно с помощью Binwalk без каких‑либо дополнительных телодвижений.
Останавливаться и подробно описывать операционную систему, а также структуру прошивки я здесь не буду, для нашей задачи достаточно того факта, что используется Wind River Linux. Остальное без проблем можно найти в сети, Cisco ASA уже давно изучена вдоль и поперек. Например, прекрасное исследование выполнили в свое время ребята из NCC Group.
Ищем различия
Чтобы локализовать место исправления уязвимости, необходимо найти все различия между версиями в файловой системе. Для выполнения этой задачи в разное время я использовал разные инструменты:
- самописные скрипты с
ripgrep
,fd
иdelta
под капотом; - готовое решение в виде
diffoscope
; -
vifm
с егоcompare
,diff
и другими командами.
В последнее время я открываю для себя мир проприетарного софта, поэтому пробую Beyond Compare. Для описанных в статье CVE он показал себя неплохо:
- хорошая скорость работы многопоточного алгоритма;
- различные правила определения «похожести» файлов, в том числе бинарных;
- гибкие фильтры для отсеивания ненужного, в том числе по содержимому файлов.
Искать 1-day бывает так же сложно, как иголку в стоге сена, а если нас еще обманули в адвайзори, то вообще практически невозможно. По этой причине нам необходимо максимально сузить область поиска, в идеале до одного файла, ведь потом нужно еще сравнить и проанализировать его содержимое.
Верим Cisco на слово и еще раз идем читать адвайзори более детально, чтобы понять, что мы можем сразу отбросить, даже не сравнивая содержимое отличающихся файлов. Строим гипотезы и предположения: если они не сработают и после очередного примененного фильтра пропадут вообще все файлы, то начинаем заново:
- это баг повреждения памяти → смотрим только исполняемые файлы и библиотеки;
- это HTTP-сервис → ищем
http
в файлах.

Дополнительно можно отсеять стандартные программы и библиотеки для Linux. У нас останется всего семь исполняемых файлов. Можно рискнуть и добавить фильтр на вхождение слова web
, тогда останется только один файл — lina
. Я бы уже перешел к анализу содержимого, но посчитаем, что нам повезло. Какие еще существуют способы фильтрации без глубокого анализа прошивки?
- Можно поискать следы имен найденных исполняемых файлов в системе:
rg
. В таком случае мы обнаружим, что многие связи ведут в-luuu "start-adi" lina
, а также что существуют скрипты с именами по типу*http*
, которые оперируют файломlina
. - Воспользоваться утилитой
strings
и обнаружить, чтоlina
имеет следы полноценного веб‑сервера в отличие от других.
В общем, доказательств того, что нам нужна именно lina
, уже предостаточно. Кроме этого, после прочтения статьи от NCC Group вопросов с выбором файла для анализа вообще не возникнет, поскольку lina
является монструозным созданием на 100 Мбайт, которое отвечает практически за все процессы в Cisco ASA. И последний вариант идентификации нужного нам файла в нашей ситуации (вспоминаем, что это HTTP-сервис): поднять виртуальную машину (об этом позднее) и посмотреть открытые порты, а также слушающие их процессы.
Ищем баг
В интернете можно найти множество статей и видеоуроков, рассказывающих, как сравнивать бинарные файлы, поэтому останавливаться на том, что такое BinDiff, Diaphora и иже с ними, я не буду. Вместо этого я расскажу, с какими проблемами в процессе сравнения можно столкнуться и как я их обычно решаю.
Итак, какие проблемы у нас возникают при анализе CVE-2025-20263?
- Огромный размер исполняемого файла. Вывод: Diaphora на Python с неоптимизированными алгоритмами под капотом сразу идет лесом. Признаться честно, на моей практике Diaphora и так ни разу не давала вменяемый результат, но, может быть, мне просто не везет.
- Большое количество изменений от версии к версии. В этом мы поверхностно убедились во время сравнения в Beyond Compare.
В принципе, даже этих двух проблем достаточно, чтобы анализ 1-day зашел в тупик.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее