Back to skill

Security audit

Jackett

Security checks for vulnerabilities and agentic risk

Overview

This Jackett search skill is purpose-built, but it needs review because it handles Jackett API keys and private tracker URLs with limited safety guidance.

Install only if you trust the local Jackett service and understand that the skill can use your Jackett API key to query configured torrent indexers. Store the credential file with owner-only permissions, prefer a local HTTPS or loopback endpoint, avoid sharing raw output because download and magnet URLs may contain private tracker tokens, and rotate the Jackett API key if it may have been exposed.

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

T09 · Insecure Skill Coding Practices

Warning
Location
README.md:28
Finding

Credential file is created without restrictive permissions

Content
View full analysis
~/.openclaw/credentials/jackett/config.json << 'EOF' { "url": "http://localhost:9117", "apiKey": "your-jackett-api-key" } EOF ``` ### Technical Analysis The documented setup creates a directory and plaintext JSON credential file without explicitly applying restrictive permissions. The resulting permissions depend on the user's current `umask`. In an environment with a permissive or misconfigured `umask`, the directory or file may be readable by other local accounts. Although access to a Jackett API key is necessary for the Skill's declared functionality, making that key potentially accessible to unrelated local users exceeds the minimum exposure required. The implementation itself only reads the designated configuration file and does not enumerate unrelated credential paths; the issue is specifically the insecure setup procedure. ### Attack Path 1. A user follows the documented setup commands. 2. The shell creates the credential directory and `config.json` using permissions derived from the current `umask`. 3. If those permissions permit group or world access, another local account reads `~/.openclaw/credentials/jackett/config.json`. 4. The attacker extracts the Jackett URL and API key. 5. The attacker submits authenticated requests to the reachable Jackett API. Exploitation requires local filesystem access and permissive file or directory permissions. ### Impact Assessment An attacker could obtain the Jackett API key and perform actions authorized by that key against any Jackett endpoint accessible to the attacker. This may disclose configured indexers, search activity, and indexed release metadata, or permit other API operations supported by the deployment. The issue does not grant ope ...[truncated 143 chars]
Remediation
View remediation
~/.openclaw/credentials/jackett/config.json << 'EOF' { "url": "http://localhost:9117", "apiKey": "your-jackett-api-key" } EOF chmod 600 ~/.openclaw/credentials/jackett/config.json ``` Additional hardening measures: - Document that the credential file must remain owned by the account running the Skill. - Recommend checking permissions with: ```bash stat -c '%a %U:%G %n' ~/.openclaw/credentials/jackett ~/.openclaw/credentials/jackett/config.json ``` - Reject or warn about configuration files accessible by group or other users. - Prefer a managed secret store where the deployment environment provides one. - Rotate the API key if the file was previously stored with permissive permissions. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/jackett-api.sh:57
Finding

Jackett API key is exposed in the curl process argument URL

Content
View full analysis
`. 3. The script starts `curl` with the complete authenticated URL in its argument vector. 4. A local attacker or monitoring process observes the running process's arguments before it exits. ...[truncated 956 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (6)

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · README.md (reported line 25)May include surrounding context.

In the Jackett web UI, open the dashboard and copy the API key.

2. Create Credentials File

bash
mkdir -p ~/.openclaw/credentials/jackett

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

SQP-3 applies to all file types and covers language or locale policy violations in natural-language instructions. The statement 'Prefer English titles for movies, shows, albums, and books' imposes a language preference without opt-in, which can conflict with organizational expectations around user language choice.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding

The skill invokes shell scripts that make network requests to a local Jackett service, but the manifest does not declare any tool scope or permission boundaries. This creates an authorization gap where an agent may use shell/network capabilities without explicit review, increasing the risk of unintended command execution, access to local credentials, or outbound requests in environments that rely on manifest-declared restrictions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
86% confidence
Finding

This markdown file applies to SQP-2, and it instructs users to export JACKETT_API_KEY directly into their shell environment. While the file explains how to set the credential, it does not include any warning about credential exposure risks such as shell history, shared environments, or accidental disclosure.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

The skill returns fields like link, details, and download_url from torrent indexers without warning that these may contain sensitive tracker URLs, passkeys, or other identifying tokens. Users may paste or share output assuming it is harmless, which can leak private tracker credentials or personal access URLs and enable account abuse.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

This shell script accesses sensitive authentication material via JACKETT_API_KEY/JACKETT_APIKEY and a credentials file under ~/.openclaw/credentials. In this code file there is no confirmation prompt or explicit user-facing warning that credential data will be read and used for outbound API requests.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.