Похек
16.4K subscribers
2.08K photos
110 videos
243 files
3.06K links
All materials published on the channel are for educational and informational purposes only.

Мнение автора ≠ мнение компании, где работает автор

Чат: @poxek_chat

Реклама: @PoxekAds_bot или
https://telega.in/c/poxek

РКН: https://clck.ru/3FsVhp
Download Telegram
CVE-2025-11953 — unauth RCE из-за уязвимой зависимости в React Native
#CVE #RCE #PoC #developer #dev #metro #react #ReactNative

Metro Development Server, используемый в React Native CLI, по умолчанию слушает все сетевые интерфейсы (0.0.0.0), что делает его доступным из внешних сетей. В сервер встроен эндпоинт POST /open-url, который принимает JSON с полем url. Значение этого поля напрямую передаётся в функцию open(url) из npm-пакета open (версия 6.4.0), которая на Windows вызывает cmd.exe без экранирования аргументов, позволяя выполнить произвольные системные команды с полным контролем параметров, например, запуск calc.exe или создание файла htb-easy-lol.txt.

На Linux и macOS open вызывает команды xdg-open и open без использования shell, аргументы передаются как отдельные параметры, поэтому прямой command injection затруднен. Для полноценного удалённого выполнения команд на этих системах требуются дополнительные уязвимости или эксплуатация особенностей URI-схем, таких как запуск локальных файлов через file://.

Проблема связана с тем, что React Native CLI запускает Metro Development Server, который использует уязвимый open-пакет для обработки /open-url, открывая путь к удалённому выполнению кода в среде разработки. Это критично, так как dev-сервер в ряде случаев доступен из внешних сетей и обрабатывает команды без защиты. Признайтесь, делали же проекты на 5 минут и потом это висело месяц в проде?)

Уязвимый пакет: @react-native-community/cli-server-api и @react-native-community/cli
Уязвимые версии: 4.8.0 — 20.0.0-alpha.2
CVSS: 9.8

➡️Последовательность атаки
- Атакующий отправляет специально сформированный POST-запрос
POST /open-url HTTP/1.1
Host: vulnerable-dev-server:8081
Content-Type: application/json
Content-Length: <length>

{
"url": "calc.exe"
}

- Metro сервер, доступный из внешней сети, принимает запрос.
- Введенные данные передаются в функцию open(), вызывающую системные команды без защиты.
- Атакующий получает возможность запускать произвольные команды — например, открыть calc.exe или создать файл pwned.txt.

Для проверки уязвимости можно использовать команды npm list @react-native-community/cli-server-api и убедиться в используемой версии.

➡️Рекомендации
- Срочно обновить пакеты до версии 20.0.0 или выше, где уязвимость исправлена.
- Если обновление невозможно, запускать Metro сервер с привязкой к localhost (npx react-native start --host 127.0.0.1), чтобы заблокировать доступ извне.
- Проводить аудит зависимостей и сканирование цепочек поставок (SBOM) для выявления уязвимых версий и подозрительных модулей.

🔗Источник

🌚 @poxek | 📲 MAX |🌚 Блог | 📺 YT | 📺 RT | 📺 VK | ❤️ Мерч
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15🌚5👾22
Ловите вкусные баги прошедшей недели
#CVE #RCE #DoS #React # React2Shell #RSC #WISE #cpp #Mattermost

➡️React2Shell / React Server Components (RSC) (CVE-2025-55182, CVSS 10.0) — небезопасная десериализация данных, передаваемых через проприетарный протокол Flight, используемый для связи между клиентом и серверными компонентами. Злоумышленник может отправить специально сформированный HTTP-запрос, содержащий манипуляции с цепочкой прототипов или инструкции по внедрению вредоносных объектов. Сервер React, пытаясь собрать компонент из этих данных, выполняет произвольный JavaScript-код в контексте процесса Node.js. PoC + PoC.

➡️C++ библиотека cpp-httplib (CVE-2025-66570, CVSS 10.0) — логическая ошибка обработки дублирующихся HTTP-заголовков. Метод получения значения заголовка (get_header_value) возвращает первое найденное вхождение ключа без проверки приоритета источника. Это позволяет атакующему внедрить в запрос собственные заголовки, которые библиотека считает и обработает раньше, чем добавленные доверенным reverse-proxy.


➡️Advantech WISE-DeviceOn (CVE-2025-34256, CVSS 10.0) ­— захардкоженный ключ (статичный HS512 HMAC) для подписи JWT-токенов аутентификации в серверной части ПО Advantech WISE-DeviceOn. Поскольку ключ одинаков для всех инсталляций, атакующий может самостоятельно сгенерировать валидный токен с правами root superadmin зная лишь формат токена и email жертвы.

➡️Mattermost (CVE-2025-12419, CVSS 9.9) — некорректная валидация параметра state при завершении аутентификации через протокол OpenID Connect (OIDC/OAuth). Из-за ошибки в логике связывания токена и сессии атакующий с учеткой с правами на создание команд (Team Creation) или администратора может манипулировать процессом OAuth-входа. Это позволяет подменить идентификатор жертвы и перехватить ее аккаунт без знания пароля. Github Advisory

➡️XWiki Remote Macros (CVE-2025-65036, CVSS 8.3) ­— уязвимость в плагине, используемом для миграции контента из Atlassian Confluence и позволяющем отображать динамические макросы. Проблема заключается в отсутствии проверки прав доступа при обработке макросов на details pages. Атакующий с правами на редактирование любой страницы или создание контента может внедрить вредоносный Velocity-скрипт, который будет выполнен сервером.

