Back to skill

Security audit

Resume Tailor

Security checks for vulnerabilities and agentic risk

Overview

This skill appears purpose-aligned, but its shell-based curl templates create a real risk of unintended command execution if identifiers are not safely validated or encoded.

Install only if you trust the local service on 127.0.0.1:8010 and can ensure job_id and thread_id values are strictly validated. Prefer a revised skill that uses structured HTTP calls or non-shell argument arrays instead of interpolated curl command strings, and confirm every approve/export action before it runs.

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:41
Finding

Shell Command Injection Through Unsafe Parameter Interpolation in curl Templates

Content
View full analysis
","resume_version":"resume_v1"}'` - Review: - `curl -sS -X POST "http://127.0.0.1:8010/api/material/review" -H "Content-Type: application/json" -d '{"thread_id":"","decision":"approve"}'` - Export: - `curl -sS -X POST "http://127.0.0.1:8010/api/material/export" -H "Content-Type: application/json" -d '{"thread_id":"","format":"pdf"}'` ``` ### Technical Analysis The Skill instructs the Agent to invoke an execution tool with shell-formatted `curl` commands. The `job_id` and `thread_id` placeholders are placed directly inside single-quoted shell arguments without validation or shell-safe encoding. The `job_id` value may be supplied directly by a user. The `thread_id` value is obtained from a local API response and therefore crosses a separate trust boundary. If either value contains a single quote, it can terminate the surrounding shell argument. Additional shell operators and commands can then be introduced before the remainder of the command is neutralized, for example using a comment operator. JSON quoting does not protect values from shell interpretation. The shell parses and expands the command before `curl` receives the JSON body. Using a JSON serializer alone is also insufficient if the resulting JSON is subsequently concatenated into a shell command string. The vulnerability is exploitable when the Agent follows these templates by replacing placeholders in a command string and passes that string to a shell-based execution tool. ### Attack Path 1. An attacker supplies a crafted `job_id` containing a single quote followed by shell syntax. Alternatively, a compromised or ...[truncated 1470 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 (4)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger phrase 'Help me create application materials' is broad enough to match many ordinary resume or writing requests without clearly scoping when this skill should activate. Over-broad activation can cause the agent to invoke internal APIs and process/export sensitive applicant data in situations where the user did not explicitly ask for this workflow.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The trigger 'Approve/reject this material draft' is ambiguous because it does not constrain what 'material' refers to or ensure the draft originated from this skill's review flow. That ambiguity could let unrelated user content be routed into approve/reject actions, increasing the risk of unintended state changes or exports through the local review API.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
96% confidence
Finding

The skill instructs use of curl via an exec tool to POST user-related resume and application data to a local HTTP service. Even though the destination is localhost, this is still an external transmission path from the agent runtime to another service, and using shell command templates increases risk if untrusted fields like job_id or thread_id are interpolated unsafely.

Content

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

md
## Command templates (exec tool + curl)

- Generate:
  - `curl -sS -X POST "http://127.0.0.1:8010/api/material/generate" -H "Content-Type: application/json" -d '{"job_id":"<job_id>","resume_version":"resume_v1"}'`
- Review:
  - `curl -sS -X POST "http://127.0.0.1:8010/api/material/review" -H "Content-Type: application/json" -d '{"thread_id":"<thread_id>","decision":"approve"}'`
- Export:

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The example feedback text uses Chinese ("强调可量化结果") without indicating that language choice depends on user preference. This can imply a default language/locale behavior rather than offering the user a choice.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.