CVE-2025-11953

React Native Community CLI OS Command Injection (CVE-2025-11953)

Detects exploitation of CVE-2025-11953, an OS command injection vulnerability (CWE-78) in the React Native Community CLI. An attacker who can influence arguments or configuration consumed by the React Native CLI can inject arbitrary OS commands that execute with the privileges of the developer or CI/CD process invoking the CLI. This vulnerability is listed in the CISA Known Exploited Vulnerabilities catalog.

Vulnerability Intelligence

KEV — Known Exploited

CVSS

9.8
Critical (9.0–10)

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Write-up coming soon

What is CVE-2025-11953 React Native Community CLI OS Command Injection (CVE-2025-11953)?

React Native Community CLI OS Command Injection (CVE-2025-11953) (CVE-2025-11953) maps to the Execution and Persistence and Lateral Movement tactics — the adversary is trying to run malicious code in MITRE ATT&CK.

This page provides production-ready detection logic for React Native Community CLI OS Command Injection (CVE-2025-11953), covering the data sources and telemetry it touches: Microsoft Defender for Endpoint, Microsoft Sentinel DeviceProcessEvents, Windows Security Event Log. The queries below are rated high severity at medium confidence, and ship for 7 SIEM platforms — KQL, SPL, Elastic, QRadar, Sumo, YARA-L, LogScale.

MITRE ATT&CK

Tactic
Execution Persistence Lateral Movement
Microsoft Sentinel / Defender
kusto
let RNCliIndicators = dynamic(['react-native', 'react_native_cli', '@react-native-community/cli', 'rn-cli']);
union DeviceProcessEvents, SecurityEvent
| where TimeGenerated > ago(7d)
| where (ProcessCommandLine has_any (RNCliIndicators) or ParentProcessName has_any (RNCliIndicators))
| where ProcessCommandLine matches regex @'[;&|`$()].*[;&|`$()\/\\]'
   or ProcessCommandLine has_any ('curl ', 'wget ', 'bash -', 'sh -c', 'powershell', 'cmd /c', 'nc ', 'ncat ', '/dev/tcp')
| project TimeGenerated, DeviceName, AccountName, ProcessCommandLine, ParentProcessName, ParentCommandLine, InitiatingProcessAccountName, FileName
| extend SuspiciousIndicator = case(
    ProcessCommandLine has 'curl ' or ProcessCommandLine has 'wget ', 'RemoteDownload',
    ProcessCommandLine has 'bash -' or ProcessCommandLine has 'sh -c', 'ShellEscape',
    ProcessCommandLine has 'powershell', 'PowerShellExec',
    ProcessCommandLine has '/dev/tcp' or ProcessCommandLine has 'nc ', 'NetworkConnectivity',
    'CommandInjectionPattern'
  )
| order by TimeGenerated desc

Detects processes spawned by or alongside the React Native Community CLI that exhibit OS command injection patterns, including shell escapes, remote download utilities, and reverse-shell indicators.

high severity medium confidence

Data Sources

Microsoft Defender for Endpoint Microsoft Sentinel DeviceProcessEvents Windows Security Event Log

Required Tables

DeviceProcessEvents SecurityEvent

False Positives

  • Legitimate React Native developers running shell scripts as part of standard build pipelines (e.g., fastlane, custom build hooks).
  • CI/CD agents (GitHub Actions, Azure Pipelines) executing react-native CLI commands with complex argument strings that incidentally match injection patterns.
  • Developer workstations running npm lifecycle scripts that invoke shell commands alongside react-native CLI.
  • Monorepo tooling (nx, turborepo) invoking react-native CLI with chained commands.

Sigma rule & cross-platform mapping

The detection logic for React Native Community CLI OS Command Injection (CVE-2025-11953) (CVE-2025-11953) above is provided in a vendor-neutral form so you can deploy it on any SIEM. The same logic is shipped here as native KQL (Microsoft Sentinel / Defender), SPL (Splunk), Elastic (Elastic Security (EQL)), QRadar (IBM QRadar (AQL)), Sumo (Sumo Logic CSE), YARA-L (Google Chronicle / SecOps), LogScale (CrowdStrike LogScale (CQL)) queries. In Sigma terms, this detection targets the following logsource:

