Back to skill

Security audit

Lu Auto Deploy

Security checks for vulnerabilities and agentic risk

Overview

This skill is a Docker deployment helper, but its templates expose powerful services and broad host access without enough scoping or safety guidance.

Review before installing. Use this only if you are comfortable editing the generated Docker commands: pin image versions or digests, bind sensitive services to localhost or a private admin network, avoid exposing Portainer directly, avoid raw Docker socket access where possible, narrow File Browser mounts to a dedicated directory, and require an explicit dry run before any deployment is executed.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
Findings (4)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
SKILL.md:133
Finding
Unrestricted Docker Socket Exposure Grants Effective Host Control## Vulnerability Details **File Location**: `SKILL.md:133` **Vulnerability Type**: Docker daemon socket exposed to a container **Risk Level**: Critical **Vulnerable Code**: ```bash docker run -d --name portainer -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer-data:/data --restart unless-stopped portainer/portainer-ce:latest ``` ### Technical Analysis The deployment command mounts the host Docker daemon socket directly into the Portainer container. Access to `/var/run/docker.sock` generally provides control over the Docker daemon and is functionally equivalent to root-level host access. A process controlling the socket can create privileged containers, mount arbitrary host directories, access secrets stored in other containers, alter running workloads, and modify host files through bind mounts. The risk is compounded because Portainer is published on all host interfaces and uses a mutable `latest` image tag. ### Attack Path 1. An attacker reaches the Portainer service through TCP port `9000`. 2. The attacker exploits a Portainer vulnerability, compromises an administrator account, or abuses an insecure initial configuration. 3. The compromised service communicates with the mounted Docker socket. 4. The attacker creates a privileged container or one that bind-mounts the host root filesystem. 5. The attacker reads or modifies host files, extracts credentials, accesses other containers, or establishes host-level control. ### Impact Assessment Successful exploitation can provide effective root-level control of the Docker host. The affected scope includes host files, Docker-managed secrets and volumes, all containers controlled by the daemon, attached networks, and data reachable from the host.
Remediation
## Remediation Suggestions - Do not mount the raw Docker socket unless it is strictly necessary. - Prefer a restricted Docker socket proxy that exposes only the minimum API operations required by Portainer. - Run management interfaces on a dedicated administrative network and bind them to a trusted address rather than all interfaces. - Require strong authentication, protect initial setup, and place the interface behind TLS and network allowlisting. - Pin the Portainer image to a reviewed version and immutable digest. - Apply defense-in-depth controls such as a read-only root filesystem, dropped Linux capabilities, `no-new-privileges`, and host firewall rules. - Monitor Docker daemon API activity for unexpected privileged-container creation and host bind mounts.

T05 · Unauthorized Access and Privilege Escalation

Error
Location
SKILL.md:136
Finding
File Browser Receives Excessive Read-Write Access to the NAS Volume## Vulnerability Details **File Location**: `SKILL.md:136` **Vulnerability Type**: Overly broad host filesystem mount **Risk Level**: High **Vulnerable Code**: ```bash docker run -d --name file-browser -p 8080:80 -v /vol1/1000:/srv --restart unless-stopped filebrowser/filebrowser:latest ``` ### Technical Analysis The command bind-mounts the entire `/vol1/1000` host directory into the File Browser container as `/srv`. Because the mount is not marked read-only, the service can read, create, modify, and delete all files accessible through that host path. This violates least privilege because a file-management service should receive access only to explicitly selected directories. Any authentication failure, compromised account, application vulnerability, or malicious upstream image could turn the broad mount into access to unrelated user data. ### Attack Path 1. An attacker reaches File Browser through published TCP port `8080`. 2. The attacker obtains valid credentials, abuses weak or default setup, or exploits a vulnerability in the service. 3. The attacker browses the mounted `/srv` directory. 4. Because `/srv` maps to `/vol1/1000`, the attacker reads or downloads unrelated files stored throughout that volume. 5. With write access, the attacker can alter, encrypt, replace, or delete those files. ### Impact Assessment Successful exploitation can compromise the confidentiality, integrity, and availability of all data under `/vol1/1000` that the Docker daemon can expose. Potential consequences include bulk data disclosure, destructive deletion, ransomware-style encryption, and modification of files consumed by other applications.
Remediation
## Remediation Suggestions - Replace the broad mount with a dedicated, narrowly scoped directory, such as `/vol1/1000/shared-files:/srv`. - Add `:ro` when users do not require write access. - Run the container under a non-root UID and GID with limited host filesystem permissions. - Separate sensitive data into directories that are never mounted into the service. - Bind the web interface to localhost or a trusted management interface and protect it with TLS, strong authentication, and network access controls. - Pin the image to a reviewed version and immutable digest. - Maintain tested backups that the container cannot modify or delete.

