Back to skill

Security audit

Gprinter

Security checks for vulnerabilities and agentic risk

Overview

This skill is a purpose-aligned GP-C200V printer helper that sends user-chosen print data to a configured printer or local bridge, with no hidden persistence or credential handling found.

Install this only if you intend Codex to generate and send print jobs to your GP-C200V or compatible ESC/POS printer. Review the configured printer or bridge host before use, and avoid passing untrusted host, port, file path, or print payload values from another service without validation.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (7)

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The text says to "Always use GBK encoding for Chinese text," which imposes a specific language/locale handling rule in absolute terms. The file does not indicate any user opt-in, alternative encoding choice, or that this constraint is a documented regional compliance requirement.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The rule '中文必须用 GBK 编码' is a natural-language requirement that forces a specific language/locale behavior. The file does not indicate that users may choose another language or that this restriction is an optional, region-specific mode.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The header comment describes the library as sending ESC/POS commands to the printer via the Node.js TCP bridge (server.js), implying bridge-mediated transmission. However, the implementation includes connect() and sendRaw() methods that open a direct TCP socket to the printer and explicitly note this bypasses the HTTP bridge, which contradicts the documented behavior.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This code posts command data to an HTTP endpoint, transmitting the print message over the network. While the file comments describe the bridge technically, there is no user-facing warning, confirmation, or logging around this transmission, which fits the missing-disclosure criterion for network operations in code files.

Content

No source excerpt is available for this finding.

Dynamic Request Target

Medium
Category
Server-Side Request Forgery
Confidence
91% confidence
Finding

The request target is built dynamically from serverHost and serverPort and then fetched without any allowlist, scheme restriction beyond hardcoded HTTP, or host validation. If an attacker can influence these options, they can cause the process to send requests to arbitrary internal or local network services, enabling SSRF-style network reachability and possible interaction with unintended endpoints.

Content

Scanner excerpt · print-helper.js (reported line 93)May include surrounding context.

js
// ====== HTTP Bridge send ======

  async sendViaBridge(cmdArray) {
    const resp = await fetch(`http://${this.serverHost}:${this.serverPort}/send`, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ message: cmdArray }),

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The text says "ALWAYS use GBK encoding," which is a hard requirement tied to Chinese text handling and effectively forces a specific locale/encoding choice. The document does not offer user opt-in or explain a broader region-specific constraint beyond this printer reference, so it fits the language/locale policy concern.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
93% confidence
Finding

The dependency uses a caret range (^0.7.2), which allows automatic installation of future patch/minor releases within the 0.x range rather than a fully fixed version. This increases supply-chain risk because builds are not fully reproducible and a compromised or breaking upstream release of iconv-lite could be pulled in without an explicit review. In this skill, the package is small and the dependency is common, so the issue is real but lower risk than in a package with many network-facing or privileged dependencies.

Content

Scanner excerpt · package.json (reported line 20)May include surrounding context.

json
"author": "",
  "license": "ISC",
  "dependencies": {
    "iconv-lite": "^0.7.2"
  }
}

Static analysis

No suspicious patterns detected.