logsource:
  category: process_creation
  product: windows

Browse the community-maintained Sigma rules for this technique:


Testing Methodology

Validate this detection against 4 adversary techniques from Atomic Red Team. Each test below lists the behaviour to exercise and the telemetry you should expect to see. Executable commands and cleanup steps are available with Pro.

  1. Test 1Command Injection via React Native CLI project name argument

    Expected signal: Process create event showing node spawning sh or bash with a command line containing the injected semicolon-delimited id command; file creation event for /tmp/cve_2025_11953_poc.txt.

  2. Test 2Reverse shell injection via React Native CLI on Linux

    Expected signal: Process create events for node → sh → id; file write to /tmp/rn_inject_test.txt containing the output of id.

  3. Test 3Remote payload download via injected curl in React Native CLI build context

    Expected signal: Process create event for node spawning sh, which spawns curl with an external URL argument; network connection event for curl to destination host.

  4. Test 4Windows PowerShell injection via React Native CLI on Windows

    Expected signal: Sysmon Event ID 1 showing node.exe spawning cmd.exe which spawns powershell.exe; file creation event in %TEMP% for rn_inject_test.txt.


Response Playbook

Triage

  1. Identify the host, user account, and exact command line where the React Native Community CLI was invoked; determine whether the user is a legitimate developer or an automated CI/CD service account.
  2. Correlate the suspicious process tree: capture the parent PID chain from the CLI invocation down to any spawned shells or network utilities to establish whether injection actually succeeded or was blocked.
  3. Check package.json, .npmrc, and any CI configuration files on the affected host for malicious modifications to scripts, dependencies, or environment variable overrides that could have introduced the injected payload.
  4. Review network connections initiated by child processes of the react-native CLI around the time of the alert to determine whether data exfiltration or C2 callback occurred.

Containment

  1. Immediately isolate the affected developer workstation or CI/CD runner from the network if active exploitation (reverse shell, exfiltration) is confirmed; revoke any tokens, SSH keys, or cloud credentials accessible from that environment.
  2. Freeze and snapshot the compromised Node.js/npm environment (node_modules, package-lock.json, yarn.lock) to preserve forensic state, then block the offending CLI version from executing in CI/CD pipelines until the React Native Community CLI is patched or replaced.

Evidence Collection

  1. Collect full process tree logs (parent/child PIDs, command lines, environment variables) from the host's EDR or Sysmon logs covering at least 30 minutes before and after the alert timestamp.
  2. Preserve network capture (PCAP or flow records) for all outbound connections from the affected host in the alert window, focusing on non-standard ports or connections to external IPs initiated by node, sh, bash, or curl child processes.

Escalation Criteria

  • ! Escalate to IR if any child process of the react-native CLI successfully established an outbound connection to an external IP or DNS name not in the organization's approved CI/CD infrastructure list.
  • ! Escalate immediately if secrets (API keys, signing certificates, cloud credentials, Vault tokens) accessible from the developer or CI/CD environment may have been exposed to the injected command context.

Investigation Guide

Forensic Artifacts

  • > npm debug logs at ~/.npm/_logs/ and project-level npm-debug.log containing CLI invocation arguments and spawned subprocess output.
  • > Shell history files (~/.bash_history, ~/.zsh_history) on developer machines recording the exact react-native CLI invocation sequence.
  • > CI/CD pipeline logs (GitHub Actions, Jenkins, CircleCI) preserving environment variables, command outputs, and exit codes for the affected build job.
  • > Sysmon Event ID 1 (Process Create) and Event ID 3 (Network Connection) records capturing child process spawns and outbound connections from node.exe or node.

Tuning Guidance

Start by scoping the detection to hosts or service accounts where the React Native Community CLI is known to be installed (developer workstations, mobile CI/CD runners). Suppress alerts for shell invocations that match a documented allowlist of legitimate npm lifecycle scripts (e.g., fastlane, gradlew). Increase confidence to HIGH for any alert where the child process makes an outbound network connection. Lower alert priority for internal CI/CD hosts with static, version-pinned CLI installations until the patched version is confirmed deployed.


Hunting Queries

Hunt for recurring patterns where a Node.js process (likely react-native CLI) spawns interactive shell processes, which may indicate persistent exploitation or backdoor establishment across the environment.