T08 · Insecure Dependencies

Error
Location
SKILL.md:73
Finding
Mutable Latest Image Tags Permit Unreviewed Dependency Changes## Vulnerability Details **File Locations**: `SKILL.md:73`, `SKILL.md:83`, `SKILL.md:114`, `SKILL.md:133`, `SKILL.md:136`, and `SKILL.md:139` **Vulnerability Type**: Unpinned container dependencies **Risk Level**: High **Vulnerable Code**: ```yaml image: jellyfin/jellyfin:latest ``` ```yaml image: deluan/navidrome:latest ``` ```yaml image: grafana/grafana:latest ``` ```bash docker run -d --name portainer -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer-data:/data --restart unless-stopped portainer/portainer-ce:latest ``` ```bash docker run -d --name file-browser -p 8080:80 -v /vol1/1000:/srv --restart unless-stopped filebrowser/filebrowser:latest ``` ```bash docker run -d --name vaultwarden -p 8000:80 -v vaultwarden-data:/data --restart unless-stopped vaultwarden/server:latest ``` ### Technical Analysis The `latest` tag is mutable and does not identify a fixed, reviewed artifact. Repeating the same deployment command at different times can therefore execute different image contents without a corresponding change to the Skill. If an upstream repository is compromised, publishes a defective release, or reassigns the tag, a subsequent pull can introduce unreviewed code. The consequences are especially severe for Portainer because it receives the Docker socket and for File Browser because it receives a broad host filesystem mount. ### Attack Path 1. An upstream image account, registry, build pipeline, or mutable tag is compromised or changed. 2. An administrator deploys the template on a new host or pulls an updated `latest` image. 3. Docker downloads and executes the changed artifact without verifying a project-approved digest. 4. Malicious or vulnerable image code accesses its assigned ports, volumes, or Docker socket. 5. The code steals data, alters workloads, or uses exposed privileges to compromise the host. ### Impact Assessment The affected scope depends on e ...[truncated 241 chars]
Remediation
## Remediation Suggestions - Replace every `latest` reference with an explicitly reviewed version. - For reproducible deployments, pin each image by immutable digest, for example `image: repository/name@sha256:...`. - Use automated vulnerability and provenance scanning before approving image updates. - Verify signatures or attestations where supported and restrict deployments to trusted registries. - Introduce updates through a controlled review and staging process rather than automatically following mutable tags. - Record approved versions and digests in the deployment templates and maintain a documented rollback procedure.

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:75
Finding
Administrative and Data Services Are Published on All Host Interfaces## Vulnerability Details **File Locations**: `SKILL.md:75-77`, `SKILL.md:85-87`, `SKILL.md:107-109`, `SKILL.md:116-118`, `SKILL.md:130`, `SKILL.md:133`, `SKILL.md:136`, and `SKILL.md:139` **Vulnerability Type**: Insecure network exposure **Risk Level**: High **Vulnerable Code**: ```yaml ports: - "8096:8096" ``` ```yaml ports: - "4533:4533" ``` ```yaml ports: - "3001:3001" ``` ```yaml ports: - "3000:3000" ``` ```bash docker run -d --name uptime-kuma -p 3001:3001 -v uptime-kuma-data:/app/data --restart unless-stopped louislam/uptime-kuma:1 ``` ```bash docker run -d --name portainer -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer-data:/data --restart unless-stopped portainer/portainer-ce:latest ``` ```bash docker run -d --name file-browser -p 8080:80 -v /vol1/1000:/srv --restart unless-stopped filebrowser/filebrowser:latest ``` ```bash docker run -d --name vaultwarden -p 8000:80 -v vaultwarden-data:/data --restart unless-stopped vaultwarden/server:latest ``` ### Technical Analysis Docker port mappings without an explicit host address normally bind to all host interfaces. The templates consequently expose monitoring, media, file-management, container-administration, and password-management services beyond the local host. The Skill does not include corresponding firewall restrictions, TLS termination, reverse-proxy controls, or interface allowlisting. Exposure is particularly dangerous for Portainer, which controls the Docker daemon, File Browser, which can access a broad NAS path, and Vaultwarden, which handles sensitive credentials. ### Attack Path 1. A remote party identifies a reachable host interface and scans the published ports. 2. The party connects directly to a service login, setup page, or application endpoint. 3. The party exploits weak credentials, an incomplete initial setup, a service vulnerability, or insecure plaintext transport. ...[truncated 585 chars]
Remediation
## Remediation Suggestions - Bind services to localhost by default, such as `127.0.0.1:9000:9000`, unless remote exposure is explicitly required. - Place remotely accessed services behind a hardened reverse proxy with TLS, authentication, request limits, and security headers. - Restrict management services to a dedicated VLAN, VPN, or allowlisted administrative subnet. - Configure host and upstream firewalls to deny untrusted access to published ports. - Do not expose Portainer directly to the Internet. - Protect initial-setup endpoints and require strong, unique credentials with multifactor authentication where available. - Document the network exposure created by each template and require explicit user confirmation before publishing externally reachable ports.
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (12)

