Back to skill

Security audit

Order Tracker

Security checks for vulnerabilities and agentic risk

Overview

This order-tracking skill is mostly coherent, but it reuses another skill's email credentials and can send real customer emails/update records without enough isolation or safeguards.

Review this before installing. Use a dedicated SMTP account or secret source for this skill instead of allowing it to read another skill's .env file, use dry-run when testing, restrict access to the order data and logs, update or verify the mail dependency, and add validation/sanitization before using it with untrusted order records.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (3)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/order-dashboard.js:192
Finding

Terminal Escape-Sequence Injection Through Untrusted Order Fields

Content
View full analysis
1 ? `${order.product_list.length} items` : order.product_list[0]?.sku || 'N/A'; const row = [ order.order_id, order.customer_company?.substring(0, 20) || order.customer_name, productSummary, order.quantity.toString(), formatCurrency(order.total_amount, order.currency), colorizeStatus(order.status), formatDate(order.delivery_date), daysLabel, ]; console.log(row.join(' │ ')); } ``` Other affected output paths similarly interpolate order data directly: ```js console.log(` Name: ${order.customer_name}`); console.log(` Company: ${order.customer_company}`); console.log(` Email: ${order.customer_email}`); console.log(` "${entry.notes}"`); ``` ### Technical Analysis The dashboard reads order records from `data/orders.json` and writes their string fields directly to an ANSI-capable terminal. It does not remove escape sequences, C0/C1 control characters, carriage returns, or other terminal control data. The bundled order file is local, but the project explicitly supports manually maintained order records. Therefore, data copied from an external source or supplied by a less-trusted user can contain sequences su ...[truncated 1487 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/update-order-status.js:154
Finding

Audit-Log Forgery Through Unsanitized Order and Command-Line Values

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
scripts/update-order-status.js:45
Finding

Advertised JSON Schema Validation Is Not Enforced

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
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (34)

Credential Access

High
Category
Privilege Escalation
Confidence
99% confidence
Finding

The README indicates direct access to a .env file containing SMTP credentials, which is a classic credential-access pattern. In the context of an order-tracking skill, accessing another skill's secret file is not justified by minimum-necessary privilege and could enable account compromise, abuse of mail infrastructure, and disclosure of sensitive operational secrets.

Content

Scanner excerpt · README.md (reported line 295)May include surrounding context.

通知脚本复用 imap-smtp-email skill 的 SMTP 配置,无需单独配置:

text
依赖文件:/Users/wilson/.openclaw/workspace/skills/imap-smtp-email/.env

.env 需包含:

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

This mismatch is security-relevant because the skill claims broad order-tracking functionality while apparently depending on external SMTP credentials and sending real emails, a side effect not clearly captured in its declared scope. Users may invoke it expecting local data management but unintentionally trigger outbound communication to customers.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

This mismatch is security-relevant because the skill claims broad order-tracking functionality while apparently depending on external SMTP credentials and sending real emails, a side effect not clearly captured in its declared scope. Users may invoke it expecting local data management but unintentionally trigger outbound communication to customers.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

This mismatch is security-relevant because the skill claims broad order-tracking functionality while apparently depending on external SMTP credentials and sending real emails, a side effect not clearly captured in its declared scope. Users may invoke it expecting local data management but unintentionally trigger outbound communication to customers.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: nodemailer==7.0.13 — 10 advisory(ies): CVE-2026-82661 (Nodemailer: CRLF injection in Nodemailer List-* header comments allows arbitrary); GHSA-2x7j-588g-ccc2 (Nodemailer: Quadratic (O(n²)) time complexity in addressparser allows remote den); GHSA-8m3c-c648-2xjj (Nodemailer: resolveContent() on a MailMessage bypasses disableFileAccess/disable) +7 more

High
Category
Supply Chain
Confidence
98% confidence
Finding

The lockfile pins nodemailer to version 7.0.13, and the supplied advisory set indicates this version is affected by multiple published vulnerabilities, including header injection, denial of service, and security-control bypass issues. In an order-tracking skill that sends customer notifications, email-related vulnerabilities are especially relevant because attacker-controlled order/customer fields may be incorporated into message headers or content processing paths.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: nodemailer==7.0.13 — 10 advisory(ies): CVE-2026-82661 (Nodemailer: CRLF injection in Nodemailer List-* header comments allows arbitrary); GHSA-2x7j-588g-ccc2 (Nodemailer: Quadratic (O(n²)) time complexity in addressparser allows remote den); GHSA-8m3c-c648-2xjj (Nodemailer: resolveContent() on a MailMessage bypasses disableFileAccess/disable) +7 more

High
Category
Supply Chain
Confidence
99% confidence
Finding

The file specifies nodemailer 7.0.13, which is flagged as having multiple known advisories including header injection, denial-of-service, and security control bypass issues. Because this skill sends order notifications, attacker-controlled order/customer data could flow into email fields or content generation paths, making the vulnerable mail library especially relevant and increasing the chance of abuse.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
98% confidence
Finding

Loading ../../imap-smtp-email/.env is a form of credential access across skill boundaries and can expose secrets to code that was not originally entrusted with them. In a multi-skill environment, this is more dangerous because one skill can silently depend on and abuse another skill’s credentials for outbound communication.

Content

Scanner excerpt · scripts/send-order-notification.js (reported line 22)May include surrounding context.

js
const fs = require('fs');
const path = require('path');
const nodemailer = require('nodemailer');
require('dotenv').config({ path: path.resolve(__dirname, '../../imap-smtp-email/.env') });

// Parse command line arguments
function parseArgs(args) {

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The script loads SMTP credentials from another skill’s .env file, creating cross-skill secret coupling and unauthorized credential reuse. This breaks isolation boundaries and can expose or misuse credentials intended for a separate component, especially if this skill can be run independently or modified by a less-trusted author.

Content

No source excerpt is available for this finding.

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/send-order-notification.js (reported line 364)May include surrounding context.

js
};

  if (!config.host || !config.auth.user || !config.auth.pass) {
    throw new Error('Missing SMTP configuration. Please check imap-smtp-email/.env');
  }

  return nodemailer.createTransport(config);

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

L003 describes the skill as a '本地订单跟踪系统' (local order tracking system), which implies local data handling and manual management. However, the same README documents customer email delivery via SMTP and reuse of another skill's .env credentials, which goes beyond a purely local system and introduces external networked behavior.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest says the skill supports status transitions 'pending/confirmed/shipped/delivered', but the README defines a different six-state lifecycle: pending_production, in_production, ready_to_ship, shipped, completed, and cancelled. This is an active intent/documentation divergence because the documented code-facing model does not match the skill's claimed behavior and terminology.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The README explicitly documents reading SMTP credentials from another skill's .env file, which creates unnecessary cross-skill credential access and breaks isolation boundaries. If the order-tracker skill or its scripts are compromised, they gain access to credentials unrelated to their core purpose, enabling credential reuse, unauthorized email sending, or further lateral movement.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

Documenting a fixed absolute path to another skill's credential file normalizes unauthorized secret access and tightly couples this skill to external sensitive material. This increases the chance of accidental secret exposure, privilege creep, and portability failures, and it encourages operators to grant filesystem access broader than needed for simple order tracking.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
87% confidence
Finding

The skill documentation declares operational behaviors that rely on environment-backed SMTP credentials, but it does not declare any explicit tool scope or permission boundaries. This makes external access and secret usage implicit rather than visible to reviewers, increasing the risk of unexpected email sending or credential-dependent behavior being invoked without informed consent.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

Most operational instructions and examples are presented only in Chinese, which effectively forces a specific language for users of the skill. The file does not offer an English alternative, user language selection, or a documented justification for a Chinese-only locale constraint.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documentation shows notification commands as routine operations but does not prominently warn that they may send real customer emails using configured SMTP credentials. In practice, this can cause accidental outbound messages, customer confusion, data leakage in email content, or unintended business communications during testing.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
82% confidence
Finding

The schema title and description are written entirely in Chinese, and the file provides no indication that language selection is optional or that the schema is intentionally limited to a Chinese-only environment. Under the policy, forcing a specific language without user opt-in or documented justification is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The manifest says the skill supports status transitions of pending/confirmed/shipped/delivered, but the schema enforces a different workflow: pending_production/in_production/ready_to_ship/shipped/completed/cancelled. This is a semantic mismatch in the core behavior the skill claims to support, not just an implementation detail, because the allowed state machine determines how orders are tracked and managed.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The top-level comment presents the dashboard as an order status view and gives examples using statuses from the code's internal model, but that model conflicts with the skill's documented purpose in the manifest, which describes a different lifecycle. This creates intent-code divergence because the code documentation reinforces a behavior that contradicts the declared skill intent.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The file documentation says the dashboard filters orders with statuses like "in_production," while the skill manifest claims support for transitions "pending/confirmed/shipped/delivered." In code, the implemented status model is different: it uses pending_production, in_production, ready_to_ship, shipped, completed, and cancelled, so the behavior does not align with the manifest's declared lifecycle.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The order details view prints customer name, company, email, shipping location, tracking number, notes, and status history directly to stdout. In a sales-order skill context, this is sensitive business and personal data; displaying it without masking, minimization, or access gating increases the risk of shoulder-surfing, terminal log leakage, CI/job log exposure, and unauthorized disclosure to any user who can invoke the script.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The file comment frames the script as a notification sender, but after sending it modifies orders.json to mark notification metadata, updates timestamps/metadata, and creates a backup copy. This is more than an omission of detail: the documented intent suggests a send-only utility while the implementation performs persistent order-state changes.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The manifest describes status transitions as pending/confirmed/shipped/delivered, but this script implements notification handling for different statuses including in_production, ready_to_ship, completed, and cancelled. That means the actual order-state model and customer notification behavior diverge from the skill’s stated order lifecycle.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The script determines whether to send English or Chinese email content based on email/company string heuristics, then defaults all other customers to English. This forces a locale choice without asking the user or documenting an opt-in, which matches the language/locale policy violation criteria.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The script sends order details, shipping data, and customer information externally by email without an explicit user-facing warning or confirmation at send time. In a skill context that handles fulfillment data, this increases the chance of accidental disclosure of sensitive business and personal data to unintended recipients or through misuse of the tool.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.