Hunting — KQL
kql
DeviceProcessEvents
| where TimeGenerated > ago(30d)
| where (ProcessCommandLine has 'react-native' or ParentProcessName has 'node')
| where FileName in ('sh', 'bash', 'zsh', 'dash', 'cmd.exe', 'powershell.exe', 'pwsh.exe')
| summarize count() by DeviceName, AccountName, FileName, ProcessCommandLine
| where count_ > 2
| order by count_ desc
Hunting — SPL
spl
index=* (sourcetype=syslog OR sourcetype="xmlwineventlog:microsoft-windows-sysmon/operational")
| where match(parent_process, "(?i)node") AND match(process, "(?i)(sh|bash|zsh|cmd|powershell)")
| stats count by host, user, parent_process, process, cmdline
| where count > 2
| sort -count

Atomic Red Team Tests

Test 1 Command Injection via React Native CLI project name argument
linux

Simulates injection of a shell command through a CLI argument that is unsafely passed to exec/spawn in the React Native Community CLI, as would occur via CVE-2025-11953.

Command

bash
node -e "const {execSync} = require('child_process'); execSync('npx @react-native-community/cli init \"TestApp; id > /tmp/cve_2025_11953_poc.txt\"', {stdio: 'inherit', shell: true});"

Cleanup

bash
rm -f /tmp/cve_2025_11953_poc.txt

Expected Telemetry

Process create event showing node spawning sh or bash with a command line containing the injected semicolon-delimited id command; file creation event for /tmp/cve_2025_11953_poc.txt.

Expected Detection

Alert fires on shell metacharacter (;) in react-native CLI argument combined with shell child process spawn.

Test 2 Reverse shell injection via React Native CLI on Linux
linux

Simulates an attacker injecting a bash reverse-shell payload into a CLI argument to establish C2 callback, demonstrating the impact of CVE-2025-11953 in a CI/CD context.

Command

bash
node -e "const {execSync} = require('child_process'); try { execSync('echo \"injected: $(id)\" > /tmp/rn_inject_test.txt', {shell: true}); } catch(e) {}"

Cleanup

bash
rm -f /tmp/rn_inject_test.txt

Expected Telemetry

Process create events for node → sh → id; file write to /tmp/rn_inject_test.txt containing the output of id.

Expected Detection

Alert fires on $() subshell in node process command line combined with sh child process.

Test 3 Remote payload download via injected curl in React Native CLI build context
linux

Simulates an attacker leveraging CVE-2025-11953 to download a remote payload during CLI invocation, representing a supply-chain or CI/CD pipeline compromise scenario.

Command

bash
node -e "const {execSync} = require('child_process'); try { execSync('echo react-native-cli-context && curl -s -o /tmp/rn_dl_test.txt http://127.0.0.1:9999/payload 2>/dev/null || echo download_attempted', {shell: true}); } catch(e) { require('fs').writeFileSync('/tmp/rn_dl_test.txt', 'attempted'); }"

Cleanup

bash
rm -f /tmp/rn_dl_test.txt

Expected Telemetry

Process create event for node spawning sh, which spawns curl with an external URL argument; network connection event for curl to destination host.

Expected Detection

Alert fires on react-native CLI context process spawning curl with remote URL, matching RemoteDownload injection pattern.

Test 4 Windows PowerShell injection via React Native CLI on Windows
windows

Simulates CVE-2025-11953 exploitation on a Windows developer workstation where an injected argument causes the CLI to spawn PowerShell.

Command

powershell
node -e "const {execSync} = require('child_process'); try { execSync('echo react-native-cli & powershell -Command \"Get-Date | Out-File $env:TEMP\\rn_inject_test.txt\"', {shell: true}); } catch(e) {}"

Cleanup

powershell
powershell -Command "Remove-Item $env:TEMP\rn_inject_test.txt -ErrorAction SilentlyContinue"

Expected Telemetry

Sysmon Event ID 1 showing node.exe spawning cmd.exe which spawns powershell.exe; file creation event in %TEMP% for rn_inject_test.txt.

Expected Detection

Alert fires on react-native CLI Windows shell injection pattern matching & metacharacter combined with powershell child process.

Related Detections