Back to skill

Security audit

智睦云打印

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent WebPrinter cloud-printing skill, but users should understand that printing actions send documents or document URLs to an external cloud service and may create real print jobs.

Install only if you trust WebPrinter with the documents you print and the bearer token you provide. Confirm the exact file or URL, destination printer or roaming queue, and print settings before using it, and avoid confidential or regulated documents unless your organization approves this cloud printing flow.

Vulnerability Patterns
  • 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
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (2)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/mcp_client.py:101
Finding

Fail-Open URL Validation Permits DNS Rebinding and Server-Side Request Forgery

Content
View full analysis
Optional[str]: """Allow only HTTPS document URLs and reject local/private targets.""" parsed = urlparse(url) if parsed.scheme.lower() != "https": return "Only HTTPS document URLs are allowed." if not parsed.netloc: return "Document URL must include a hostname." hostname = parsed.hostname if not hostname: return "Document URL must include a valid hostname." normalized = hostname.lower() if normalized == "localhost" or normalized.endswith(".local"): return "Local hostnames are not allowed." try: ip = ipaddress.ip_address(hostname) except ValueError: resolved_ips = resolve_hostname_ips(hostname) if not resolved_ips: return None if any(is_disallowed_ip(candidate) for candidate in resolved_ips): return "Hostnames that resolve to private or local network IPs are not allowed." return None if is_disallowed_ip(ip): return "Private or local network URLs are not allowed." return None ``` The accepted URL is subsequently sent to the WebPrinter service: ```python def create_roaming_task(self, file_name: str, url: str, media_format: str) -> Dict[str, Any]: error = validate_https_url(url) if error: return {"error": error} data = {"fileName": file_name, "url": url, "mediaFormat": media_format} return self._send_request("POST", "/openapi/task/createRoamingTask", data, raw_response=True) ``` ```python def direct_print_document( self, file_name: str, url: str, media_format: str, device_name: str, control_sn: str, ) -> ...[truncated 2773 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Note
Location
requirements.txt:1
Finding

Open-Ended Dependency Constraint Produces Non-Reproducible Installations

Content
View full analysis
=2.31.0 ``` ### Technical Analysis The requirement specifies only a minimum version and allows any future release of `requests` that satisfies the constraint. It also does not pin or hash transitive dependencies. Consequently, installations performed at different times may receive different and unaudited dependency versions. A future compromised, vulnerable, or incompatible release could be selected automatically without any change to this project. The absence of integrity hashes also prevents the installer from verifying that downloaded artifacts exactly match reviewed artifacts. No evidence was found that the current `requests` package is malicious. This finding concerns the project’s dependency-management policy and the resulting prospective supply-chain risk. ### Attack Path 1. A future compromised or vulnerable version satisfying `requests>=2.31.0`, or one of its transitive dependencies, becomes available through the configured package index. 2. A user follows the documented installation command: `pip install -r requirements.txt`. 3. The package resolver selects the newer matching release because no exact reviewed version is required. 4. The unreviewed package code is installed into the Skill’s execution environment. 5. That code executes when imported or used by `scripts/mcp_client.py`, with the privileges of the user running the Skill. This path is conditional on a compromised or unsafe matching package release or package-index compromise; the audit found no active dependency substitution in the repository. ### Impact Assessment A compromised dependency would execute with the same operating-system privileges as the Skill process. It could potentially access environment variables, including `WEBPRINTER_ACCESS_TOKEN`, read files accessi ...[truncated 312 chars]
Remediation
View remediation
\ --hash=sha256: ``` All transitive packages must also be included with exact versions and reviewed hashes. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (14)

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 · scripts/mcp_client.py (reported line 186)May include surrounding context.

python
if self.access_token:
            return None
        return {
            "error": f"Missing access token. Set the {TOKEN_ENV_VAR} environment variable before calling the API."
        }

    def _parse_response(self, response: requests.Response, raw_response: bool) -> Dict[str, Any]:

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The README instructs users to upload local files and submit remote document URLs to a third-party cloud printing service, but it does not clearly warn that document contents, metadata, and potentially sensitive business information will be transmitted to an external service. In an enterprise printing context, users may reasonably send confidential HR, finance, legal, or customer documents, so omission of a privacy/data-handling warning increases the risk of inadvertent data disclosure.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill defines task creation and direct printing as standard actions, including a default path that creates roaming print jobs, but it does not clearly warn that these actions can trigger real-world printing with paper, toner, and possible exposure of sensitive material at the printer. Because print submission may be difficult to cancel once sent, unclear confirmation and warning behavior can lead to accidental resource consumption or unintended disclosure of printed documents.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill declares access to a bearer token in environment variables and instructs use of local scripts that perform networked and MCP-mediated actions, but it does not declare any explicit tool scope such as allowed tools or permissions. This weakens sandboxing and reviewability because an agent may invoke broader capabilities than a user or platform reviewer expects, increasing the chance of unintended network access, token use, or local file handling.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill enables creation of roaming print jobs and direct printing to enterprise devices, which can cause immediate real-world side effects such as paper/ink consumption, printing of sensitive documents, and disruption or misuse of shared printers. Although the workflow distinguishes roaming versus direct printing, it does not require a prominent user-facing confirmation or warning before irreversible print actions.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill enables implicit invocation without any visible trigger constraints, which can cause the agent to call printing-related actions in response to loosely related user requests. In this context, the skill can upload local files and submit print jobs, so over-broad activation increases the risk of unintended file handling, accidental data disclosure, or unauthorized print task creation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The upload_file function reads an arbitrary local file and transmits its contents to https://any.webprinter.cn/openapi/mcpClient/uploadFileMCP. In an agent-skill context, this creates a real exfiltration risk because local files may contain sensitive data and the code provides no consent prompt, path restrictions, or disclosure at the point of transfer.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
83% confidence
Finding

Both roaming-task creation and direct print workflows send user-supplied document URLs and metadata to remote API endpoints, but the code provides no user-facing notice beyond argument names. Because these operations transmit user data to an external service, a visible warning or documented disclosure is expected for code files.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest describes WebPrinter capabilities around querying printers, uploading files, creating print tasks, direct printing, and updating print parameters. Allowing device_type values of scanner and camera extends the skill into non-printing hardware discovery, which is not described as part of the skill’s purpose.

Content

No source excerpt is available for this finding.

Cloud Storage Exfiltration

Medium
Category
Data Exfiltration
Confidence
94% confidence
Finding

The CLI exposes a direct path for sending local file contents to a remote cloud endpoint via upload_file, which is a classic exfiltration channel if invoked on sensitive paths. In this skill context, that risk is heightened because an agent may be asked to print local documents and could transmit confidential material off-host without sufficient guardrails.

Content

Scanner excerpt · scripts/mcp_client.py (reported line 422)May include surrounding context.

python
elif args.command == "query-printers":
        result = client.query_printers()
    elif args.command == "upload-file":
        result = client.upload_file(args.file_path)
    elif args.command == "query-printer-detail":
        result = client.query_printer_detail(
            printer_name=args.printer_name,

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

The natural-language instructions, triggers, and operational guidance are all presented in Chinese, which can amount to forcing a specific language without user opt-in. The file does not state that the skill is region-specific or provide a user choice of language.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
96% confidence
Finding

The dependency specification uses a lower bound only (requests>=2.31.0), which allows installation of any future major or minor release without review and makes builds non-reproducible. In a skill that performs networked printing and likely handles file uploads and remote service communication, unexpected dependency changes can introduce regressions or security exposure through the HTTP client stack.

Content

Scanner excerpt · requirements.txt (reported line 1)May include surrounding context.

text
requests>=2.31.0

Unverifiable Dependency: requests has 16 known advisory(ies) (CVE-2014-1830 (Exposure of Sensitive Information to an Unauthorized Actor in Requests); CVE-2024-47081 (Requests vulnerable to .netrc credentials leak via malicious URLs); CVE-2024-35195 (Requests `Session` object does not verify requests after making first request wi) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
89% confidence
Finding

Because the manifest does not pin requests, it is impossible to verify whether deployments will resolve to a version affected by known advisories, including issues involving credential leakage and TLS/request verification behavior. This matters more in this skill's context because it interfaces with a cloud printing service and may transmit authentication tokens, printer metadata, and uploaded documents over HTTP(S).

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
76% confidence
Finding

The client automatically loads WEBPRINTER_ACCESS_TOKEN from the environment and uses it in Authorization headers for network requests. Although the token name appears in help text and error handling, there is no explicit disclosure in code comments, docstrings, or user-facing messaging about handling a sensitive credential.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.