Back to skill

Security audit

SaaS Landing Page Generator

Security checks for vulnerabilities and agentic risk

Overview

This landing-page generator has a coherent purpose, but its script can write outside the intended folder and can generate unsafe deployable pages when given untrusted product text.

Review this skill before installing or using it in automated workflows. Use only trusted product names and descriptions, choose an output directory deliberately, avoid running it in sensitive project roots, and inspect generated files before opening or deploying them. Harden the script by slugifying product names, blocking path traversal, refusing accidental overwrites, escaping generated HTML/JSX content, and pinning or bundling frontend dependencies.

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 (4)

T09 · Insecure Skill Coding Practices

Error
Location
saas-landing-page.sh:54
Finding

Output Path Traversal Through Unsanitized Product and Output Values

Content
View full analysis
Remediation
View remediation
&2 exit 1 } OUTPUT_PATH=$(realpath -m "$BASE_DIR/${DIR_NAME}-landing") case "$OUTPUT_PATH/" in "$BASE_DIR/"*) ;; *) echo "Output path escapes the approved directory" >&2 exit 1 ;; esac ``` ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
saas-landing-page.sh:107
Finding

sed Program Injection Through Unescaped Template Values

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
saas-landing-page.sh:139
Finding

Persistent HTML and JSX Injection in Generated Landing Pages

Content
View full analysis
"$OUTPUT_PATH/index.html" << HTML $PRODUCT - $DESCRIPTION .gradient-text { background: linear-gradient(to right, #2563eb, #9333ea); -webkit-background-clip: text; -webkit-text-fill-color: transparent; }

$PRODUCT

$DESCRIPTION

``` The same values are also inserted into React JSX through the unsafe replacements at lines 107–109 and into the React/Next.js HTML metadata at lines 115–119. ### Technical Analysis The product name and description are embedded directly into HTML text and attribute contexts without contextual output encoding. In particular: - HTML element content can be terminated and followed by attacker-controlled elements. - The description can terminate the quoted `content` attribute in the meta tag. - Attacker-controlled event handlers, script-capable elements, or other active markup can be introduced. - The generated React component treats inserted values as source fragments rather than safely serialized React text. This is a persistent injection vulnerability because the payload is written into generated source ...[truncated 1167 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
saas-landing-page.sh:120
Finding

Generated Pages Execute Unpinned Third-Party JavaScript

Content
View full analysis
``` The Tailwind CDN script is also included in the plain HTML output at line 143. ### Technical Analysis The generated pages execute JavaScript directly from public CDNs at runtime. Several URLs do not specify exact immutable versions: - Tailwind uses a moving CDN endpoint. - React and ReactDOM specify only the major version. - Babel has no version pin. None of the script elements includes a Subresource Integrity hash. Consequently, the code reviewed at generation time is not necessarily the code later executed by visitors. A CDN compromise, upstream account compromise, malicious release, or mutable-tag change could alter the delivered script. The generated page also uses development and browser-side compilation dependencies that are inappropriate for a hardened production deployment. ### Attack Path 1. The generated landing page is deployed without replacing the CDN references. 2. A visitor loads the page. 3. The browser requests JavaScript from the configured third-party CDN domains. 4. The CDN or mutable upstream version supplies modified content. 5. The browser executes that content in the landing page's origin context. 6. The modified dependency can access the same page data and browser capabilities as first-party JavaScript. This path depends on an upstream or delivery-channel compromise or an unsafe mutable release, rather than direct control of the generator input. ### Impact Assessment A c ...[truncated 523 chars]
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (3)

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest description is written as an instruction that the skill generates landing pages, and all surrounding user-facing documentation is exclusively in Chinese with no indication that users can choose another language or locale. This creates a language/locale policy concern because the skill appears to impose a specific language experience without opt-in or justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The manifest description is written as an instruction/promise to generate the landing page in Chinese ('生成专业 SaaS Landing Page'). This can indicate a fixed language/locale expectation without offering the user a choice, which matches the policy concern for language constraints lacking opt-in.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This code creates directories and later writes several files into the computed output path, which affects the user's filesystem. Although it prints progress messages, it does not disclose the risk of overwriting existing generated content or warn before modifying files.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.