Docker Socket Access

High
Category
Privilege Escalation
Content
docker run -d --name uptime-kuma -p 3001:3001 -v uptime-kuma-data:/app/data --restart unless-stopped louislam/uptime-kuma:1

# Portainer
docker run -d --name portainer -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer-data:/data --restart unless-stopped portainer/portainer-ce:latest

# File Browser
docker run -d --name file-browser -p 8080:80 -v /vol1/1000:/srv --restart unless-stopped filebrowser/filebrowser:latest
Confidence
99% confidence
Finding
Mounting `/var/run/docker.sock` into a container gives that container effective control over the host Docker daemon, which is commonly equivalent to root-level control of the host. In this skill, the command is presented as a quick deployment recipe without any warning about the privilege implications, making dangerous host compromise pathways easy to introduce.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
# lu-auto-deploy

Docker 自动化部署技能 - 帮助你快速部署常见的 Docker 服务。
Confidence
85% confidence
Finding
The skill is explicitly framed as `auto-deploy` and is designed to help users rapidly deploy services, which encourages autonomous operational decision-making in a high-impact domain. In the surrounding context, broad triggers and lack of confirmation amplify the risk that deployment actions are suggested or performed without sufficient user intent validation.

Vague Triggers

Medium
Confidence
95% confidence
Finding
The trigger keyword `部署` is extremely broad and can match ordinary conversation about deployment, increasing the chance that the skill activates unexpectedly. Because the skill's purpose is to generate and run file-writing and container-launching commands, accidental activation can lead to unintended system changes.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
Advertising batch deployment without warning about cumulative resource use, network exposure, and multiple simultaneously started services increases the risk of disruptive changes. A user may trigger several containers at once without understanding port conflicts, storage consumption, or the security posture of the stack.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The skill provides commands that create directories, write `docker-compose.yml`, and start containers, but it does not clearly warn that these actions modify the local filesystem and launch services. In practice, users may treat the skill as informational while it is actually prescribing operationally impactful actions.

Rp1

Medium
Category
MCP Rug Pull
Confidence
75% confidence
Finding
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.

Rp1

Medium
Category
MCP Rug Pull
Confidence
75% confidence
Finding
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.

Rp1

Medium
Category
MCP Rug Pull
Confidence
75% confidence
Finding
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.

Rp1

Medium
Category
MCP Rug Pull
Confidence
75% confidence
Finding
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
{
  "name": "lu-auto-deploy",
  "version": "1.0.0",
  "description": "Docker 自动化部署技能",
  "author": "jesson1222-ship-it",
Confidence
85% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The manifest sets the skill language to "zh-CN", which can force a specific language/locale behavior without any indication that users can choose another language. Under the policy, locale constraints should either be optional or clearly justified as region-specific.

Natural-Language Policy Violations

Low
Confidence
82% confidence
Finding
All user-facing instructions, examples, and trigger phrases are presented only in Chinese, which implies a fixed language behavior. There is no opt-in, alternative language option, or statement that the skill is intentionally limited to a Chinese-speaking environment.

Static analysis

No suspicious patterns detected.