Back to skill

Security audit

Convert Document To Markdown

Security checks for vulnerabilities and agentic risk

Overview

This skill appears to be a legitimate document converter, but it runs a mutable third-party Docker image and can expose local configuration secrets to that container.

Install only if you are comfortable running a third-party Docker image from the configured registry. Keep unrelated secrets out of the skill's .env file, prefer short-lived VL credentials, review or pin the exact container digest before use, and avoid IMAGE_NAME or registry overrides unless you fully trust the image.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T03 · Remote Payload Retrieval and Execution

Error
Location
scripts/run_docker_cli.sh:24
Finding

Automatic Retrieval and Execution of a Mutable Remote Container Image

Content
View full analysis
&2 exit 1 ;; esac if [ -z "${IMAGE_NAME:-}" ] && [ -n "${IMAGE_REGISTRY}" ]; then IMAGE_NAME="${IMAGE_REGISTRY}/${IMAGE_BASENAME}:${IMAGE_VERSION}" elif [ -z "${IMAGE_NAME:-}" ]; then IMAGE_NAME="${IMAGE_BASENAME}:${IMAGE_VERSION}" fi if [ -f "${ENV_FILE}" ]; then DOCKER_ARGS+=(--env-file "${ENV_FILE}") fi for env_name in VL_BASE_URL VL_API_KEY VL_MODEL VL_API_TIMEOUT VL_PAGE_TARGET_WIDTH VL_PAGE_MIN_ZOOM VL_PAGE_MAX_ZOOM; do if [ -n "${!env_name:-}" ]; then DOCKER_ARGS+=(-e "${env_name}=${!env_name}") fi done if ! docker image inspect "${IMAGE_NAME}" >/dev/null 2>&1; then docker pull "${IMAGE_NAME}" >/dev/null fi shift input_path="$1" input_dir="$(cd "$(dirname "${input_path}")" && pwd -P)" input_name="$(basename "${input_path}")" input_path="${input_dir}/${input_name}" input_dir="$(dirname "${input_path}")" shift exec docker "${DOCKER_ARGS[@]}" \ -v "${input_dir}:/input:ro" \ "${IMAGE_NAME}" \ file "/input/${input_name}" "$@" ``` ### Technical Analysis The wrapper obtains a prebuilt container image from a personal third-party Aliyun registry and immediately executes it. The image is identified by the mutable tag `0.0.1`, rather than an immutable content digest such as `sha256:...`. No signature, digest, provenance, or expected image identity is verified before execution. A registry administrator, c ...[truncated 2311 chars]
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Error
Location
scripts/run_docker_cli.sh:28
Finding

Overbroad Disclosure of Repository Environment Variables to an External Container

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (10)

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

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

Content

Scanner excerpt · scripts/run_docker_cli.sh (reported line 29)May include surrounding context.

sh
IMAGE_VERSION="${IMAGE_VERSION:-0.0.1}"
IMAGE_REGISTRY="${IMAGE_REGISTRY:-crpi-4auaoyyj6r36p6lb.cn-hangzhou.personal.cr.aliyuncs.com/huozige_lab}"
IMAGE_BASENAME="convert-document-to-markdown-${IMAGE_ARCH}"
ENV_FILE="${ROOT_DIR}/.env"
DOCKER_ARGS=(run --rm)

case "${IMAGE_ARCH}" in

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The script forwards VL_API_KEY and related endpoint/model settings into the container even though the skill is described as file-only conversion. If the container is malicious, compromised, or simply over-privileged, it can read and exfiltrate these secrets, turning a local conversion step into credential exposure.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill explicitly states that VL_* credentials from OpenClaw config or a repository .env file are forwarded into the Docker container, but it does not warn that secrets are being exposed to container runtime processes and any code executed inside the image. This matters because the image is pulled from an external registry and users may not realize their API key is being transmitted into a less-trusted execution boundary.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 52)May include surrounding context.

md
"enabled": true,
        "apiKey": "sk-xxx",
        "env": {
          "VL_BASE_URL": "https://api.openai.com/v1",
          "VL_MODEL": "gpt-4.1-mini"
        }
      }

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill description promises a fixed-version prebuilt Aliyun CR image, but the script allows IMAGE_VERSION and IMAGE_REGISTRY to be overridden from the environment, and IMAGE_NAME can fully replace the intended image. That lets an attacker or compromised caller environment execute an arbitrary container while the skill appears to be a constrained local file converter.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

Sensitive environment variables are passed into the container without explicit disclosure, so users may unknowingly expose credentials and service configuration to third-party code. This is especially risky here because the skill claims a file-only purpose that does not justify secret propagation.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The script may pull a container image from a remote registry at runtime, introducing network activity and supply-chain trust that exceed the stated local file conversion purpose. Combined with the image override behavior, this increases the chance of running unreviewed code fetched at execution time.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The script can pull and run a container without clear user-facing disclosure, which weakens informed consent and makes unexpected network and code-execution behavior harder to detect. In a skill advertised as file-only conversion, this mismatch increases risk because users may not realize remote code is being fetched and executed locally.

Content

No source excerpt is available for this finding.

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.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The skill documents --output and --log-file options that write to host-mounted paths, but it does not clearly warn that these operations can modify or overwrite local files if unsafe paths are chosen. Because file paths are user-controlled and the skill is designed to operate on local files via Docker mounts, accidental data loss or clobbering of existing files is a realistic risk.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.