Back to skill

Security audit

Hong Kong Horse Racing

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed HKJC race-card and recommendation tool with no evidence of hidden execution, credential access, persistence, or data exfiltration.

Before installing, understand that this tool fetches unofficial HKJC racing data over the network and produces heuristic racing picks that should not be treated as betting advice. Expect English-only output, npm dependency installation, and in-memory caching; no credentials are required.

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
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (9)

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documentation explicitly states "English output only," which imposes a language restriction on users. Under the policy, forcing a specific language without user opt-in or a clearly justified regional/compliance need is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

This line says the skill returns English names by default and that Chinese names are not used in output, which further codifies a fixed language policy. Because no user choice or justified locale constraint is provided, this conflicts with the language/locale policy criteria.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The manifest restricts the language parameter to en and explicitly states that only English is supported. Under the policy criteria, this is a language/locale constraint without user opt-in or a documented region-specific justification.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest description frames the skill as a Hong Kong Jockey Club race-card and recommendation tool, which implies retrieving racing data and computing picks from that domain data. The newsBoost option expands scope to external web/news sentiment gathering via Brave search, which is a materially different behavior not reflected in the stated purpose of fetching HKJC cards and analyzing form.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This code explicitly fixes user-facing reason phrases to English and later also maps horse, jockey, trainer, class, and going fields using only English variants. Because the skill enforces a specific language/locale without opt-in or documented justification, it matches the language/locale policy violation category.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The code explicitly states 'English only' and then selects only *_en fields such as name_en, raceClass_en, and go_en, with no fallback or user choice. That is a natural-language locale restriction applied across outputs, which violates the policy unless users can opt in or the limitation is clearly justified.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The code comment at L595 says the last6run string is 'NEWEST first, oldest last' and reverses it, but earlier comments and later logic consistently assume the source data is oldest-first after reversal is applied for recency analysis. This is an active contradiction in code documentation because the stated source ordering does not align with how the rest of the module interprets pastRuns.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

The version history confirms that English-only behavior is an intentional enforced product behavior rather than incidental wording. This supports the presence of a language restriction without user opt-in.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
94% confidence
Finding

The dependency uses a caret range (^1.0.0), which allows automatic installation of future 1.x releases that have not been reviewed by the skill author. If the upstream package is compromised or introduces a malicious or vulnerable update, consumers of this skill could pull that version during install, creating a software supply chain risk.

Content

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

json
"author": "Steven Ho",
  "license": "MIT",
  "dependencies": {
    "hkjc-api": "^1.0.0"
  }
}

Static analysis

No suspicious patterns detected.