Back to skill

Security audit

Landing Page Builder

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly coherent for building static landing pages, but its required git hook can automatically execute project JavaScript during pushes and its CI example fetches Playwright without a pinned version.

Review before installing. The skill is not malicious, but you should replace the hook's `require()` and dynamic `import()` checks with parsing-only validation, pin Playwright in a lockfile, and avoid enabling the pre-push hook or multilingual checks unless they match the project you are building.

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)

T09 · Insecure Skill Coding Practices

Error
Location
references/pre-push-check-template.sh:43
Finding

Pre-push validation executes repository-controlled JavaScript

Content
View full analysis
/dev/null || node --check js/copy.js 2>/dev/null; then echo " ✅ copy.js parses OK" else # ES module — try dynamic import if node -e "import('./js/copy.js').catch(()=>{})" 2>/dev/null; then echo " ✅ copy.js ES module OK" else echo " ⚠️ copy.js syntax could not be validated (ES module)" fi fi # 4. main.js syntax check echo "" echo "4. main.js syntax..." node -e "import('./js/main.js').catch(()=>{})" 2>/dev/null && echo " ✅ main.js OK" || echo " ⚠️ main.js could not be validated" ``` ### Technical Analysis The validation template uses Node.js `require()` and dynamic `import()` to check whether generated JavaScript files are syntactically valid. Both operations execute all top-level statements in the imported module; they are not parsing-only operations. Because the Skill directs users to install this script as a repository pre-push hook, repository-controlled code in `js/copy.js` or `js/main.js` is executed automatically when a developer pushes changes. A malicious module could invoke Node.js APIs such as `child_process`, access files available to the developer account, modify repository content, or initiate network connections. The dynamic import checks also use `.catch(()=>{})`, which suppresses rejected import promises. Consequently, some module loading or runtime errors may be treated as successful validation, reducing the effectiveness of the security gate. ### Attack Path 1. An attacker contributes or compromises `js/copy.js` or `js/main.js`. 2. The attacker places a malicious top-level statement in the affected module. 3. A developer checks out or merges the changes. 4. Following the S ...[truncated 830 chars]
Remediation
View remediation
{})`. Any parser or module-format error must set `FAIL=1` or terminate with a nonzero exit status. 5. Run static validation in an isolated environment with no secrets and restricted filesystem and network access as defense in depth. 6. Add a regression test containing a harmless top-level side effect and verify that validation does not execute it. ]]>

T08 · Insecure Dependencies

Warning
Location
SKILL.md:126
Finding

CI workflow installs Playwright through an unpinned npx invocation

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • 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 (6)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description says this skill builds static landing pages with a specific design system and outputs HTML/CSS/JS. The supplied code does not generate pages or implement a design system; it is a QA/checking utility script meant to run before pushing changes. Its primary purpose is repository validation and enforcement of coding conventions, including cache-busting, color-token usage, JavaScript syntax checks, theme initialization, CTA contrast, and explicit data-theme handling. That is a materially different function from a static landing-page builder, so this is a clear mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description says this skill builds static landing pages with no framework dependencies. The supplied code does not generate HTML/CSS/JS pages at all. Instead, it is a Node.js validation utility that launches Chromium via Playwright, visits a live site, interacts with page controls, reads browser storage and computed styles, checks contrast and metadata, and returns a deployment validation result. That is a materially different primary purpose and introduces undeclared capabilities related to browser automation and live site testing.

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 23)May include surrounding context.

md
erate validation scripts** — adapt `references/pre-push-check-template.sh` and `references/validate-live-template.js` for the specific site (selectors, locales,

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest description says to use the skill when "building a website, landing page, marketing site, or product page," which is a very broad invocation scope for a markdown skill description. It does not provide clear trigger boundaries, exclusions, or negative examples, so the skill could be selected for many generic web-design requests beyond its intended design-system-specific use.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
81% confidence
Finding

The validation requirements mandate a "Language switcher" and require that "all locales" produce correct output, but the document never states that locale selection is user-chosen or optional. This can amount to a locale policy issue because the skill bakes in multilingual/locale behavior without documenting user opt-in or a justified region-specific constraint.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
93% confidence
Finding

The skill instructs use of npx playwright without pinning an exact package version, which allows whatever version is current at execution time to be fetched and run. In a CI or developer environment, this creates supply-chain and reproducibility risk because behavior can change unexpectedly or a compromised upstream release could execute arbitrary install-time or runtime code.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.