Back to skill

Security audit

context-engineering

Security checks for vulnerabilities and agentic risk

Overview

This skill is a context-budgeting helper with documentation quality issues, but I found no hidden persistence, credential handling, network execution, or destructive behavior.

Install only if you want a context-budgeting and context-audit helper. Expect Chinese-heavy output and some stale or inaccurate usage examples; use the actual CLI help rather than the unsupported documented flags. Do not let it automatically rewrite prompts, memory, or retrieval settings without reviewing the proposed changes.

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
  • 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
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (9)

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The changelog states 'Bilingual rewrite (full EN+ZH, English first)', which imposes a language/ordering policy in the skill's natural-language description rather than offering a user choice. This can violate locale/language policy expectations when no opt-in or justification is provided.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The documentation advertises CLI modes and parameters such as --calculate, --budget_limit, and --model_name that are not declared in the interface schema. This creates interface ambiguity and can cause downstream agents or orchestrators to invoke undocumented behavior, weakening validation and opening the door to unsafe assumptions about how the skill should be executed.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The skill claims users can read in-file helper libraries for memory-decay and retrieval-recall algorithms, but the declared entry point and capabilities only describe a budget calculator CLI. This discrepancy broadens the apparent functional scope of the skill beyond its declared contract, which can mislead agents into exposing or depending on undeclared logic and increase the risk of unintended execution paths.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The Chinese usage section repeats undocumented parameters and audit behavior that are absent from the formal interface schema. In multilingual skills, inconsistent declarations are especially risky because one language version may induce behavior that bypasses validation, review, or wrapper constraints assumed by tooling.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The natural-language content is entirely in Chinese and directs agent behavior in that language, but the file does not offer user opt-in or indicate that the skill is intentionally limited to a Chinese-speaking context. Under the stated policy, a language constraint without choice or justification is a locale-policy issue.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The activation text uses very broad, complaint-style triggers such as 'AI越来越笨' and '答非所问', which can match ordinary user frustration rather than a clear request to invoke this specific skill. That increases the chance of unintended activation, causing the agent to steer into this skill's workflow when the user's actual intent is different.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This file contains natural-language instructions and status messages that force a specific language/locale for users. Under the policy, a skill should not impose a language without opt-in unless the locale restriction is clearly documented and justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

This markdown file includes a substantial policy and licensing section written primarily in Chinese, including imperative language such as '务必并读' and a required unchanged disclosure block. That can function as a language/locale constraint for users who do not read Chinese, and the file does not offer an explicit language-choice mechanism for this section.

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 · scripts/context_budget.py (reported line 60)May include surrounding context.

python
blocks[args.block] = read_block("-")
    else:
        for b in ("system", "memory", "retrieval", "tool", "history"):
            v = getattr(args, b)
            if v != "":
                blocks[b] = read_block(v)