Back to skill

Security audit

Personal Docker Manager

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent Arcane Docker API skill, but it gives agents broad Docker and account-management powers without enough guardrails for destructive actions or credential transport.

Install only if you intend to let the agent administer an Arcane/Docker environment. Use HTTPS for any non-local Arcane API, keep tokens and API keys in environment variables or a secret store, use least-privileged credentials, and require explicit confirmation before deletes, prunes, container exec, user changes, or API-key changes.

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

Warning
Location
SKILL.md:20
Finding

Credentials and Privileged Tokens May Be Transmitted over Plaintext HTTP

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 20–36
Vulnerability Type: Plaintext transmission of sensitive authentication data
Risk Level: Medium

Vulnerable Code

markdown
### Base URL
The API base URL should be configured by the user. Default: `http://localhost:3552/api`

### Authentication
Arcane supports two authentication methods:

1. **Bearer Token (JWT)**: Obtained via login endpoint
2. **API Key**: Long-lived authentication using `X-API-Key` header

#### Getting a Bearer Token
```bash
curl -X POST "$BASE_URL/auth/login" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "admin",
    "password": "your_password"
  }'
text

Related authenticated examples also use the HTTP default:

```python
BASE_URL = "http://localhost:3552/api"
TOKEN = "your-jwt-token"

headers = {
    "Authorization": f"Bearer {TOKEN}",
    "Content-Type": "application/json"
}
bash
BASE_URL="http://localhost:3552/api"
TOKEN="your-jwt-token"

curl -s -X "$method" "$BASE_URL/$endpoint" \
    -H "Authorization: Bearer $TOKEN"

Technical Analysis

The Skill instructs users to submit account passwords and reusable bearer tokens to a configurable API base URL while setting the default scheme to unencrypted HTTP. Loopback HTTP reduces exposure when Arcane and the client are strictly confined to the same trusted host, but the examples neither enforce loopback-only use nor reject remote HTTP destinations.

If BASE_URL is changed to a remote HTTP endpoint, authentication data can traverse the network without transport encryption. An attacker with a suitable network position could observe or modify the request. An attacker who can influence API configuration could also direct authentication requests to an attacker-controlled endpoint. The later recommendation to use HTTPS in production does not technically enforce secure transport in the executable examples.

The network communication itself is necessary for the declared Arcane-ma ...[truncated 1817 chars]

Remediation
View remediation

Remediation Suggestions

  1. Require HTTPS for every non-loopback API endpoint and fail closed when a remote URL uses HTTP.
  2. Explicitly restrict plaintext HTTP to localhost, 127.0.0.1, or another carefully validated local transport if compatibility requires it.
  3. Validate the URL scheme and destination before attaching a password, bearer token, refresh token, or API key.
  4. Disable redirects for authentication requests, or verify that every redirect remains on the expected HTTPS origin before forwarding credentials.
  5. Keep TLS certificate verification enabled and document the secure installation of private certificate authorities where applicable.
  6. Replace production-oriented examples with an HTTPS base URL and clearly label loopback HTTP as a local-development exception.
  7. Read secrets from protected environment variables or an operating-system secret store rather than embedding them in scripts.
  8. Avoid password-bearing command-line examples where credentials may leak through shell history, logs, or copied command output. Prefer interactive input or a protected configuration source.
  9. Use short-lived, least-privileged tokens and narrowly scoped API keys. Rotate them regularly and revoke them immediately after suspected disclosure.
  10. Require explicit user confirmation before destructive actions such as deletion, pruning, account changes, or container command execution.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (9)

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

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

md
**Authentication Failed**
- Verify token is not expired (check `expiresAt`)
- Use refresh token to get new access token
- Verify API key is correct and not expired

**Container Won't Start**

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill advertises access to logs, events, system information, users, and API key management without privacy, least-privilege, or credential-handling guidance near those capabilities. Because these endpoints can expose sensitive operational data and secrets, an agent may retrieve or manipulate high-value information without adequate user warning or minimization.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
78% confidence
Finding

The login example shows transmission of administrator credentials to a default plain-HTTP endpoint (http://localhost:3552/api) and does not strongly warn against using insecure transport outside local-only scenarios. If adapted or copied to non-local deployments, credentials and tokens could be intercepted, leading to full administrative compromise of the Docker management platform.

Content

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

Getting a Bearer Token

bash
curl -X POST "$BASE_URL/auth/login" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "admin",

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill documents destructive operations such as removing containers, stacks, images, networks, volumes, users, and API keys, but does not pair them with explicit confirmation, scope-limiting, or user-impact warnings. In an agent context, this increases the chance of accidental destructive actions against live infrastructure, causing service interruption or irreversible data loss.

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 · SKILL.md (reported line 590)May include surrounding context.

"PORT": "8080" } } response = requests.post(f"{BASE_URL}/stacks", headers=headers, json=stack_data) result = response.json()

text

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 · SKILL.md (reported line 649)May include surrounding context.

"PORT": "8080" } } response = requests.post(f"{BASE_URL}/stacks", headers=headers, json=stack_data) result = response.json()

text

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 · SKILL.md (reported line 595)May include surrounding context.

text

### Using Bash
For simple operations, use curl with error handling:

```bash
#!/bin/bash

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 · SKILL.md (reported line 638)May include surrounding context.

md
{"name": "PORT", "defaultValue": "80"}
    ]
}
template = requests.post(f"{BASE_URL}/templates", headers=headers, json=template_data).json()

# 2. Deploy stack from template
stack_data = {

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 · SKILL.md (reported line 671)May include surrounding context.

"cpuShares": 1024, "memory": 1073741824 # 1GB } requests.post(f"{BASE_URL}/containers/{container_id}/update", headers=headers, json=update_data)

text

### 3. Cleanup and Maintenance

Static analysis

No suspicious patterns detected.