Back to skill

Security audit

React Native Update

Security checks for vulnerabilities and agentic risk

Overview

This skill is a coherent React Native OTA integration guide with expected package-install and project-diagnostic behavior, but users should confirm service choice and dependency versions before running commands.

Before installing or using this skill, confirm whether your app should use Pushy or Cresc, prefer pinned project-local dependencies over global installs when your workflow allows it, review lockfile changes, and avoid committing the .update file. Treat baseline upload and hot-update publishing as release actions that should be reviewed before execution.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T08 · Insecure Dependencies

Warning
Location
references/integration-playbook.md:15
Finding

Unpinned Third-Party Package Installation and Execution

Content
View full analysis

Vulnerability Details

File Location: references/integration-playbook.md:15-16 and references/integration-playbook.md:35
Vulnerability Type: Unpinned third-party dependencies and CLI execution
Risk Level: Medium

Vulnerable code snippets:

sh
npm i react-native-update
npm i -g react-native-update-cli
sh
npx expo prebuild

The related workflow instruction in SKILL.md:23 also directs the Agent to install the SDK and make the CLI available:

text
3. Install `react-native-update` and ensure `react-native-update-cli` is available.

Technical Analysis

The installation commands do not specify reviewed package versions or integrity constraints. Consequently, package resolution depends on the registry state at execution time rather than a version that was reviewed with this Skill.

Installing react-native-update-cli globally also places an externally supplied executable on the user's PATH. The npx expo prebuild command may retrieve and execute a package from the configured npm registry when a suitable local executable is unavailable. npm installation can execute package lifecycle scripts, while CLI invocation directly executes package code.

This creates a supply-chain exposure: compromise of a referenced package, maintainer account, registry response, or transitive dependency could cause code different from the code originally reviewed to execute during integration.

Attack Path

  1. An attacker compromises a referenced npm package release, a transitive dependency, a package maintainer account, or the registry used by the target environment.
  2. The user or Agent follows the Skill and runs an unpinned installation or npx command.
  3. The package manager resolves the attacker-controlled release because no exact reviewed version is required.
  4. Malicious code executes through an installation lifecycle script or the invoked CLI.
  5. The payload accesses or modifies ...[truncated 874 chars]
Remediation
View remediation

Remediation Suggestions

  1. Pin each dependency to a reviewed exact version rather than resolving the latest compatible release:

    sh
    npm install --save-exact react-native-update@REVIEWED_VERSION
    npm install --save-dev --save-exact react-native-update-cli@REVIEWED_VERSION
    
  2. Install the CLI as a project development dependency instead of globally. Invoke the lockfile-controlled local executable through a package script or package-manager execution command.

  3. Commit and review the package lockfile. In automated environments, use deterministic installation such as:

    sh
    npm ci
    
  4. Ensure Expo is declared at an approved version in the project and execute the local locked binary. Avoid permitting npx to download an unspecified package dynamically.

  5. Where supported, require offline or lockfile-only execution after dependencies have been reviewed and fetched:

    sh
    npm exec --offline -- expo prebuild
    
  6. Verify npm registry configuration, package provenance, publisher identity, and integrity metadata before installation. Restrict CI network access and package lifecycle scripts where operationally possible.

  7. Document the approved versions directly in the playbook and establish a controlled process for reviewing and updating those versions.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (4)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
85% confidence
Finding

The description says to use the skill for a wide range of situations including integration, troubleshooting, diagnostics, monorepos, mixed native apps, and multiple platforms/services. While domain-specific, it does not clearly define boundaries or exclusions, which can make invocation conditions ambiguous for when this skill should be chosen versus other React Native or OTA-related skills.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
81% confidence
Finding

The routing logic directs the agent to infer whether to use Pushy or Cresc based on locale, wording, imports, or docs rather than requiring explicit user confirmation. In deployment-sensitive OTA update workflows, choosing the wrong backend can misroute releases, expose update metadata to the wrong service environment, or cause operational mistakes that affect app distribution and compliance.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.