Back to skill

Security audit

ResumeClaw

Security checks for vulnerabilities and agentic risk

Overview

The skill matches its ResumeClaw career-agent purpose, but its shell wrapper has serious security weaknesses that could expose credentials, resumes, sessions, or allow command execution from crafted input.

Review before installing. Use only with a trusted ResumeClaw endpoint, avoid shared machines, do not reuse an important password, and assume resume contents and account actions are sent to ResumeClaw. The search command and credential/session handling should be fixed before routine use.

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 (5)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/resumeclaw.sh:247
Finding

Arbitrary Local Command Execution Through Search Parameters

Content
View full analysis
/dev/null || echo "$query")" fi [[ -n "$location" ]] && params="${params}&location=$(python3 -c "import urllib.parse; print(urllib.parse.quote('$location'))" 2>/dev/null || echo "$location")" ``` ### Technical Analysis The `query` and `location` parameters are interpolated directly into Python source code passed to `python3 -c`. Although the shell variables are expanded inside a quoted shell argument, their contents become executable Python syntax. An attacker can close the Python string literal and append arbitrary Python statements. For example, a query shaped like: ```text x')); import os; os.system("id"); # ``` causes the generated Python program to contain an attacker-controlled `os.system()` call. The vulnerability is reachable through the documented `search --query` and `search --location` options. The fallback to `echo "$query"` does not mitigate the vulnerability because it only executes after the injected Python process has already run. ### Attack Path 1. An attacker persuades the Agent or user to search for an attacker-controlled string. 2. The value is supplied through `--query` or `--location`. 3. `cmd_search` inserts the value into the source code given to `python3 -c`. 4. The injected value terminates the intended Python string and adds arbitrary Python statements. 5. Python executes those statements with the privileges of the user running the Skill. 6. The attacker can invoke shell commands, read accessible files, modify user data, or make network requests. ### Impact Assessment Successful exploitation provides arbitrary command execution under the operating-system identity running the Ski ...[truncated 309 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/resumeclaw.sh:13
Finding

Sensitive Data Can Be Redirected to an Arbitrary or Plaintext Endpoint

Content
View full analysis
Remediation
View remediation
&2 exit 1 ;; esac ``` ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:20
Finding

Account Passwords Are Exposed Through Command-Line Arguments

Content
View full analysis
Remediation
View remediation
&2 else IFS= read -r password fi ``` Update `SKILL.md` and `references/api.md` so they no longer instruct users or Agents to include real passwords in command arguments or command history. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/resumeclaw.sh:14
Finding

Persistent Session Cookie Storage Does Not Enforce Restrictive Permissions

Content
View full analysis
Remediation
View remediation
&2 return 1 fi if [[ ! -e "$SESSION_FILE" ]]; then : > "$SESSION_FILE" fi chmod 600 -- "$SESSION_FILE" } ``` Additional hardening should include: - Reject symbolic links for the session file. - Verify that the session directory is owned by the current user. - Use atomic file replacement where possible. - Separate cookie jars by validated server origin. - Provide a logout command that removes the cookie securely and revokes the server-side session. - Avoid placing session storage in shared or network-mounted locations. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/resumeclaw.sh:103
Finding

Unescaped User Input Is Interpolated into JSON Request Bodies

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (12)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill invokes shell commands and reaches a remote service, but it does not declare any tool restrictions or permission boundaries. That makes the operational trust model ambiguous and can allow broader-than-necessary shell/network access when the skill is triggered, increasing the blast radius of prompt mistakes or misuse.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
81% confidence
Finding

The skill is designed around persistent authenticated use cases such as inbox access, introductions, notifications, and profile management, and it explicitly stores an auth session on disk. Persistent sessions are not inherently malicious, but without clear lifecycle and protection requirements they increase the risk of unauthorized reuse by other local processes or users.

Content

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

md
name: resumeclaw
description: >
  Manage your ResumeClaw career agent — an AI that represents your professional experience
  to recruiters 24/7. Use when the user wants to: create a career agent from their resume,
  check who's contacted their agent, accept/decline recruiter introductions, search for
  other professionals, chat with candidate agents, manage notifications, or discuss
  anything about ResumeClaw, career agents, or AI-powered recruiting.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The trigger scope includes broad phrases like discussing anything about ResumeClaw, career agents, or AI-powered recruiting, which can cause the skill to activate during general conversation rather than clear task execution. Overbroad activation increases the chance of unnecessary shell/network actions, accidental credential prompts, or handling sensitive career data when the user did not intend to invoke the integration.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The authentication flow tells the agent to prompt for email and password and stores a session at ~/.resumeclaw/session, but it omits warnings about secret handling, local session protection, and avoiding logging or echoing credentials. Because this skill handles passwords and resumes, the lack of guidance can lead to credential exposure in chat transcripts, shell history, debug output, or insecure local files.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/api.md (reported line 40)May include surrounding context.

curl:

bash
curl -X POST "${BASE_URL}/api/auth/register" \
  -H "Content-Type: application/json" \
  -c cookies.txt \
  -d '{"email":"user@example.com","password":"securepass123","name":"Jane Smith"}'

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The agent creation endpoint explicitly encourages uploading full resume text, which commonly contains sensitive personal data such as email addresses, phone numbers, employment history, and location. Omitting any privacy warning or data-handling notice can mislead users into oversharing highly sensitive information to an external service without informed consent.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/api.md (reported line 189)May include surrounding context.

curl:

bash
curl "${BASE_URL}/api/agents/search?q=data+engineer&location=Dallas"

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The introduction request endpoint collects and transmits requester identity, contact details, company, role, and freeform message content, but the reference provides no warning that this personal and potentially sensitive business information will be shared. Users may unknowingly disclose more than intended, increasing privacy and unsolicited-contact risk.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The create command reads a full resume and transmits it to a remote service without any explicit warning, confirmation, or minimization guidance. Resumes commonly contain sensitive personal data such as full name, contact details, employment history, and sometimes location or other identifiers, so silent upload increases privacy and data-handling risk.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · scripts/resumeclaw.sh (reported line 314)May include surrounding context.

sh
cookies=$(cookie_args)
  # Chat endpoint streams SSE — collect full response
  # shellcheck disable=SC2086
  curl -s -X POST "${BASE_URL}/api/agents/${slug}/chat" \
    -H "Content-Type: application/json" \
    $cookies \
    -d "{\"message\":${json_message}}"

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The wrapper persists session cookies to a predictable file under the user's home directory without setting restrictive permissions or notifying the user. If local filesystem permissions are weak or the environment is shared, another local user or process could reuse the session and access the account.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The notifications command can mark all notifications as read via a POST request, changing remote account state, but the script does not provide a confirmation prompt or explicit warning before doing so. Because this action may be unintended and is not easily reversible, some user disclosure is warranted.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.