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## 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
## 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
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.

Intent-Code Divergence

Medium
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.

Natural-Language Policy Violations

Medium
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.

External Transmission

Medium
Category
Data Exfiltration
Content
**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:**
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.

Intent-Code Divergence

Medium
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.

Natural-Language Policy Violations

Medium
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.

Description-Behavior Mismatch

Low
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.

Intent-Code Divergence

Low
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.

Natural-Language Policy Violations

Low
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.

Static analysis

No suspicious patterns detected.