Back to skill

Security audit

maestro-mobile-test

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent mobile testing skill, but its setup path can run unverified internet-downloaded shell code and install system packages on a developer machine.

Install only if you are comfortable with a local mobile-test skill that can install developer tools, write `~/.maestro/activate.sh`, boot emulators, run adb commands, and execute Maestro flows. Prefer manually installing Maestro from a pinned, verified release or reviewing the downloaded installer before running setup, and point tests at non-production apps and backends.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (7)

Lp3

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding
The skill clearly instructs the agent/user to execute shell commands (`bash`, `adb`, `gradlew`, emulator boot commands) but does not declare corresponding permissions. That mismatch can bypass governance expectations, causing an agent to perform system-level actions the operator may not realize the skill enables.

Vague Triggers

Medium
Confidence
83% confidence
Finding
The trigger guidance is broad enough to auto-invoke on generic phrases like 'test my react native app' or 'test the expo app', which can activate a shell-capable skill in contexts where the user did not explicitly request emulator setup, package installation, or device control. Over-broad routing increases the chance of unintended execution of powerful actions.

Missing User Warnings

Low
Confidence
74% confidence
Finding
The skill encourages app control actions such as `launchApp` and references `clearState`, installs APKs, and runs flows against real app state, but it does not prominently warn that these operations may reset session data, modify local state, or interact with connected backends. In a testing context this is expected, but absent warnings can still cause accidental destructive or state-altering behavior.

Missing User Warnings

Medium
Confidence
97% confidence
Finding
The script downloads code from a remote endpoint and immediately executes it via the shell, with no integrity verification, pinning, or explicit trust prompt. If the remote server, DNS, TLS chain, or distribution path is compromised, arbitrary code will run as the invoking user during setup.

External Script Fetching

High
Category
Supply Chain
Content
| Java 17+ | `java -version` | `brew install --cask temurin@17` (macOS), `sudo apt install openjdk-17-jdk` (Linux), `winget install Microsoft.OpenJDK.17` (Windows) — or run `scripts/setup.sh` which auto-installs |
| Android SDK | `echo $ANDROID_HOME` | Android Studio |
| AVD (emulator image) | `emulator -list-avds` | Android Studio → AVD Manager |
| Maestro CLI | `maestro --version` | `curl -Ls https://get.maestro.mobile.dev \| bash` — or run `scripts/setup.sh` |
| Built APK (Android) | Check `android/app/build/outputs/apk/` | `cd android && ./gradlew assembleDebug` |

### Environment setup
Confidence
97% confidence
Finding
The skill recommends piping a remote script directly into `bash` (`curl ... | bash`), which executes network-fetched code without verification. If the upstream endpoint, transport, DNS, or distribution channel is compromised, the agent/user could run arbitrary code on the host with the current user's privileges.

External Script Fetching

High
Category
Supply Chain
Content
if [ -n "${JAVA_HOME:-}" ]; then
        export PATH="$JAVA_HOME/bin:$PATH"
    fi
    curl -Ls "https://get.maestro.mobile.dev" | bash
    echo ""
    export PATH="$HOME/.maestro/bin:$PATH"
    echo "✅ Maestro installed to ~/.maestro/bin"
Confidence
99% confidence
Finding
The setup script fetches an external installer from the internet and executes it immediately with bash. In a mobile-testing skill, users are likely to run setup scripts locally on developer workstations, so compromise of the upstream endpoint would directly yield arbitrary code execution on a developer machine.

Chaining Abuse

High
Category
Tool Misuse
Content
if [ -n "${JAVA_HOME:-}" ]; then
        export PATH="$JAVA_HOME/bin:$PATH"
    fi
    curl -Ls "https://get.maestro.mobile.dev" | bash
    echo ""
    export PATH="$HOME/.maestro/bin:$PATH"
    echo "✅ Maestro installed to ~/.maestro/bin"
Confidence
98% confidence
Finding
Piping network-fetched content into bash is a dangerous command chain because it removes any opportunity for inspection and turns a remote response directly into executable shell code. In this setup context, that can compromise developer endpoints, CI runners, local secrets, Android signing keys, or source code checked out on the machine.

Static analysis

No suspicious patterns detected.