🌚 @poxek | 📲 MAX |🌚 Блог | 📺 YT | 📺 RT | 📺 VK | ❤️ Мерч
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍3🔥222
React Fiber Forensics: эксгумация исходного кода из оперативной памяти
#reverse #react #ReactFiber #webpack #vite #bugbounty #appsec

Принято считать, что минификация и бандлинг (Webpack/Vite) надежно скрывают логику фронтенда. Но, как выяснил разработчик David Fant, прибывающих в браузер артефактов (JS-бандл, runtime-данные, структура UI) вполне достаточно, чтобы реконструировать исходный код React-компонентов с высокой точностью, используя только runtime-слепки памяти и LLM.


♾️Техническая суть♾️

React использует структуру данных Fiber — Linked List узлов, представляющий состояние UI. В отличие от Call Stack, Fiber-дерево хранится в куче постоянно для поддержки асинхронного рендеринга и Reconciliation. Каждый DOM-элемент в React-приложении содержит ссылку на свой Fiber-узел, получив доступ к которому можно получить и доступ к приватным данным компонента:
memoizedProps — актуальные входные данные
memoizedState — внутреннее состояние (связный список хуков: useState, useReducer, useContext)
stateNode — инстанс класса или ссылка на DOM
type — ссылка на оригинальную (минифицированную) функцию-компонент

♾️Типичный пайплайн атаки♾️

▪️Скрипт-имплант находит корневой контейнер приложения и рекурсивно обходит дерево Fiber, следуя по указателям child и sibling.
▪️Для каждого узла сериализуется текущее состояние. В отличие от статического анализа бандла, здесь есть динамические значения в момент исполнения.
▪️Сдампленная структура скармливается LLM. Модель, обученная на миллионах строк React-кода, выполняет обратное преобразование: Fiber Node ▪️Snapshot -> Idiomatic JSX, восстанавливает имена пропсов (они часто не минифицируются) и логику рендера.

♾️Для чего♾️

▪️Быстрый pixel-perfect фишинг, когда воспроизводятся состояния, тексты ошибок и поведение форм
▪️Реверс бизнес-логики на клиенте: валидации, feature-flags, проверки ролей, алгоритмы расчета — все, что ошибочно сочли неинтересным для атакующего
▪️Для поиска багов, поскольку восстановленный компонент проще анализировать на небезопасные паттерны (XSS/DOM XSS, небезопасные редиректы, утечки токенов в URL/логах, логика «только на фронте»).

♾️Защита♾️

Минификация бесполезна. Что поможет:
▪️Перенос чувствительной логики в серверные компоненты. Их код исполняется на бэкенде, а клиенту прилетает только сериализованный результат (JSON-подобная структура) без логики обработки.
▪️Использование инструментов типа Jscrambler, которые ломают не только имена, но и поток управления, затрудняя работу LLM по восстановлению логики.

🔗Подробнее

🌚 @poxek | 📲 MAX |🌚 Блог | 📺 YT | 📺 RT | 📺 VK
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥93
Закрепление в Next.js через генерацию сессионных кук
#NextJS #next #react #js #React2Shell #RCE #AuthJS

Исследователь Embrace The Red продемонстрировал технику закрепления в next-auth (Auth.js), позволяющую генерировать валидные сессии в обход Identity Provider и обеспечивать персистентность даже при регулярной ротации OAuth-кредов. В начале цепочки используется небезызвестная React2Shell бага.

♾️Техническая суть♾️

В режиме JWT архитектура next-auth опирается на Stateless JWE (JSON Web Encryption). Валидность сессии определяется исключительно возможностью расшифровать токен на сервере.

Key Encryption Key генерируется через алгоритм HKDF, в качестве входных данных используя IKM (Input Keying Material, переменная окружения NEXTAUTH_SECRET) и Salt — дефолтное или кастомное имя куки (например, next-auth.session-token).

Утечка NEXTAUTH_SECRET позволяет атакующему локально воспроизвести процесс HKDF и зашифровать произвольный JSON-пейлоад, подменив sub, email, iat, exp. Сервер примет такой JWE-контейнер как легитимный, поскольку криптографическая целостность соблюдена, а сверка с базой данных или OAuth-провайдером для расшифрованных сессий архитектурно не требуется.

♾️Типичный пайплайн атаки♾️

▪️Атакующий эксплуатирует React2Shell и получает RCE.
▪️Дампит переменные окружения (env) и забирает NEXTAUTH_SECRET.
▪️С помощью скрипта на базе кода самой либы генерирует подписанную куку next-auth.session-token с нужными клеймами (Admin, UserID и т.д.).
▪️Подставляет куку в браузер и обеспечивает персистентность, даже если OAuth-креды сброшены.

♾️Защита♾️

▪️Обязательная ротация NEXTAUTH_SECRET и AUTH_SECRET при любом подозрении на компрометацию.
▪️Инвалидация всех активных сессий после ротации.
▪️Мониторинг дубликатов JTI (JWT ID) с разных IP-адресов.
▪️Детект аномальных полей в сессиях (странные User-Agent и т.п.).

🔗 Источник
🔗 GitHub

🌚 @poxek | 📲 MAX |🌚 Блог | 📺 YT | 📺 RT | 📺 VK
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥83