Про­шив­ки сетево­го обо­рудо­вания неред­ко скры­вают баги, поэто­му их diff-ана­лиз оста­ется основным спо­собом най­ти уяз­вимос­ти и потен­циаль­ные точ­ки для RCE. В сегод­няшней статье я покажу общие тех­ники и методы, которые при­меняю на прак­тике при ана­лизе 1-day-уяз­вимос­тей роуте­ров, фай­рво­лов и дру­гих подоб­ных сетевых устрой­ств.

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 в фай­лах.
Beyond Compare. Сравнение 9.18.4.50 и 9.18.4.52
Beyond Compare. Срав­нение 9.18.4.50 и 9.18.4.52

До­пол­нитель­но мож­но отсе­ять стан­дар­тные прог­раммы и биб­лиоте­ки для Linux. У нас оста­нет­ся все­го семь исполня­емых фай­лов. Мож­но рис­кнуть и добавить филь­тр на вхож­дение сло­ва web, тог­да оста­нет­ся толь­ко один файл — lina. Я бы уже перешел к ана­лизу содер­жимого, но пос­чита­ем, что нам повез­ло. Какие еще сущес­тву­ют спо­собы филь­тра­ции без глу­боко­го ана­лиза про­шив­ки?

  1. Мож­но поис­кать сле­ды имен най­ден­ных исполня­емых фай­лов в сис­теме: rg -luuu "start-adi". В таком слу­чае мы обна­ружим, что мно­гие свя­зи ведут в lina, а так­же что сущес­тву­ют скрип­ты с име­нами по типу *http*, которые опе­риру­ют фай­лом lina.
  2. Вос­поль­зовать­ся ути­литой strings и обна­ружить, что lina име­ет сле­ды пол­ноцен­ного веб‑сер­вера в отли­чие от дру­гих.

В общем, доказа­тель­ств того, что нам нуж­на имен­но lina, уже пре­дос­таточ­но. Кро­ме это­го, пос­ле проч­тения статьи от NCC Group воп­росов с выбором фай­ла для ана­лиза вооб­ще не воз­никнет, пос­коль­ку lina явля­ется монс­тру­озным соз­дани­ем на 100 Мбайт, которое отве­чает прак­тичес­ки за все про­цес­сы в Cisco ASA. И пос­ледний вари­ант иден­тифика­ции нуж­ного нам фай­ла в нашей ситу­ации (вспо­мина­ем, что это HTTP-сер­вис): под­нять вир­туаль­ную машину (об этом поз­днее) и пос­мотреть откры­тые пор­ты, а так­же слу­шающие их про­цес­сы.

 

Ищем баг

В интерне­те мож­но най­ти мно­жес­тво ста­тей и виде­оуро­ков, рас­ска­зыва­ющих, как срав­нивать бинар­ные фай­лы, поэто­му оста­нав­ливать­ся на том, что такое BinDiff, Diaphora и иже с ними, я не буду. Вмес­то это­го я рас­ска­жу, с какими проб­лемами в про­цес­се срав­нения мож­но стол­кнуть­ся и как я их обыч­но решаю.

Итак, какие проб­лемы у нас воз­ника­ют при ана­лизе CVE-2025-20263?

  1. Ог­ромный раз­мер исполня­емо­го фай­ла. Вывод: Diaphora на Python с неоп­тимизи­рован­ными алго­рит­мами под капотом сра­зу идет лесом. Приз­нать­ся чес­тно, на моей прак­тике Diaphora и так ни разу не давала вме­няемый резуль­тат, но, может быть, мне прос­то не везет.
  2. Боль­шое количес­тво изме­нений от вер­сии к вер­сии. В этом мы повер­хностно убе­дились во вре­мя срав­нения в Beyond Compare.

В прин­ципе, даже этих двух проб­лем дос­таточ­но, что­бы ана­лиз 1-day зашел в тупик.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии