Back to skill

Security audit

create-patent-based-rd-briefing-rd

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed local workflow for tagging authorized patent workbooks and generating reviewed HTML briefings, with some install and spreadsheet-handling cautions.

Install in a dedicated environment, review requirements.txt before using --install-dependencies, and avoid running the installer with elevated privileges. Process only workbooks you are authorized to use, review generated tagged workbooks before sharing them, and be cautious with reviewer names or custom topic configs that could introduce spreadsheet formulas.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
Findings (2)

T08 · Insecure Dependencies

Warning
Location
install.sh:110
Finding

Unpinned and Unverified Third-Party Dependency Installation

Content
View full analysis
=2.0.0 openpyxl>=3.1.0 ``` ### Technical Analysis The installer invokes pip after explicit user opt-in, but the dependency requirements use open-ended minimum versions. There are no exact version pins, upper bounds, package hashes, or lock file. Consequently, installation results depend on the packages available from the configured Python package index at execution time. A future compromised, malicious, or incompatible dependency release could be selected without any project change or renewed review. Python package installation may execute package build logic under the privileges of the user running the installer. The installer does not silently install dependencies, does not use suspicious package names, and does not configure an untrusted package index. These controls reduce likelihood but do not provide dependency integrity or reproducibility. ### Attack Path 1. An attacker compromises the distribution account or release pipeline of a declared dependency, or otherwise causes a malicious compatible version to appear on the package index used by pip. 2. The user runs: ```bash bash install.sh --target /chosen/path --install-dependencies ``` 3. Pip resolves the open-ended requirement to the attacker-controlled compatible release. 4. Package installation or build logic executes with the installing user's privileges. 5. The malicious dependency can access data and resources available to that user, including workbooks later processed in the same environment. ### Impact Assessment ...[truncated 478 chars]
Remediation
View remediation
openpyxl== ``` 2. Generate a lock file containing hashes for all direct and transitive dependencies. 3. Install with hash verification: ```bash python -m pip install --require-hashes -r requirements.lock ``` 4. Periodically update dependencies through a controlled review process that includes vulnerability scanning and regression testing. 5. Recommend installation inside a dedicated virtual environment rather than the system Python environment. 6. Avoid running dependency installation with administrator or root privileges. 7. Document the expected Python package index and advise users to verify that pip is not configured to use an unauthorized index or proxy. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/tag_relevant.py:244
Finding

Spreadsheet Formula Injection in Generated Review Workbook

Content
View full analysis
Remediation
View remediation
str: text = "" if value is None else str(value) if text.startswith(("=", "+", "-", "@")): return "'" + text return text ``` 3. Apply the sanitizer in the write loop: ```python for header, value in values.items(): cell = worksheet.cell(row_number, header_columns[header]) cell.value = safe_excel_text(value) cell.data_type = "s" ``` 4. Validate reviewer names against a conservative policy where practical, while retaining output sanitization as the primary defense. 5. Treat all configuration strings as untrusted at the output boundary, even when configurations are package-local. 6. Add negative tests for values beginning with `=`, `+`, `-`, and `@`, and verify that reopening the workbook preserves them as literal text. ]]>
Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • System Prompt LeakageDirect Leakage, Indirect Extraction, Tool-Based Exfiltration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
Findings (24)

Direct Prompt Extraction

High
Category
System Prompt Leakage
Confidence
85% confidence
Finding

Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.

Content

Scanner excerpt · CHANGELOG.md (reported line 128)May include surrounding context.

md
- Fixed column assumptions.
- Keyword match interpreted as confirmed relevance.
- Hard-coded category dictionary in the renderer.
- Arbitrary Top-20 display rule.
- Unverified fixed facts and future dates.
- No explicit human review state.
- No family/count-unit boundary.

Direct Prompt Extraction

High
Category
System Prompt Leakage
Confidence
85% confidence
Finding

Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.

Content

Scanner excerpt · IMPROVEMENTS.md (reported line 173)May include surrounding context.

md
- system fonts;
- visible table borders;
- accessible text hierarchy;
- print rules;
- no external runtime.

This better fits a mainstream scientific and technical briefing and keeps

Direct Prompt Extraction

High
Category
System Prompt Leakage
Confidence
85% confidence
Finding

Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.

Content

Scanner excerpt · SKILL.md (reported line 339)May include surrounding context.

md
- system fonts;
- visible table borders;
- accessible text hierarchy;
- print rules;
- no external runtime.

This better fits a mainstream scientific and technical briefing and keeps

Tp4

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding

The declared description presents an operational skill that accepts user-supplied patent records from an authorized Excel workbook and produces an evidence-bounded HTML R&D briefing. The supplied code chunk is only a configuration file containing constants and structured data for one topic (BIPV), including scope definitions, unverified source leads, organization leads, technology categories, and publication requirements. While some content aligns thematically with patent briefing work and patent-professional boundaries, the code does not implement the key declared behaviors: ingesting Excel, screening relevance, organizing reviewed records, preserving workbook artifacts, or generating a self-contained HTML report. Its actual role is configuration/data definition rather than the described end-to-end briefing creation capability.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The description promises an operational briefing workflow centered on an authorized Excel workbook and user-supplied patent records, including review organization and HTML report generation. The actual code chunk is only a localized/topic-specific configuration file for coffee-machine technology. It sets constants and metadata such as mechanisms, excluded scope, organization leads, technology categories, and release rules. While this is loosely related to patent-based R&D briefing content, it does not implement the core declared behavior. Its primary purpose is maintaining static coffee-machine briefing configuration and discovery leads, which is materially narrower and different from the declared end-to-end workbook-driven reporting skill.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description presents a full workflow skill for taking patent records from an authorized Excel workbook, reviewing/screening them, organizing them, and generating a scientific HTML briefing with provenance controls. The supplied code chunk only contains a localized Python configuration module for a coffee-machine example. Its behavior is limited to defining constants and dictionaries used for keyword-based discovery and review policy. While some elements loosely relate to patent screening taxonomy, the code does not implement the main declared functionality and is materially narrower in scope, centered on coffee-machine topic configuration rather than end-to-end workbook-based briefing generation.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
90% confidence
Finding

The code’s primary function is narrowly scoped to annotating an Excel workbook with keyword-based discovery signals for later human review. This partially overlaps with the declared description’s mention of screening relevance and preserving workbook links/figures, but it does not implement the main declared outcome: generating an English patent-based R&D briefing in HTML. It also does not classify reviewed records by technology route or organization, nor does it produce a self-contained scientific report. The actual behavior is a preprocessing/tagging step, not the full briefing-generation capability described.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 513)May include surrounding context.

md
bash -n scripts/run.sh

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The guide requires the package to 'contain English/global content' and later reiterates that all Markdown and file contents must be English. This is a natural-language locale constraint, and the file does not present it as a user-selectable option or justify it as a narrowly scoped regional/compliance requirement.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

These lines instruct reviewers to inspect for and effectively remove CJK characters, domestic-only language, and untranslated content, while requiring file contents to be English. That imposes a language/locale policy through natural-language instructions without offering a choice or clearly documenting a justified region-specific need.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding

The skill describes capabilities that involve shell execution, file writes, and optional network-connected patent tools, but it does not declare an explicit tool/permission boundary. In an agent setting, missing scope declarations can cause overbroad tool access, making it easier for downstream prompts or workflow mistakes to trigger unintended file modification, command execution, or external data transmission.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The description states the skill will create an "English patent-based R&D briefing," which imposes a specific language requirement. While the file later collects relevant jurisdictions and languages as inputs, it does not offer the user a choice of output language or justify why English is required for compliance or region-specific reasons.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

These lines specify that the package content, runtime topic key, field names, and report output are English. This is a natural-language locale constraint that does not appear to be optional or user-selected, which conflicts with the policy against forcing a specific language without opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The renderer requirements explicitly state that it "produces English static HTML." This is a direct language policy constraint, and the file does not provide an option for users to choose another language or indicate that the restriction is justified by a region-specific requirement.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · SKILL.md (reported line 467)May include surrounding context.

md
- report the exact topic key;
- list available supported keys where safe;
- do not dynamically load an arbitrary path;
- do not create a new file without approval.

If the workbook lacks required fields:

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
81% confidence
Finding

The file repeatedly frames the skill as standardized to English/global localization rather than presenting language choice. Under the policy rule, forcing a specific language or locale without opt-in can be a natural-language policy violation unless clearly justified as region-specific or optional.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

This line explicitly requires all Markdown to be English, which is a language policy constraint. The document does not indicate that users can choose another language or that the restriction is required for a specific regulated locale.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The dependency specification uses a lower-bound only constraint for pandas, which makes builds non-reproducible and can unexpectedly pull in vulnerable or incompatible future releases. In a skill that processes user-supplied Excel patent workbooks, dependency drift increases supply-chain risk and can undermine review reproducibility promised by the skill description.

Content

Scanner excerpt · requirements.txt (reported line 1)May include surrounding context.

text
pandas>=2.0.0
openpyxl>=3.1.0

Unverifiable Dependency: pandas has 1 known advisory(ies) (CVE-2020-13091 (** DISPUTED ** pandas through 1.0.3 can unserialize and execute commands from an)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
96% confidence
Finding

The openpyxl dependency is not pinned to a specific version, so environments may install different releases over time, including versions with known security issues or behavior changes. Because this skill is explicitly designed to ingest Excel workbooks, the spreadsheet parser is security-relevant and version ambiguity is more dangerous than in a non-file-processing skill.

Content

Scanner excerpt · requirements.txt (reported line 2)May include surrounding context.

text
pandas>=2.0.0
openpyxl>=3.1.0

Unverifiable Dependency: openpyxl has 2 known advisory(ies) (CVE-2017-5992 (Improper Restriction of XML External Entity Reference in Openpyxl); CVE-2017-5992 (Openpyxl 2.4.1 resolves external entities by default, which allows remote attack)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
96% confidence
Finding

The generated document explicitly sets lang="en", which enforces an English locale in the output. Under the stated policy, hard-coding a language without user opt-in or a documented justification is a natural-language policy concern.

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/tag_relevant.py (reported line 107)May include surrounding context.

python
def require_string_list(module: ModuleType, name: str) -> list[str]:
    value = getattr(module, name, None)
    if not isinstance(value, list) or not value:
        raise TaggingError(f"{module.__name__}.{name} must be a non-empty list")
    if any(not isinstance(item, str) or not item.strip() for item in value):

Vague Triggers

Low
Category
Not specified by scanner
Confidence
81% confidence
Finding

The instruction to 'request a patent-based R&D briefing' describes how to use the skill, but it does not clearly define exact trigger phrases, boundaries, or examples of requests that should not invoke it. In a plain-text installation note, this can leave activation scope underspecified compared with a more explicit invocation contract.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.dynamic_code_execution

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
scripts/generate_report.py:137

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
scripts/tag_relevant.py:102