Back to skill

Security audit

Iphone Use

Security checks for vulnerabilities and agentic risk

Overview

The skill is openly meant to control a real iPhone, but its update/install guidance relies on an unverified remote shell installer that creates persistent software on the Mac.

Review this skill carefully before installing. Only use it with a phone and Mac you control, protect the daemon token, avoid unattended payment or 2FA flows, and do not run the documented curl | sh installer unless you have independently reviewed or pinned the installer and understand the LaunchAgent it creates.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (1)

T03 · Remote Payload Retrieval and Execution

Error
Location
SKILL.md:173
Finding
Mutable Remote Installer Executed Directly with Cross-Session Persistence## Vulnerability Details **File Location**: `SKILL.md`, line 13 and line 173 **Vulnerability Type**: `T03: Remote Payload Retrieval and Execution, T06: System Persistence` **Risk Level**: Critical **Vulnerable code and related documentation:** ```markdown (setup: see the repo README; `install.sh` registers it as a LaunchAgent). ``` ```bash daemon: curl -fsSL https://raw.githubusercontent.com/leeguooooo/iphone-use/main/install.sh | sh ``` ### Technical Analysis The update instructions download `install.sh` from the mutable `main` branch of a personal GitHub repository and pipe the response directly into `sh`. The payload is neither version-pinned nor protected by a published checksum or cryptographic signature. It is also not saved for inspection before execution. Consequently, the effective code executed by this Skill can change after the reviewed Skill package has been published. Piping a network response directly to a shell creates an arbitrary-code-execution channel under the privileges of the user invoking the command. Compromise of the repository, maintainer account, release process, or network trust chain could replace the installer with malicious commands. The documentation further states that the installer registers the daemon as a macOS LaunchAgent, causing installed code to run across sessions. Installing or updating a persistent daemon is operationally related to providing the documented iPhone-control service, but direct execution of an unverified mutable script exceeds the minimum privilege and trust required to interact with the daemon's HTTP API. Persistence should be separately disclosed and approved, and installation should use a verifiable artifact. ### Attack Path 1. An attacker compromises the GitHub account, repository, branch, or another component capable of altering the content returned for `install.sh`. 2. The attacker modifies the remote installer to include arbitrary malicious shell commands wh ...[truncated 1650 chars]
Remediation
## Remediation Suggestions 1. Remove the direct `curl | sh` installation and update instruction. 2. Publish versioned release artifacts and reference an immutable release tag or commit rather than the mutable `main` branch. 3. Download the installer to a local file first so that its source and contents can be reviewed before execution. 4. Publish a SHA-256 checksum through a separately protected channel and verify it before running the installer. 5. Cryptographically sign release artifacts and verify the signature against a documented, trusted maintainer key. Prefer a signed and notarized macOS package. 6. Require explicit user confirmation before installing a LaunchAgent. Clearly document its label, executable path, configuration, permissions, startup behavior, logs, network listeners, and uninstall procedure. 7. Run the daemon with the least privileges necessary. Avoid administrator privileges, restrict filesystem access, bind locally by default, and protect the API with strong authentication. 8. Separate daemon installation from routine Skill use. The Skill should normally interact only with an already installed and explicitly configured HTTP service. 9. Pin updates to reviewed versions and provide rollback instructions rather than automatically following the repository's latest mutable state. 10. Review and audit `install.sh` and every executable it retrieves before recommending it to users.
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
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (7)

Chaining Abuse

High
Category
Tool Misuse
Content
```
iphone-use 有新版本(latest,当前 version)。升级:
  daemon: curl -fsSL https://raw.githubusercontent.com/leeguooooo/iphone-use/main/install.sh | sh
  skill : npx skills update -g
```
Confidence
98% confidence
Finding
The documentation explicitly recommends `curl ... | sh` against a remote GitHub-hosted installer, which creates a direct arbitrary code execution path if the source, transport endpoint, repository, or upstream content is compromised. In the context of this skill, that risk is amplified because the tool controls a real iPhone and may hold tokens or access sensitive personal apps and data, so compromise of the host can cascade into device and account abuse.

External Transmission

Medium
Category
Data Exfiltration
Content
(`0,0` top-left, `1,1` bottom-right), so they're resolution-independent:

```bash
curl -s -H "$AUTH" -X POST "$HOST/agent/input" -d '{"type":"tap","x":0.5,"y":0.3}'
curl -s -H "$AUTH" -X POST "$HOST/agent/input" -d '{"type":"tap","label":"新备忘录"}'  # (wda) tap BY ELEMENT — no coords
curl -s -H "$AUTH" -X POST "$HOST/agent/input" -d '{"type":"scroll","x":0.5,"y":0.5,"dx":0,"dy":-60}'
curl -s -H "$AUTH" -X POST "$HOST/agent/input" -d '{"type":"text","text":"Health"}'
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
curl -s -H "$AUTH" -X POST "$HOST/agent/input" -d '{"type":"text","text":"Health"}'
curl -s -H "$AUTH" -X POST "$HOST/agent/input" -d '{"type":"key","name":"return"}'
curl -s -H "$AUTH" -X POST "$HOST/agent/input" -d '{"type":"shortcut","name":"home"}'      # home|spotlight|switcher
curl -s -H "$AUTH" -X POST "$HOST/agent/input" -d '{"type":"longpress","x":0.4,"y":0.6}'   # release with {"type":"up",...}
curl -s -H "$AUTH" -X POST "$HOST/agent/input" -d '{"type":"keyboard"}'                     # (wda) dismiss the on-screen keyboard
```
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

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.

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.

External Script Fetching

Low
Category
Supply Chain
Content
the waits, and what you verified in each screenshot ("Health profile page:
   avatar top-right visible").
2. **When the task succeeds, freeze the log into a script** (bash or python:
   the curl sequence + sleeps). Normalized coordinates are stable for a given
   app screen + phone model, so replays are reliable.
3. **Keep checkpoints, drop reasoning.** At 2–3 key steps the script should
   grab a screenshot and do a cheap sanity check (or just save it for a human).
Confidence
15% confidence
Finding
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Natural-Language Policy Violations

Low
Confidence
97% confidence
Finding
The markdown instructs the agent to tell the user about updates using a Chinese message literal: "iphone-use 有新版本... 升级:". This imposes a specific language in user-facing communication without opt-in or documented locale scope, which is a natural-language policy violation under the language/locale rule.

Static analysis

No suspicious patterns detected.