Back to skill

Security audit

Application Tracker

Security checks for vulnerabilities and agentic risk

Overview

The skill’s form-filling purpose is clear, but its documented command templates create a real unsafe command-execution risk if used literally.

Review before installing. The skill’s intended behavior is reasonable for assisted form filling, but it should use a safe HTTP client or JSON serialization path instead of shell command templates. Only use it with a trusted local service, avoid sensitive profile data until the command construction is fixed, and manually review any filled form before submission.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:42
Finding
Shell Command Injection Through Unsafe curl Command Templates## Vulnerability Details **File Location**: `SKILL.md`, lines 42–46 **Vulnerability Type**: Shell command injection caused by unsafe interpolation of untrusted values **Risk Level**: High **Vulnerable Code**: ```sh curl -sS -X POST "http://127.0.0.1:8010/api/form/fill/start" -H "Content-Type: application/json" -d '{"url":"<target_url>","profile":{"name":"<name>","email":"<email>"},"max_actions":20}' curl -sS -X POST "http://127.0.0.1:8010/api/form/fill/review" -H "Content-Type: application/json" -d '{"thread_id":"<thread_id>","decision":"approve","max_actions":20}' curl -sS -X POST "http://127.0.0.1:8010/api/form/fill/review" -H "Content-Type: application/json" -d '{"thread_id":"<thread_id>","decision":"reject"}' ``` ### Technical Analysis The skill instructs an agent to execute shell-based `curl` templates and substitute user-controlled or API-derived values directly into a single-quoted JSON argument. A value containing a single quote can terminate the shell quoting context. Subsequent shell metacharacters can then introduce additional commands. The affected inputs include the target URL, profile name, email address, and thread identifier. The first three may be supplied directly by a user. The thread identifier is returned by the local API and must also be treated as untrusted because the integrity of that service and its responses is not established by the skill. Escaping values only for JSON is insufficient because JSON and shell parsing are separate interpretation layers. Values must not be concatenated into a command string interpreted by a shell. ### Attack Path 1. An attacker supplies a target URL or profile value containing a single quote followed by shell syntax. 2. The agent replaces a placeholder in the documented command template with the attacker-controlled value. 3. The inserted single quote closes the intended `-d` argument. 4. The shell interprets the remaining injected ...[truncated 968 chars]
Remediation
## Remediation Suggestions - Do not interpolate untrusted values into shell command strings. - Prefer a native HTTP client or structured tool that accepts the HTTP method, URL, headers, and body as separate parameters without invoking a shell. - Construct request bodies with a proper JSON serializer so quotation marks, control characters, and Unicode data are encoded correctly. - If `curl` must be used, invoke it through an argument-vector API with shell parsing disabled. Supply serialized JSON through standard input or a securely created file rather than concatenating it into a shell expression. - Strictly validate target URLs, allowing only required schemes such as `https`, while also applying appropriate restrictions against internal or otherwise prohibited destinations. - Treat API-returned thread identifiers as untrusted opaque data. Validate them against a narrow documented format, such as a UUID, before reuse. - Avoid logging full profile bodies or generated commands because they may contain personal information. - Add tests containing single quotes, quotation marks, command metacharacters, line breaks, and malformed identifiers to verify that inputs remain data and cannot alter command structure.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (1)

External Transmission

Medium
Category
Data Exfiltration
Content
## Command templates (exec tool + curl)

- Start:
  - `curl -sS -X POST "http://127.0.0.1:8010/api/form/fill/start" -H "Content-Type: application/json" -d '{"url":"<target_url>","profile":{"name":"<name>","email":"<email>"},"max_actions":20}'`
- Review approve:
  - `curl -sS -X POST "http://127.0.0.1:8010/api/form/fill/review" -H "Content-Type: application/json" -d '{"thread_id":"<thread_id>","decision":"approve","max_actions":20}'`
- Review reject:
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Static analysis

No suspicious patterns detected.