TGViewer
Четыре луча Четыре луча @four_rays · 4.02K subscribers
Post #150 2.78K
RCE в React Native CLI (CVE-2025-11953)

CVE-2025-11953 — уязвимость, которая позволяет неаутентифицированным пользователям выполнять произвольные команды оболочки (RCE) или запускать произвольные исполняемые файлы в пакете @react-native-community/cli-server-api версий с 4.8.0 по 20.0.0-alpha.2

😳 Метрики
Base Score: 9,8 (CRITICAL)
CWE: CWE-78


😳 Об уязвимости
Не подвержены уязвимости разработчики, которые используют React Native с фреймворком, но не берут Metro в качестве сервера разработки. В уязвимых версиях @react-native-community/cli-server-api функция openURLMiddleware содержит код:

async function openURLMiddleware(req: IncomingMessage, ...) {
if (req.method === 'POST') {

const {url} = req.body as {url: string};

await open(url);

}
next();
}
export default connect().use(json()).use(openURLMiddleware);


Значение параметра url, отправленного в JSON теле POST-запроса, предаётся в open() без надлежащий валидации.

Исправление:
    try {
const parsedUrl = new URL(url);
if (parsedUrl.protocol !== 'http:' && parsedUrl.protocol !== 'https:') {
res.writeHead(400);
res.end('Invalid URL protocol');
return;
}
} catch (error) {
res.writeHead(400);
res.end('Invalid URL format');
return;
}

await open(url);


Исправление проверяет, что параметр url означает именно URL в new URL с протоколом http/https в if (parsedUrl.protocol !== 'http:' && parsedUrl.protocol !== 'https:').

💡 Дополнительная особенность уязвимости — сервер по умолчанию будет прослушивать внешние соединения 0.0.0.0:[port].

Важно: поведение open() отличается между Windows и Unix подобными системами.

☀️ На Windows уязвимости RCE возникают из за формирования одной строковой команды. Например, cmd /c start "" /b cmd /c echo abc > c:\temp\pwned.txt.
☀️ На macOS/Linux open/xdg-open запускаются без shell и ожидает, что каждый аргумент будет отдельной строкой, но остаются другие риски (URI обработчики, file://, сетевые схемы).

Короче: Windows — риск RCE через командную строку, macOS/Linux — риск через URI обработчики и file:/// smb://.

Уязвимая конечная точка: /open-url.

😳 Пример эксплуатации RCE для Windows
curl -X POST http://metro-server-host:8081/open-url -H "Content-Type: application/json" -d "{\"url\":\"cmd /c echo abc ^> c:\\temp\\poc.txt\"}"


😳 Как защищаться
1) Обновиться.
2) Запускать сервер строго на localhost.
3) Написать блокирующее правило (IDS/WAF) на POST-запросы, которые идут к конечной точке /open-url, где в качестве значения параметра url передается строка отличная от http(s)://[domain].[exp].
  • 🔥 11
  • 👍 4
  • 👀 1
  • 👾 1
More from @four_rays
  1. Sep 14, 2026💣 Ржавый код: почему все переходят на Rust и когда аналитику можно его не реверсить Rust…
  2. Sep 11, 2026😳 DFIR diggin’ deeper: неочевидные источники артефактов при расследовании атак Когда стан…
  3. Sep 7, 2026😀 Call for Papers на технострим SOC Forum 2026 еще открыт! Темы: 1️⃣ Offense: актуальные…
  4. Aug 31, 2026☀️ Zimbra, все еще скрывающая боль Ранее мы уже рассказывали о расследовании «Zimbra, скры…
  5. Aug 19, 2026💡 Разберемся с непопулярными артефактами на OffZone 2026 Выбираете, какие выступления пос…
  6. Aug 17, 2026😀 Admin may cry CVE-2026-41452 — уязвимость, позволяющая перезаписать данные администрато…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →