Back to skill

Security audit

CPA Update - Secure CLI Proxy API Maintenance

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent CPA maintenance guide, but it needs review because it deploys a mutable Docker image with live configuration and authentication data mounted into containers.

Install only if you are comfortable with a skill guiding production Docker changes. Before using it, replace latest with a reviewed version and immutable digest, verify image provenance where possible, test with non-production copies of config/auth data, and confirm every stop/remove/recreate step before execution.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:99
Finding

Mutable and Unverified Container Image Used for Production Deployment

Content
View full analysis
/etc/timezone RUN mkdir -p /root/.cli-proxy-api && chmod 755 /root/.cli-proxy-api WORKDIR /CLIProxyAPI EXPOSE 8317 CMD ["./CLIProxyAPI"] ``` Finally, the mutable tag is used directly for production: ```bash docker run -d \ --name \ -p 8317:8317 \ -v /opt/cliproxyapi/config.yaml:/CLIProxyAPI/config.yaml \ -v /opt/cliproxyapi/auth:/root/.cli-proxy-api \ --restart unless-stopped \ eceasy/cli-proxy-api:latest ``` ### Technical Analysis The `latest` tag is mutable and does not uniquely identify the artifact that was reviewed or tested. The workflow does not pin an immutable image digest, verify an image signature or provenance attestation, or explicitly ensure that the production deployment uses the exact digest exercised during testing. A mutable tag can resolve to different image content after a publisher update, registry-side tag change, or compromise of the publisher or registry account. Thus, an operator may execute an image different from the intended release without any change to the documented command. The container receives writab ...[truncated 2198 chars]
Remediation
View remediation
' docker pull "$IMAGE" ``` 2. **Use the same immutable digest for testing and production** Resolve and record the digest once, test that exact artifact, and deploy the identical reference: ```bash IMAGE='eceasy/cli-proxy-api:2.2.1@sha256:' docker run -d --name cliproxyapi-test \ -p 127.0.0.1:8318:8317 \ -v /opt/cliproxyapi/config.yaml:/CLIProxyAPI/config.yaml \ -v /opt/cliproxyapi/auth:/root/.cli-proxy-api \ "$IMAGE" docker run -d \ --name \ -p 8317:8317 \ -v /opt/cliproxyapi/config.yaml:/CLIProxyAPI/config.yaml \ -v /opt/cliproxyapi/auth:/root/.cli-proxy-api \ --restart unless-stopped \ "$IMAGE" ``` 3. **Verify image authenticity and provenance** Where supported by the publisher, verify a cryptographic signature and build provenance before execution. Establish a policy that rejects unsigned images, unexpected identities, and unapproved digests. 4. **Record the deployed digest** Add the tested and deployed digest to the baseline record: ```bash docker image inspect "$IMAGE" \ --format '{{json .RepoDigests}}' ``` Compare the production digest with the tested digest before replacing the existing container. 5. **Pin custom-image base images** Change the custom Dockerfile to use an immutable base: ```dockerfile FROM eceasy/cli-proxy-api:2.2.1@sha256: ``` 6. **Reduce compromise impact** Run the container as a non-root user where compatible, drop unnecessary Linux capabilities, enable `no-new-privileges`, use a read-only root filesystem, limit outbound network access, and mount only the files required by the service. If configuration does not need runtime modification, mo ...[truncated 178 chars]
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (9)

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The manifest description forces a specific language/locale experience by presenting the skill activation context only in Chinese. The policy for natural-language violations applies to all file types, and there is no indication that users may choose another language or that the locale restriction is explicitly justified as region-specific.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

Across the operational instructions, warnings, and procedures, the skill consistently assumes Chinese as the required language. Because no language-selection mechanism or documented regional justification is provided, this creates a language/locale policy issue under the natural-language policy rules.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding

The skill instructs users to pull and use the mutable tag eceasy/cli-proxy-api:latest, which is not pinned to an immutable version or digest. This makes the deployment non-reproducible and exposes users to supply-chain risk if the upstream image changes unexpectedly or is compromised, especially dangerous here because the skill is specifically for production updates and container replacement.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding

This command again directs operators to pull latest, inheriting the same mutable-tag supply-chain risk. In the context of a maintenance skill that claims safe updates and rollback, relying on latest undermines rollback predictability and can silently deploy unreviewed code into production.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding

The production upgrade section again pulls the upstream image by latest, creating a direct path for unintended or malicious upstream changes to enter the environment. Because this step precedes launching a test and then production container, compromise at the image source would affect the full deployment workflow.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

The flagged docker run -d line is not itself the core issue, but the surrounding test-container command runs an image referenced later as eceasy/cli-proxy-api:latest, so the effective deployment still uses a mutable image. In this context, even the test path is security-relevant because it mounts real configuration and auth data into the container, increasing blast radius if the image is malicious.

Content

No source excerpt is available for this finding.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
80% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

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

md
FROM eceasy/cli-proxy-api:latest
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN mkdir -p /root/.cli-proxy-api && chmod 755 /root/.cli-proxy-api
WORKDIR /CLIProxyAPI
EXPOSE 8317
CMD ["./CLIProxyAPI"]

Rp1

Medium
Category
MCP Rug Pull
Confidence
93% confidence
Finding

The production docker run -d step launches a container that, per the command block, uses the mutable eceasy/cli-proxy-api:latest image and mounts live config and authentication material. If the upstream image is altered, this could lead to credential exposure or execution of untrusted code in the production environment.

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.

Static analysis

No suspicious patterns detected.