Back to skill

Security audit

originality-check

Security checks for vulnerabilities and agentic risk

Overview

The skill's code is a small hash-comparison CLI, but its main instructions overstate the capability and may cause users to paste raw contest submissions unnecessarily.

Install only if you intend to use it as a local hash-comparison helper, not as a full plagiarism detector. Do not paste unpublished work content into the skill; provide only precomputed hashes and a known-hashes list, and treat all results as decision support requiring human review.

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
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (13)

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This file contains user-facing and agent-facing natural language exclusively in Chinese, including the title and operational instructions. Under the policy, forcing a specific language without opt-in or justification can be a language/locale policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The document is structured only in English and Chinese sections, and does not indicate that users may choose another language or locale. Under the policy, forcing a specific language without user opt-in is a natural-language policy concern unless the locale restriction is explicitly justified.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The manifest trigger wording is broad enough that generic mentions of contests, judging, or originality could activate the skill without clear consent or suitability checks. In an AI-agent setting, ambiguous triggers raise the chance of unsolicited processing and tool selection errors, especially when the skill's documented behavior already overstates its capabilities.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The invocation text says to trigger the skill directly through system instructions or conversation context, which is overly broad and may cause accidental or implicit activation. In agent environments, broad activation rules can route unrelated user content into the skill unexpectedly, increasing the risk of unintended data processing and mistaken reliance on its output.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The documentation claims the skill can accept uploaded work content and compare it against an internal knowledge base, while the declared interface only exposes hash-based inputs and denies network/filesystem/subprocess access. This mismatch can mislead operators and upstream agents into sending raw submission content under false assumptions about processing, privacy, or detection coverage, causing unsafe handling of sensitive data and unreliable security/compliance decisions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The documentation discusses checking uploaded work content but does not provide a clear warning about handling potentially sensitive or proprietary submissions. That omission is risky because users may disclose full unpublished works, believing the tool safely supports such use, even though the manifest suggests a much narrower hash-only workflow.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The Chinese-language documentation repeats the same inaccurate behavior claims, stating that users can upload work content and that the system uses a built-in knowledge base for duplicate detection. Because this inconsistency exists in multiple languages, it increases the chance of misuse by different operators and undermines informed consent, privacy expectations, and trust in the skill's decision output.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The module docstring and subsequent user-facing CLI descriptions/errors are written entirely in Chinese, which imposes a specific language on users. The file does not offer any language/locale selection or explain that the skill is intentionally limited to a Chinese-speaking context.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

L06 describes the skill as an originality/plagiarism decision-support tool with JSON IR output, which implies substantive analysis functionality. In this file, however, there is no implementation of originality checking at all—only process and editing guidance for agents. That is a documentation-to-content contradiction within the file rather than a mere omission of detail.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
67% confidence
Finding

L12 instructs an AI agent to first read SKILL.md and use its frontmatter description to decide whether the skill applies. In the analyzed context, however, no manifest/SKILL.md content is present, so the documented invocation path contradicts the available artifact set for this review. This is a documentation inconsistency affecting intent and use.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The English section's sample output contains a warning string only in Chinese, which implies a fixed locale for user-facing warning content. There is no accompanying statement that warning language is configurable or dependent on user preference.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The file content is entirely in Chinese and presents the skill metadata and usage guidance in that language, but it does not mention any user opt-in, language selection, or region-specific justification. Under the policy, forcing a specific language without choice can be a natural-language policy violation.

Content

No source excerpt is available for this finding.

Dynamic attribute access via getattr()

Low
Category
Dangerous Code Execution
Confidence
50% confidence
Finding

Dynamic getattr() with a non-literal attribute name can access arbitrary object attributes, potentially bypassing access controls.

Content

Scanner excerpt · originality-check.py (reported line 86)May include surrounding context.

python
out_list.append({"tool": META["slug"], "input": d, "errors": [str(e)], "rc": 2, "aigc_mark": AIGC})
        print(json.dumps(out_list, ensure_ascii=False, indent=2))
        sys.exit(0 if allok else 2)
    args = {k: getattr(ns, k) for k in argnames}
    try:
        res, rc = _run(args)
    except GateError as e: