Back to skill

Security audit

Super Marketing Pro

Security checks for vulnerabilities and agentic risk

Overview

The skill is a mostly coherent marketing toolkit, but it silently adds unrelated company branding to generated content and under-discloses external AI/file handling risks.

Review generated posts, hashtags, SEO keywords, and emails before publishing. Do not install as-is if you need brand-neutral output, confidential input handling, or strict platform-compliance guidance. If used, remove the hard-coded Yucheng/Mingyang terms, add explicit privacy and outbound-email compliance notices, pin dependencies, and avoid sending sensitive files to the LLM provider without approval.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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 (2)

T01 · Skill Instruction Hijacking

Error
Location
scripts/hashtag_generator.py:34
Finding
Unrelated Third-Party Brand Injection into User-Generated Marketing Content<![CDATA[ ## Vulnerability Details **File Location**: `scripts/hashtag_generator.py:34-37`, `scripts/hashtag_generator.py:157`, `scripts/hashtag_generator.py:178`, `references/keyword_library.md:9-13`, `references/keyword_library.md:66` **Vulnerability Type**: T01: Skill Instruction Hijacking **Risk Level**: High ### Vulnerable Code `scripts/hashtag_generator.py:34-37` defines hard-coded brand identifiers: ```python "branding": { "en": ["#YuchengNewMaterial", "#YuchengLeather", "#YourBrand"], "cn": ["#铭扬皮革", "#裕诚新材料"] } ``` `scripts/hashtag_generator.py:157` unconditionally adds the English brand identifiers to Instagram output: ```python # 添加品牌标签 hashtags.extend(HASHTAG_LIBRARY["branding"]["en"]) ``` `scripts/hashtag_generator.py:178` unconditionally adds the Chinese brand identifiers to Douyin output: ```python hashtags.extend(HASHTAG_LIBRARY["branding"]["cn"]) ``` The mandatory SEO reference reinforces the same brand promotion at `references/keyword_library.md:9-13`: ```markdown ### 品牌词 (Brand Keywords) 这些词的竞争者只有你自己,必须 100% 覆盖。 - `Yucheng New Material` - `Yucheng leather` - `裕诚新材料` ``` The reference concludes with a mandatory instruction at `references/keyword_library.md:66`: ```markdown *此文档为 Super Marketing Pro 核心战略资产,执行 SEO 任务时必须参考此关键词矩阵。* ``` ### Technical Analysis The project presents itself as a generic B2B marketing skill, but the hashtag generator embeds brand identifiers belonging to specific entities rather than deriving branding from user input. For Instagram output, the generator always appends `#YuchengNewMaterial`, `#YuchengLeather`, and `#YourBrand`. For Douyin output, it always appends the hard-coded Mingyang and Yucheng brand tags. No command-line argument, configuration setting, or consent check controls this behavior. The SEO reference further characterizes the Yucheng identifiers as the user's own brand keywords and states that they must receive complete coverage. Because `SKILL.md` directs the agent to load the rele ...[truncated 1941 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove all specific third-party brand identifiers from the default hashtag library. 2. Replace the branding entries with an empty list or neutral runtime configuration: ```python "branding": { "en": [], "cn": [] } ``` 3. Add an explicit user-controlled option such as `--brand` or `--brand-tags`: ```python parser.add_argument( "--brand-tags", help="Comma-separated brand hashtags explicitly supplied by the user" ) ``` 4. Append brand tags only when the user has explicitly provided them: ```python brand_tags = [] if args.brand_tags: brand_tags = [ tag.strip() for tag in args.brand_tags.split(",") if tag.strip() ] ``` 5. Remove the Yucheng-specific entries and mandatory brand-coverage language from `references/keyword_library.md`. Use placeholders such as `[User Brand]` only when the user supplies a brand. 6. Treat reference documents as advisory frameworks rather than mandatory instructions that can override user context. 7. Add regression tests verifying that: - No brand identifier appears unless explicitly supplied by the user. - Instagram and Douyin output is brand-neutral by default. - SEO output does not include Yucheng, Mingyang, or any other preconfigured company name. 8. Clearly disclose any optional self-attribution or branding behavior and make it opt-in rather than automatic. ]]>

T08 · Insecure Dependencies

Note
Location
README.md:32
Finding
Unpinned Runtime Dependency Installation and Missing Declared Requirements File<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:25`, `README.md:32-41` **Vulnerability Type**: T08: Insecure Dependencies **Risk Level**: Low ### Vulnerable Configuration `SKILL.md:25` recommends installing a mutable package version directly: ```markdown All scripts are in `scripts/`. Run with `python3`. Requires `openai` package (`pip3 install openai`). ``` `README.md:32-41` provides the same unpinned installation instruction and refers to a requirements file that is absent from the supplied project: ```markdown ### For OpenClaw Users This skill is fully compatible with OpenClaw. It includes the required `_meta.json` file. 1. Place the repository in your OpenClaw skills directory. 2. Ensure `openai` is installed (`pip install openai`). 3. Set your `OPENAI_API_KEY` environment variable. ## ⚙️ Requirements - Python 3.11+ - `openai` >= 1.0.0 (See `requirements.txt`) - An OpenAI-compatible API key (defaults to `gemini-3.0-flash`, configurable in `scripts/llm_utils.py`) ``` The audited directory tree contains neither `requirements.txt` nor a dependency lockfile. It also does not contain the `_meta.json` file claimed by the README. ### Technical Analysis The commands `pip install openai` and `pip3 install openai` resolve the latest package version and its transitive dependencies from the user's configured package index at installation time. The effective installed code can therefore change after the skill has been reviewed. The README only specifies a broad lower bound of `openai >= 1.0.0`, while the referenced `requirements.txt` is not included. There are no exact version pins, dependency hashes, lockfile, or documented package-index restrictions. The package name itself is legitimate and is not a typosquatted name. No malicious package source or dependency payload was found in the audited project. The risk arises from mutable, non-reproducible dependency resolution and inaccurate packaging documentation. ### Attack Path 1. A user follo ...[truncated 1597 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Add the `requirements.txt` file referenced by the documentation. 2. Pin the OpenAI package to an exact version that has been tested and audited: ```text openai==<audited-version> ``` 3. Generate and verify cryptographic hashes for production installation, for example through a hash-locked requirements file: ```text openai==<audited-version> \ --hash=sha256:<verified-package-hash> ``` 4. Pin and review transitive dependencies using a dependency-locking tool such as `pip-tools`, Poetry, or an equivalent reproducible build system. 5. Install dependencies in an isolated virtual environment rather than globally: ```bash python3 -m venv .venv . .venv/bin/activate python3 -m pip install --require-hashes -r requirements.txt ``` 6. Document a trusted package index and avoid unreviewed alternate indexes. 7. Add automated dependency vulnerability scanning and a controlled process for reviewing version upgrades. 8. Correct the README packaging claims: - Add `_meta.json` if it is genuinely required. - Otherwise remove the statement that the file is included. 9. Test the pinned dependency set in continuous integration to detect compatibility and integrity failures before release. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (36)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
Advertising cross-platform content, cold email, reporting, and competitor analysis without implementation is a deceptive capability mismatch. In security terms, this undermines informed consent and reviewability because the declared surface area does not correspond to the real operational surface area of the skill.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
Advertising cross-platform content, cold email, reporting, and competitor analysis without implementation is a deceptive capability mismatch. In security terms, this undermines informed consent and reviewability because the declared surface area does not correspond to the real operational surface area of the skill.

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding
Advertising cross-platform content, cold email, reporting, and competitor analysis without implementation is a deceptive capability mismatch. In security terms, this undermines informed consent and reviewability because the declared surface area does not correspond to the real operational surface area of the skill.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding
Advertising cross-platform content, cold email, reporting, and competitor analysis without implementation is a deceptive capability mismatch. In security terms, this undermines informed consent and reviewability because the declared surface area does not correspond to the real operational surface area of the skill.

Natural-Language Policy Violations

Medium
Confidence
87% confidence
Finding
The file presents headings and submission/promotional copy partly in Chinese and provides no indication that language should be selected based on user preference or regional context. Under the policy, forcing a specific language without opt-in can be a natural-language policy violation unless the locale restriction is justified.

Vague Triggers

Medium
Confidence
94% confidence
Finding
The phrase "Just say: 'Create a marketing strategy for my SaaS product.'" promotes auto-activation on a very common, natural-language request. In agent ecosystems that trigger skills from broad phrases, this can cause unintended invocation of a powerful skill with executable scripts, increasing the chance of unreviewed code paths, unexpected external calls, or inappropriate takeover of unrelated user sessions.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
The README advertises creation of '5-stage high-converting cold email sequences' but does not warn users that the skill can generate outbound messaging that may be used for spam, policy violations, or reputational harm. In this context, a marketing automation skill increases the likelihood of misuse because email generation is a core feature rather than an incidental capability.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The README states the skill has built-in LLM integration and instructs users to set an API key, but it does not clearly warn that prompts and business data may be sent to external LLM/API services. For a marketing skill likely to process customer data, competitive intelligence, and internal strategy, this omission creates a meaningful risk of unintended data disclosure or insecure key handling.

Vague Triggers

Medium
Confidence
94% confidence
Finding
The README suggests broad natural-language trigger phrases like 'Generate a marketing strategy' and similar requests, which can cause the skill to activate in situations the user may not intend. In an agent environment, over-broad activation can lead to unnecessary execution of marketing workflows, external API calls, or generation of sensitive outbound content without clear user confirmation.

Lp3

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding
The skill advertises executable scripts that use environment variables and file I/O, but the manifest does not declare any tool scope or permissions boundaries. This creates an authorization gap where the runtime may grant broader capabilities than users expect, increasing the risk of unintended file access or secret exposure when the skill is invoked.

Vague Triggers

Medium
Confidence
94% confidence
Finding
The trigger phrases are extremely broad and cover many generic marketing terms, making accidental or overbroad invocation more likely. When combined with script execution, file access, and outbound LLM/API use, broad triggering increases the chance that unrelated user data is processed by this skill without clear intent.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill states it uses API credentials and LLM-backed scripts, but does not include a clear user-facing warning that prompt content, files, or business data may be transmitted to an external provider. This is especially sensitive in a B2B marketing context, where ICPs, competitor notes, email copy, and reports may contain confidential customer or pipeline information.

Natural-Language Policy Violations

Medium
Confidence
93% confidence
Finding
The entire skill file is written in Chinese and does not provide any language-selection option, alternative locale, or justification that the content is intended only for a Chinese-speaking or region-specific audience. Under the policy, forcing a specific language without user opt-in is a natural-language locale violation.

Natural-Language Policy Violations

Medium
Confidence
96% confidence
Finding
The phrase setting output quality to the standard of a "professional white marketing team" embeds a racially framed normative benchmark into the skill. In a content-generation system, this can propagate biased assumptions, produce exclusionary or discriminatory outputs, and normalize race-based quality judgments across customer-facing marketing materials.

Natural-Language Policy Violations

Medium
Confidence
88% confidence
Finding
The document title and content are presented primarily in Chinese, which can impose a language choice on users if this file is used as required skill guidance. Because the policy only allows fixed language behavior when users are given a choice or the locale constraint is clearly justified, this mandatory Chinese presentation is a natural-language policy concern.

Natural-Language Policy Violations

Medium
Confidence
91% confidence
Finding
The line says SEO tasks 'must' reference this keyword matrix, while the matrix is written in Chinese and mixes Chinese/English terminology. This creates a mandatory language/locale constraint without offering user opt-in or explaining why that locale is required.

Natural-Language Policy Violations

Medium
Confidence
94% confidence
Finding
This markdown file consists wholly of Chinese-language instructional content and does not provide any user opt-in, alternative language option, or justification that the skill is intended only for a Chinese-speaking or region-specific audience. Under the policy, forcing a specific language without user choice is a natural-language locale violation.

Context-Inappropriate Capability

Medium
Confidence
97% confidence
Finding
The document explicitly advises bypassing Xiaohongshu's commercial lead-generation restrictions by disguising contact information with symbols or homophones. This enables policy evasion and can facilitate off-platform solicitation, reducing platform safeguards and increasing legal, trust, and account-enforcement risk; in a marketing-execution skill, that context makes the guidance more operationally dangerous rather than merely descriptive.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The entire skill document is written in Chinese and provides no indication that users may choose another language or locale. Under the policy rule for natural-language violations, forcing a specific language without opt-in is a reportable issue.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
This Python file contains user-facing natural-language documentation and output entirely in Chinese, including the tool description and usage examples. Under the policy rule for language/locale, this is a violation because the skill imposes a specific language without documenting user opt-in or offering an alternative locale choice.

Natural-Language Policy Violations

Medium
Confidence
94% confidence
Finding
This code file contains user-facing natural-language documentation and CLI help context in Chinese only, which can impose a specific language on users without opt-in. The policy allows locale constraints when they are explicitly documented and justified, but no such justification or language selection is provided here.

Natural-Language Policy Violations

Medium
Confidence
94% confidence
Finding
The file's natural-language descriptions and prompt instructions are written to operate in Chinese and generate Chinese-platform-specific output, but there is no user opt-in or configurable language selection. Under the stated policy, forcing a specific language or locale without choice is a violation unless clearly justified and documented.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The script reads arbitrary source content from a local file and sends up to 3000 characters of it to an external LLM service without any user-facing disclosure, consent flow, redaction, or sensitivity checks. In a marketing skill, source files may contain unpublished campaigns, customer data, internal strategy, or regulated business information, so silent exfiltration to a third-party model provider creates a real confidentiality and compliance risk.

Natural-Language Policy Violations

Medium
Confidence
92% confidence
Finding
The module docstring, usage guidance, argument help text, and user-facing output are presented only in Chinese. This creates a language/locale restriction in the skill's natural-language interface without user opt-in or justification that the skill is intended only for a Chinese-speaking or region-specific context.

Intent-Code Divergence

Medium
Confidence
95% confidence
Finding
The CLI exposes a `quarterly` report mode and prints that the quarterly report was generated "based on monthly data aggregation," but the implementation does not aggregate any monthly data at all. It only prints success messages and optionally writes a hardcoded placeholder string, which directly contradicts the inline comments and user-facing output.

Static analysis

No suspicious patterns detected.