Back to skill

Security audit

Cst Time

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly a normal China Standard Time helper, but it includes copy-pasteable HTTP API examples that can expose an API key.

Review before installing. The skill does not show persistence or malicious execution, but users should avoid the documented HTTP API examples, should not place real API keys in URLs, and should prefer local timezone libraries or HTTPS-only APIs with protected credentials.

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 (1)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:245
Finding

API Credential Exposure Through Plaintext HTTP

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 245–251
Vulnerability Type: Plaintext transmission of sensitive credentials and data
Risk Level: Medium

Vulnerable Code

bash
curl "http://worldtimeapi.org/api/timezone/Asia/Shanghai"
bash
curl "http://api.timezonedb.com/v1/get-time-zone?key=YOUR_API_KEY&by=zone&zone=Asia/Shanghai"

Technical Analysis

The documented TimezoneDB command instructs users to place an API key in the query string of a request sent over unencrypted HTTP. Because HTTP provides neither transport confidentiality nor server authenticity, an attacker able to observe or modify network traffic can capture the API key, inspect the request, or tamper with the returned time information.

Embedding the credential in the URL creates additional exposure risks because complete URLs may be retained in shell history, diagnostic output, HTTP proxy logs, and server access logs. The World Time API command is also sent over HTTP, allowing an on-path attacker to alter its response even though that particular request contains no credential.

Attack Path

  1. A user replaces YOUR_API_KEY with a valid TimezoneDB credential.
  2. The user executes the documented curl command.
  3. The request and API key travel over plaintext HTTP.
  4. An attacker controlling or monitoring a network intermediary captures the request.
  5. The attacker extracts and reuses the API key for unauthorized API requests.
  6. Alternatively, the attacker modifies an HTTP response to provide false time data to a consuming script or application.

Impact Assessment

Successful exploitation does not directly grant local host privileges. It can expose the TimezoneDB account credential to unauthorized parties, permitting API use within the key's assigned quota and permissions. It may lead to quota exhaustion, service charges where applicable, service disruption, or inaccurate time-dependent application behavior.

The scope is limited to users who ...[truncated 152 chars]

Remediation
View remediation

Remediation Suggestions

  • Replace all plaintext HTTP API endpoints with supported HTTPS endpoints.
  • Avoid placing API credentials directly in command text or documentation examples.
  • Read credentials from a protected environment variable or secret manager.
  • Prefer an authorization header instead of a query parameter when the service supports it.
  • Ensure scripts do not enable shell tracing when handling credentials.
  • Warn users that URL query parameters may be recorded in shell history, proxy logs, and server logs.
  • Validate HTTPS certificates normally and do not recommend options such as curl --insecure.

A safer pattern, subject to the provider's supported HTTPS interface, is:

bash
read -r -s TIMEZONEDB_API_KEY
export TIMEZONEDB_API_KEY
curl --fail --show-error --silent \
  --get "https://api.timezonedb.com/v1/get-time-zone" \
  --data-urlencode "key=${TIMEZONEDB_API_KEY}" \
  --data-urlencode "by=zone" \
  --data-urlencode "zone=Asia/Shanghai"
unset TIMEZONEDB_API_KEY

If the provider supports header-based authentication, use that mechanism instead so the credential is not included in the URL.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • 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 (9)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The description says to invoke the skill when the user needs to "convert time zones" or "work with China Standard Time," but "convert time zones" is a broad, common request that is not limited to China Standard Time tasks. Without explicit constraints or negative examples, this could cause the skill to activate for general timezone questions better handled by other skills.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The text labels these commands as getting current system time 'assumed to be CST' or presents formatting examples under CST guidance, yet commands like Get-Date, date, and Python datetime.now() only return the host's current local time. If the host is not configured for China Standard Time, the examples contradict the stated intent of obtaining CST specifically.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The JavaScript example hardcodes toLocaleString('zh-CN', ...), which imposes a specific language/locale in output formatting. The policy allows locale constraints only when user choice or clear justification is provided, and this example does neither.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The skill recommends calling an external time API over plain HTTP, which exposes requests and API keys to interception or tampering in transit. In a time-handling skill, the context makes this more concerning because users may copy-paste the example directly, causing avoidable credential leakage and reliance on unauthenticated network data.

Content

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

TimezoneDB API:

bash
curl "http://api.timezonedb.com/v1/get-time-zone?key=YOUR_API_KEY&by=zone&zone=Asia/Shanghai"

Google Maps Time Zone API:

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The example says # CST to UTC, but datetime.now() returns naive local system time, not guaranteed CST. Subtracting eight hours from local time only works if the host is already on China Standard Time, so the example's documentation overstates what the code actually does.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The web application example uses new Date().toLocaleString('zh-CN', options), which forces Chinese locale formatting for displayed time. This is a natural-language/locale policy issue because it does not offer the user a language or locale choice and is not clearly justified as mandatory.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

The manifest emphasizes obtaining local host China Standard Time and performing timezone conversions, which can be done locally. This section expands the skill into remote network-based time retrieval via third-party APIs, which is broader than the stated local-host-focused purpose.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

Under 'Formatting CST Time', the Python snippet uses datetime.now() with no timezone conversion, so it formats whatever the machine's local time is. That contradicts the section's stated focus on CST-specific formatting.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The command explicitly sets TZ=Asia/Shanghai, which imposes a specific locale/timezone behavior. This is a natural-language policy concern because the file hardcodes a regional setting without offering user opt-in or documenting why this locale is required.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.