Back to skill

Security audit

create-fto-screening-report-ip

Security checks for vulnerabilities and agentic risk

Overview

The skill matches its FTO-reporting purpose, but it has credential-handling and privacy issues users should review before installing.

Install only if you can control the API configuration and outputs. Keep the PatSnap base URL pinned to an approved PatSnap host, prefer environment or secure credential storage, do not use untrusted --api-config files, and inspect generated JSON before sharing reports because local input paths may be included.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/run_generic_fto_report.py:661
Finding

Configurable API Base URL Can Exfiltrate the PatSnap Bearer Credential

Content
View full analysis
PatSnapClient: config = load_json(config_path, expected=dict) if config_path.exists() else {} key = api_key or os.getenv("PATSNAP_API_KEY") or clean_text(config.get("api_key")) if not key: raise ValueError("PatSnap API key missing. Set PATSNAP_API_KEY or pass --api-key; never place secrets in reports.") return PatSnapClient( api_key=key, base_url=clean_text(config.get("base_url")) or "https://connect.patsnap.com", connect_timeout=float(config.get("connect_timeout_seconds", 10)), read_timeout=float(config.get("read_timeout_seconds", config.get("timeout_seconds", 60))), max_retries=int(config.get("max_retries", 3)), ) ``` The resulting client accepts any absolute HTTPS host: ```python parsed = urlparse(str(base_url or "")) if parsed.scheme.lower() != "https" or not parsed.netloc: raise ValueError("PatSnap base URL must be an absolute HTTPS URL.") self._api_key = key self.base_url = f"{parsed.scheme}://{parsed.netloc}".rstrip("/") ``` Every request then sends the credential to that host: ```python def _headers(self, *, accept: str = "application/json") -> dict[str, str]: return { "Authorization": f"Bearer {self._api_key}", "Accept": accept, "Content-Type": "application/json", "User-Agent": "PatSnap-FTO-Screening-Skill/2.0", } ``` ### Technical Analysis The configuration restricts the URL scheme to HTTPS but does not restrict the hostname to an approved PatSnap domain. HTTPS protects transport confidentiality but does not establish that the destination is trusted. The CLI also permits an arbitrary `--api-config` path. Consequently, a mali ...[truncated 2196 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
scripts/run_generic_fto_report.py:287
Finding

Absolute Input File Path Is Persisted in Deliverable JSON

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (12)

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/claim_chart_schema.md (reported line 87)May include surrounding context.

md
| `status` | string | Yes | `complete`, `partial`, `failed`, or `dry_run` |
| `notes` | array | Yes | Mode changes, retries, unavailable services, and evidence caveats |

Never include API keys, Authorization headers, cookies, access tokens, local
user profile paths, or confidential input text not required for traceability.

## 6. `PatentComparisonResult`

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding

The skill describes workflows that read local files, write reports, access private API configuration, and make network requests, but it does not declare any explicit tool scope or allowed-tools boundary. In an agent environment, this creates an authorization ambiguity that can lead to over-broad file, network, or environment access beyond what is strictly required, especially because the skill processes sensitive IP documents and private API credentials.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill description requires 'English HTML and DOCX reports', which imposes a specific language choice. The file does not offer the user a language selection or clearly justify English-only output as a necessary regional or compliance constraint.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The file states 'Use English interface values and output in the international workflow' and requires English report labels and error messages. This is a natural-language locale policy constraint that does not offer the user a choice or opt-in, and the documented rationale ('international workflow') is not a region-specific compliance requirement.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

Lines L164-L165 require 'an English HTML report' and 'an English DOCX report' as fixed outputs. Under the policy, forcing a specific language without user opt-in or a clearly documented justification is a natural-language locale policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The module docstring states it renders 'safe, static English HTML,' which imposes a specific language. The file also reinforces this behavior in the CLI description and HTML lang attribute, but does not offer opt-in/selection or explain a region-specific requirement.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The template sets <html lang="en"> for all reports, which forces an English locale regardless of user preference or input context. Under the policy, fixed language behavior should be user-selectable or clearly justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The code hard-codes default locale choices such as language="EN" for claim retrieval and language="en" for technical summaries, which can force English output when the user has not requested that language. The file does not present these defaults as an explicit user choice or explain a justified region-specific constraint, which matches the language/locale policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
93% confidence
Finding

The README states that expected outputs include 'an English HTML report' and 'an English DOCX report,' which imposes a specific language requirement. Under the policy, forcing a language without user opt-in or a documented justification is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

The HTML standard explicitly requires lang="en", which hard-codes the report locale. Elsewhere in the file, there is no user-choice mechanism or documented justification for enforcing English for all runs.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

This JSON manifest contains only connection settings and does not define how or when the skill should be invoked. For manifest files, absence of any trigger description or constraints can leave activation behavior underspecified and ambiguous in the broader skill package.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The parser description says the command creates an "English FTO screening package," which is a natural-language locale constraint. The file does not offer a language choice or explain why English is required, so this appears to violate the language/locale policy for all file types.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.