Back to skill

Security audit

Develop and Deploy Web App

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly does what it says, but it exposes generated apps publicly with weak default security and passes the agent environment into long-running app processes.

Install only if you are comfortable with generated demo apps being reachable on public port 33333. Treat the default scaffold as suitable for disposable demo data until you add authentication, escape user-controlled metadata, and restrict which environment variables child processes receive.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
scripts/scaffold-app.js:151
Finding

Stored HTML and Script Injection Through the Generated Application Title

Content
View full analysis
${title} ``` The title originates from an unrestricted command-line argument: ```js const title = args.title || "Web App"; ... const meta = { userName, token, title, goal, designSummary, ``` ### Technical Analysis `init-app.js` accepts an arbitrary `--title` value and stores it in application metadata without HTML validation or output encoding. `scaffold-app.js` subsequently interpolates that value directly into the generated `client/index.html`. An attacker-controlled title can close the existing `` element and inject additional markup, including a script element or another executable browser construct. For example, a title structurally equivalent to: ```html ``` would be embedded into the generated HTML document. Because the generated application is intended to be exposed through a public URL, the injected code would execute in the application origin when another user opens the page. This is a stored injection issue: the malicious input is persisted in `APP-META.json`, used during scaffolding, and delivered to every visitor of the generated frontend. ### Attack Path 1. An attacker influences the application title supplied to `init-app.js`, such as through a user request that becomes the `--title` argument. 2. `init-app.js` accepts and stores the title without escaping or markup validation. 3. `scaffold-app.js` reads the stored metadata and inserts the title into `client/index.html`. 4. The generated appl ...[truncated 970 chars]
Remediation
View remediation
`, `"`, and `'`. - Prefer generating a static safe title and setting the user-provided title through a text-only API such as `document.title`, with the value serialized safely by `JSON.stringify`. - Validate title length and reject control characters, null bytes, and markup when markup is not a legitimate title feature. - Apply contextual output encoding to every other metadata field used in generated HTML, Markdown, JavaScript, or configuration files. - Add automated tests using payloads that attempt to break out of the `` element. - Consider a restrictive Content Security Policy as defense in depth, while retaining output encoding as the primary fix. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
scripts/scaffold-app.js:591
Finding

Publicly Exposed CRUD API Has No Authentication or Authorization

Content
View full analysis
{ res.json({ ok: true, token, basePath }); }); app.get(\`\${apiBase}/todos\`, (_req, res) => { const items = db.prepare("SELECT id, title, done, created_at as createdAt FROM todos ORDER BY id DESC").all(); res.json({ items }); }); app.post(\`\${apiBase}/todos\`, (req, res) => { const title = String(req.body?.title || "").trim(); if (!title) { res.status(400).json({ error: "title is required" }); return; } const result = db.prepare("INSERT INTO todos (title) VALUES (?)").run(title); res.status(201).json({ id: result.lastInsertRowid }); }); app.patch(\`\${apiBase}/todos/:id\`, (req, res) => { const id = Number(req.params.id); const done = req.body?.done ? 1 : 0; db.prepare("UPDATE todos SET done = ? WHERE id = ?").run(done, id); res.json({ ok: true }); }); app.delete(\`\${apiBase}/todos/:id\`, (req, res) => { const id = Number(req.params.id); db.prepare("DELETE FROM todos WHERE id = ?").run(id); res.status(204).end(); }); ``` The shared host makes these routes reachable on all network interfaces: ```js const server = http.createServer(async (req, res) => { // Route resolution and proxying omitted }); server.listen(SHARED_PUBLIC_PORT, "0.0.0.0"); ``` ### Technical Analysis The eight-character token is used solely as a routing segment. It is not validated as an authenticated session, bound to a user identity, or checked by authorization middleware. Any client that knows or obtains the application URL can invoke all generated read, create, update, and delete operations. ...[truncated 1824 chars]
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
scripts/start-app.js:286
Finding

Generated Application Processes Inherit the Agent's Entire Environment

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
scripts/stop-app.js:94
Finding

Stop Workflow Can Fail Due to Temporal Dead Zone Reference

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • System Prompt LeakageDirect Leakage, Indirect Extraction, Tool-Based Exfiltration
  • 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
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (48)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

Registry modification tied to ownership/token validation is an administrative capability that affects discoverability and potentially routing of deployed apps. Misuse could hide, reassign, or alter app records in ways users do not expect from a simple scaffolding skill.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

Registry modification tied to ownership/token validation is an administrative capability that affects discoverability and potentially routing of deployed apps. Misuse could hide, reassign, or alter app records in ways users do not expect from a simple scaffolding skill.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

Registry modification tied to ownership/token validation is an administrative capability that affects discoverability and potentially routing of deployed apps. Misuse could hide, reassign, or alter app records in ways users do not expect from a simple scaffolding skill.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

Registry modification tied to ownership/token validation is an administrative capability that affects discoverability and potentially routing of deployed apps. Misuse could hide, reassign, or alter app records in ways users do not expect from a simple scaffolding skill.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

Registry modification tied to ownership/token validation is an administrative capability that affects discoverability and potentially routing of deployed apps. Misuse could hide, reassign, or alter app records in ways users do not expect from a simple scaffolding skill.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

Registry modification tied to ownership/token validation is an administrative capability that affects discoverability and potentially routing of deployed apps. Misuse could hide, reassign, or alter app records in ways users do not expect from a simple scaffolding skill.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

Registry modification tied to ownership/token validation is an administrative capability that affects discoverability and potentially routing of deployed apps. Misuse could hide, reassign, or alter app records in ways users do not expect from a simple scaffolding skill.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

Registry modification tied to ownership/token validation is an administrative capability that affects discoverability and potentially routing of deployed apps. Misuse could hide, reassign, or alter app records in ways users do not expect from a simple scaffolding skill.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

Registry modification tied to ownership/token validation is an administrative capability that affects discoverability and potentially routing of deployed apps. Misuse could hide, reassign, or alter app records in ways users do not expect from a simple scaffolding skill.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
89% confidence
Finding

Registry modification tied to ownership/token validation is an administrative capability that affects discoverability and potentially routing of deployed apps. Misuse could hide, reassign, or alter app records in ways users do not expect from a simple scaffolding skill.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

Registry modification tied to ownership/token validation is an administrative capability that affects discoverability and potentially routing of deployed apps. Misuse could hide, reassign, or alter app records in ways users do not expect from a simple scaffolding skill.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

Registry modification tied to ownership/token validation is an administrative capability that affects discoverability and potentially routing of deployed apps. Misuse could hide, reassign, or alter app records in ways users do not expect from a simple scaffolding skill.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

Registry modification tied to ownership/token validation is an administrative capability that affects discoverability and potentially routing of deployed apps. Misuse could hide, reassign, or alter app records in ways users do not expect from a simple scaffolding skill.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

Registry modification tied to ownership/token validation is an administrative capability that affects discoverability and potentially routing of deployed apps. Misuse could hide, reassign, or alter app records in ways users do not expect from a simple scaffolding skill.

Content

No source excerpt is available for this finding.

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

md
- Treat `{token}` as an 8-character random identifier made only of uppercase letters and digits.
- Ensure every new `{token}` is globally unique across all generated apps.
- If `userName` is available in the runtime context, use it directly. If it is not discoverable from the environment or user request, ask the user before scaffolding.
- Do not scaffold the app at the repository root unless the user explicitly overrides the output rule.
- Treat `{token}` as both the folder name and the URL segment.
- Run each web app in its own isolated Node.js process.
- Use one shared LiteApp host on public port `33333` to route `/{token}/...` traffic to the correct app process.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
3. Initialize the app folder and base app documents with `scripts/init-app.js`.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
3. Initialize the app folder and base app documents with `scripts/init-app.js`.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
7. Scaffold the actual project files with `scripts/scaffold-app.js`.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
8. Sync app documentation with `scripts/sync-docs.js`.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
8. Sync app documentation with `scripts/sync-docs.js`.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
8. Sync app documentation with `scripts/sync-docs.js`.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
9. Prefer `scripts/deploy-app.js` for ordered deployment. It installs dependencies, builds the app, starts it, syncs docs, and updates the registry without race

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
10. If deployment steps are run separately, run them in order: `install-app.js` -> `build-app.js` -> `start-app.js` -> `sync-docs.js` -> `update-registry.js`.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
10. If deployment steps are run separately, run them in order: `install-app.js` -> `build-app.js` -> `start-app.js` -> `sync-docs.js` -> `update-registry.js`.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
10. If deployment steps are run separately, run them in order: `install-app.js` -> `build-app.js` -> `start-app.js` -> `sync-docs.js` -> `update-registry.js`.