Back to skill

Security audit

TrueTime

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed time-calculation helper with optional NTP lookup and no evidence of hidden access, persistence, or unrelated behavior.

Installers should treat NTP mode as optional and avoid relying on it for security-critical scheduling unless they trust the network path and NTP server; normal server-clock calculations are coherent with the skill's purpose.

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
scripts/true_time.mjs:467
Finding

Unauthenticated NTP Responses Can Manipulate Time-Sensitive Calculations

Content
View full analysis
{ const socket = dgram.createSocket("udp4"); const packet = Buffer.alloc(48); packet[0] = 0x1b; let settled = false; const finalize = (fn, value) => { if (settled) return; settled = true; clearTimeout(timer); try { socket.close(); } catch { // ignore close errors } fn(value); }; const timer = setTimeout( () => finalize(reject, new Error(`timeout after ${timeoutMs}ms`)), timeoutMs, ); socket.once("error", (error) => finalize(reject, error)); socket.once("message", (message) => { if (!message || message.length < 48) { finalize(reject, new Error("invalid NTP response (too short)")); return; } const seconds1900 = message.readUInt32BE(40); const fraction = message.readUInt32BE(44); const unixSeconds = seconds1900 - 2208988800; const ms = unixSeconds * 1000 + Math.round((fraction * 1000) / 0x1_0000_0000); finalize(resolve, { nowMs: ms, server }); }); socket.send(packet, 0, packet.length, 123, server, (error) => { if (error) { finalize(reject, error); } }); }); } ``` ### Technical Analysis The optional NTP implementation communicates over unauthenticated UDP and accepts the first packet received by the socket if it is at least 48 bytes long. The response is not adequately bound to the request or validated as a legitimate NTP server response. In particular, the implementation does not verify: - The source address and source port of the response. - The NTP mode, version, stratum, or leap indicator. - The response's originate timestamp against a r ...[truncated 2626 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • 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
Findings (2)

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The lunar formatter is created with the fixed locale zh-CN-u-ca-chinese, which forces Chinese-language output regardless of user preference. This is a natural-language locale policy concern because the file does not offer a language choice or document this as a justified region-specific constraint.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
92% confidence
Finding

When --time-source ntp is used, the script sends UDP requests to external NTP servers via socket.send(...). Although the help text documents the option, the code performs network communication without any confirmation prompt or explicit runtime disclosure, which is relevant because it transmits system-originated traffic to third-party servers.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.