T09 · Insecure Skill Coding Practices
- Location
SKILL.md:52- Finding
Destructive Docker operations can execute without mandatory confirmation
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This Docker skill is mostly aligned with its purpose, but it gives an agent command-execution authority for destructive Docker cleanup and broad container operations without clear confirmation safeguards.
Review before installing. Use it only for explicit Docker tasks, avoid running cleanup or volume-deleting commands unless you have inspected the affected resources and confirmed backups, replace sample passwords and public port bindings, and prefer pinned trusted images for commands the agent will execute.
SKILL.md:52Destructive Docker operations can execute without mandatory confirmation
SKILL.md:143Examples expose database services using a hard-coded weak password
SKILL.md:36Mutable container image tags are downloaded and executed without integrity pinning
Commands like docker image prune -a, docker-compose down -v, and volume cleanup can irreversibly remove images, volumes, and persisted data. Because this skill is designed for automated execution, failing to highlight data-loss risk or require confirmation can directly cause destructive outcomes on the user's system.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
.git .gitignore dist .env *.md
The manifest description uses expansive wording that overlaps with ordinary coding and deployment requests, making accidental invocation likely. In an environment where the skill can execute commands, that broad routing materially increases attack surface and the probability of unnecessary privileged actions.
The description states '支持中文交互', and the document consistently presents the skill as Chinese-only without indicating that users may choose another language. This can be a natural-language policy issue because it implies a fixed language/locale behavior rather than user opt-in or a clearly justified regional limitation.
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.
The skill documents destructive cleanup commands such as docker rm -f and docker container prune without warning that they can irreversibly delete containers and associated state. In an agent-driven exec context, omission of deletion warnings and confirmation requirements makes accidental data loss materially more likely.
Using nginx:latest introduces a mutable supply-chain dependency: the pulled image can change over time, producing non-reproducible behavior and potentially importing newly compromised or incompatible content. In a skill that can drive exec, normalizing latest increases the chance that users run unreviewed images on their hosts.
L248 将“运维部署管理”列为不适用场景,但文档前文大量提供 docker run、端口映射、卷挂载、Compose 启停扩缩容、镜像 push 等典型部署与运行管理操作(如 L37-L54、L95-L109)。这构成了文档内部对技能适用范围的直接矛盾。
The trigger condition is very broad—covering code generation, programming help, debugging, testing, and deployment—so the skill may be invoked for many common developer requests even when Docker execution is unnecessary. Because the skill includes exec, over-selection raises the chance of executing container or system commands in contexts where a safer read-only or non-executing skill should have been used.
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.
Tool defaults are unsafe or overly permissive (e.g. disabled TLS verification, no authentication, world-writable permissions). Unsafe defaults widen the attack surface.
- .:/app
- node_modules:/app/node_modules
environment:
- NODE_ENV=development
services:
database:
The document claims only whitelisted commands are executed, yet it exposes broad exec capability and examples like docker exec ... bash, host diagnostics, and general command execution without specifying enforceable restrictions. This mismatch can mislead users and downstream agents into overtrusting the skill, increasing the risk of arbitrary command execution on the host or inside containers.
No suspicious patterns detected.