Back to skill

Security audit

AppDev-Skill

Security checks for vulnerabilities and agentic risk

Overview

This skill automatically delegates app-development requests to a local backend using an unsafe shell command that can expose prompts and may allow command injection.

Install only if you intentionally want app-development requests handed to a local Restate AppFactory service. Before use, confirm what runs on 127.0.0.1:8080, what it stores, and who can access queued prompts. Do not include secrets or proprietary details unless the backend is trusted, and the skill should be revised to ask for confirmation and use safe JSON serialization instead of shell text substitution.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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 (2)

T01 · Skill Instruction Hijacking

Error
Location
SKILL.md:10
Finding

Mandatory Delegation Hijacks the Agent's App-Development Workflow

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:17
Finding

Shell Command Injection Through Unescaped User-Prompt Substitution

Content
View full analysis
"}' ``` ### Technical Analysis The skill requires the agent to insert the user's exact feature request into a JSON string embedded inside a single-quoted shell argument and then execute the resulting command with `exec`. No safe JSON serialization or shell-argument escaping is specified. A user prompt containing a single quote can terminate the shell argument. Shell metacharacters following that quote can then introduce arbitrary commands. Double quotes, backslashes, control characters, and line breaks can also produce malformed JSON or alter the intended request body. For example, a malicious prompt shaped like the following can break out of the quoted argument if substituted verbatim: ```text '; id > /tmp/injected; # ``` The resulting shell command would end the `-d` value, execute the injected command, and comment out the remainder. The precise behavior depends on how the agent performs substitution and invokes `exec`, but the documented workflow explicitly directs textual insertion into shell source and therefore provides no safe boundary between data and commands. The endpoint is additionally written using Markdown link syntax: ```text [http://127.0.0.1:8080/AppFactory/buildFeature/send](http://127.0.0.1:8080/AppFactory/buildFeature/send) ``` That is not a valid literal URL argument for `curl`. This reliability defect does not prevent shell injection because command parsing occurs before `curl` validates its arguments. ### Attack Path 1. An attacker submits an app-development request containing a single quote followed by shell syntax and an attacker-selected c ...[truncated 1317 chars]
Remediation
View remediation
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 (3)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The trigger condition is broad enough to activate on many normal app-development requests, causing this skill to run frequently and automatically. Because the skill's behavior is to transmit the user's request to a backend service, overbroad triggering increases the chance of unintended data disclosure and unintended delegation without clear user consent.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill instructs the agent to send the user's exact prompt over HTTP but provides no requirement to notify the user, obtain consent, or minimize sensitive content. Even though the destination is localhost, it is still a separate service boundary, and forwarding raw prompts may leak secrets, proprietary code, credentials, or personal data to another process.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
98% confidence
Finding

This command performs an HTTP POST to a local backend and includes the user's prompt directly in the request body, creating a concrete external-transmission path for potentially sensitive input. Because the content is inserted into a shell-invoked curl command, the pattern also raises risk of unsafe handling of special characters and unreviewed cross-boundary execution, making the skill materially dangerous in context.

Content

Scanner excerpt · SKILL.md (reported line 18)May include surrounding context.

  1. Use the exec tool to run the following curl command. This pushes the task to Restate's asynchronous queue.
bash
curl -sS -X POST [http://127.0.0.1:8080/AppFactory/buildFeature/send](http://127.0.0.1:8080/AppFactory/buildFeature/send) \
  -H "Content-Type: application/json" \
  -d '{"prompt": "<INSERT_USER_PROMPT_HERE>"}'