Back to skill

Security audit

Radarr Fixed

Security checks for vulnerabilities and agentic risk

Overview

This Radarr skill is mostly a coherent library-management helper, but it also allows movie removal, optional media-file deletion, and persistent collection auto-add behavior that are not strongly disclosed or gated.

Review this skill before installing if you want an add-only Radarr helper. Only use it with a Radarr API key you are comfortable granting library mutation rights, and treat remove, --delete-files, and add-collection as high-impact actions that should require explicit user confirmation.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
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
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (11)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The declared purpose says the skill searches and adds movies, but the documented commands also remove movies, optionally delete files, and expose configuration details. This mismatch is dangerous because reviewers and users may authorize or invoke the skill expecting low-risk library additions while the skill actually includes destructive operations that can delete content from the Radarr-managed media library.

Description-Behavior Mismatch

High
Confidence
98% confidence
Finding
The skill description says it supports searching and adding movies, but the script also exposes a remove command that deletes Radarr library entries and can optionally delete associated files. This hidden destructive capability increases the risk of accidental or unauthorized data loss because users and higher-level agents may invoke the skill under incorrect assumptions about its scope.

Missing User Warnings

High
Confidence
98% confidence
Finding
The remove path performs a DELETE request immediately and supports deleting associated files with no confirmation, dry-run, or secondary approval. In an agent context, this makes accidental invocation or parameter confusion especially dangerous because it can irreversibly remove media and filesystem data.

Lp3

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding
The skill documents shell-based command execution but does not declare any tool scope such as allowed-tools or permissions. This weakens the trust boundary for the agent/runtime because users and policy layers cannot clearly see that shell access is required, increasing the chance of unintended command execution under broader-than-expected privileges.

Description-Behavior Mismatch

Medium
Confidence
96% confidence
Finding
The manifest description omits the movie removal capability even though the skill explicitly supports removal and optional file deletion. In security-sensitive agent ecosystems, incomplete disclosure can cause unsafe delegation decisions and reduce the chance that destructive functionality receives appropriate scrutiny or user confirmation.

Session Persistence

Medium
Category
Rogue Agent
Content
## Setup

Create `~/.openclaw/credentials/radarr/config.json`:
```json
{
  "url": "http://localhost:7878",
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.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The script reads the Radarr URL and API key from a credential file, but there is no user-facing notice beyond an internal comment explaining that sensitive credentials are being accessed. For code files, comments alone do not satisfy the disclosure requirement when accessing sensitive credentials.

External Transmission

Medium
Category
Data Exfiltration
Content
}
    ')
    
    result=$(curl -s -X POST -H "$AUTH" -H "Content-Type: application/json" -d "$addRequest" "$API/movie")
    
    if echo "$result" | jq -e '.id' > /dev/null 2>&1; then
      echo "✅ Added: $(echo "$result" | jq -r '.title') ($(echo "$result" | jq -r '.year'))"
Confidence
70% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
}
    ')
    
    result=$(curl -s -X POST -H "$AUTH" -H "Content-Type: application/json" -d "$addRequest" "$API/movie")
    
    if echo "$result" | jq -e '.id' > /dev/null 2>&1; then
      echo "✅ Added: $(echo "$result" | jq -r '.title') ($(echo "$result" | jq -r '.year'))"
Confidence
70% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
After adding a collection, the script silently enables monitored=true and searchOnAdd=true for the collection, causing future releases to be auto-added without explicit user consent. This behavior exceeds the stated search/add scope and can create ongoing state changes, unwanted downloads, and resource consumption over time.

External Transmission

Medium
Category
Data Exfiltration
Content
fullCollection=$(curl -s -H "$AUTH" "$API/collection/$collectionId")
      updatePayload=$(echo "$fullCollection" | jq '. + {monitored: true, searchOnAdd: true}')
      
      updateResult=$(curl -s -X PUT -H "$AUTH" -H "Content-Type: application/json" -d "$updatePayload" "$API/collection/$collectionId")
      
      if echo "$updateResult" | jq -e '.monitored' > /dev/null 2>&1; then
        echo "👁️ Collection monitored (new releases auto-added)"
Confidence
92% confidence
Finding
This PUT request modifies collection settings to enable monitoring and auto-add behavior, creating ongoing automated changes beyond a one-time add action. Because the behavior is not clearly disclosed and affects future library state, the external transmission is security-relevant in this context.

Static analysis

No suspicious patterns detected.