CVE-2025-11953 — unauth RCE из-за уязвимой зависимости в React Native
#CVE #RCE #PoC #developer #dev #metro #react #ReactNative
Metro Development Server, используемый в React Native CLI, по умолчанию слушает все сетевые интерфейсы (
На Linux и macOS open вызывает команды
Проблема связана с тем, что React Native CLI запускает Metro Development Server, который использует уязвимый open-пакет для обработки
Уязвимый пакет:
Уязвимые версии: 4.8.0 — 20.0.0-alpha.2
CVSS: 9.8
➡️ Последовательность атаки
- Атакующий отправляет специально сформированный POST-запрос
- Metro сервер, доступный из внешней сети, принимает запрос.
- Введенные данные передаются в функцию open(), вызывающую системные команды без защиты.
- Атакующий получает возможность запускать произвольные команды — например, открыть calc.exe или создать файл pwned.txt.
Для проверки уязвимости можно использовать команды
➡️ Рекомендации
- Срочно обновить пакеты до версии 20.0.0 или выше, где уязвимость исправлена.
- Если обновление невозможно, запускать Metro сервер с привязкой к localhost (
- Проводить аудит зависимостей и сканирование цепочек поставок (SBOM) для выявления уязвимых версий и подозрительных модулей.
🔗 Источник
🌚 @poxek | 📲 MAX |🌚 Блог | 📺 YT | 📺 RT | 📺 VK | ❤️ Мерч
#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) для выявления уязвимых версий и подозрительных модулей.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15🌚5👾2 2
Ловите вкусные баги прошедшей недели
#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 | ❤️ Мерч
#CVE #RCE #DoS #React # React2Shell #RSC #WISE #cpp #Mattermost
Please open Telegram to view this post
VIEW IN TELEGRAM
React Fiber Forensics: эксгумация исходного кода из оперативной памяти
#reverse #react #ReactFiber #webpack #vite #bugbounty #appsec
♾️ Техническая суть♾️
React использует структуру данных Fiber — Linked List узлов, представляющий состояние UI. В отличие от Call Stack, Fiber-дерево хранится в куче постоянно для поддержки асинхронного рендеринга и Reconciliation. Каждый DOM-элемент в React-приложении содержит ссылку на свой Fiber-узел, получив доступ к которому можно получить и доступ к приватным данным компонента:
♾️ Типичный пайплайн атаки♾️
▪️ Скрипт-имплант находит корневой контейнер приложения и рекурсивно обходит дерево 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
#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 — инстанс класса или ссылка на DOMtype — ссылка на оригинальную (минифицированную) функцию-компонентМинификация бесполезна. Что поможет:
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9 3
Закрепление в 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, переменная окружения
Утечка
♾️ Типичный пайплайн атаки♾️
▪️ Атакующий эксплуатирует React2Shell и получает RCE.
▪️ Дампит переменные окружения (env) и забирает
▪️ С помощью скрипта на базе кода самой либы генерирует подписанную куку next-auth.session-token с нужными клеймами (Admin, UserID и т.д.).
▪️ Подставляет куку в браузер и обеспечивает персистентность, даже если OAuth-креды сброшены.
♾️ Защита♾️
▪️ Обязательная ротация
▪️ Инвалидация всех активных сессий после ротации.
▪️ Мониторинг дубликатов JTI (JWT ID) с разных IP-адресов.
▪️ Детект аномальных полей в сессиях (странные User-Agent и т.п.).
🔗 Источник
🔗 GitHub
🌚 @poxek | 📲 MAX |🌚 Блог | 📺 YT | 📺 RT | 📺 VK
#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-провайдером для расшифрованных сессий архитектурно не требуется.NEXTAUTH_SECRET.NEXTAUTH_SECRET и AUTH_SECRET при любом подозрении на компрометацию.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8 3