Back to skill

Security audit

Pulse Editor Vibe Coding APIs

Security checks for vulnerabilities and agentic risk

Overview

This skill is a documented helper for sending Pulse app-generation prompts to Pulse Editor's cloud API and receiving a published app, with no evidence of hidden execution, persistence, or credential theft.

Install/use this only if you are comfortable sending prompts and app-generation details to Pulse Editor and having generated apps published through that service. Use a dedicated Pulse Editor API key, avoid including secrets or private business data in prompts, run example dependency installs in an isolated project or virtual environment, and pin dependencies if you adapt the examples.

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

T08 · Insecure Dependencies

Warning
Location
SKILL.md:351
Finding

Unpinned Python Dependency Installation

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:351 and examples/generate_app.py:20
Vulnerability Type: Unpinned third-party dependency
Risk Level: Medium

Vulnerable Code

bash
pip install requests

The installed package is imported by the Python example:

python
import requests

Technical Analysis

The installation instructions retrieve the latest available requests package and its transitive dependencies without a version constraint, lockfile, or integrity hash. This prevents users from reproducing a previously reviewed dependency set.

The code does not install from an unknown registry, and no evidence shows that the current requests package is malicious. The risk is conditional: a future compromised release, registry account compromise, or malicious transitive dependency could cause users following the instructions to install code that was not included in this audit.

Python package installation can execute package build logic during installation. Imported package code also executes with the privileges of the Python process when the example runs.

Attack Path

  1. An attacker compromises a package release or one of its unpinned transitive dependencies.
  2. The attacker publishes a malicious version to the package registry.
  3. A user follows the documented pip install requests instruction after that release becomes current.
  4. pip downloads and installs the unreviewed release.
  5. Malicious build or import-time code executes with the installing or running user's privileges.

Impact Assessment

Successful exploitation could execute arbitrary code under the user's account. Depending on that account's permissions, an attacker could access project files, environment variables, local credentials, and network resources available to the process. This may include the PULSE_EDITOR_API_KEY environment variable used by the example. No privilege-escalation mechanism or pe ...[truncated 60 chars]

Remediation
View remediation

Remediation Suggestions

  • Pin requests and all transitive dependencies to reviewed versions in a requirements or lock file.
  • Use hash verification, such as a hash-locked requirements file installed with pip install --require-hashes.
  • Document installation inside a dedicated virtual environment rather than the user's global Python environment.
  • Add automated dependency scanning and controlled update review.
  • Prefer binary distributions from the intended package index where appropriate, and explicitly configure trusted registries.

T08 · Insecure Dependencies

Warning
Location
SKILL.md:364
Finding

Unnecessary and Unpinned Node.js Dependency Installation

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:364
Vulnerability Type: Unnecessary unpinned third-party dependency
Risk Level: Medium

Vulnerable Code

bash
npm install node-fetch

The included TypeScript example instead uses the runtime-provided fetch API directly:

typescript
const response = await fetch("/server-function/generate-code/v2/generate", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    prompt,
    appName,
    appId,
    version: appVersion,
  }),
});

Technical Analysis

The documentation instructs users to install the latest node-fetch package without a pinned version, lockfile, or integrity controls. The audited TSX example does not import node-fetch, so the installation does not appear necessary for the supplied implementation and exceeds the minimum dependency set required by that example.

npm package installation may execute lifecycle scripts from the selected package or its transitive dependencies. Adding an unused dependency unnecessarily expands the software supply-chain attack surface. There is no evidence that the current node-fetch package is malicious; exploitation depends on a compromised future release, dependency, registry account, or package-resolution environment.

Attack Path

  1. An attacker compromises node-fetch, one of its resolved dependencies, or the package-resolution environment.
  2. A malicious release or dependency is made available through the registry.
  3. A user follows the unpinned npm install node-fetch instruction.
  4. npm resolves and downloads the attacker-controlled package version.
  5. A lifecycle script or subsequently loaded package code executes with the user's privileges, even though the dependency is not needed by the included TSX example.

Impact Assessment

Successful exploitation could permit arbitrary code execution under the ...[truncated 324 chars]

Remediation
View remediation

Remediation Suggestions

  • Remove the npm install node-fetch instruction because the included TSX implementation uses native fetch.
  • If compatibility with a runtime lacking native fetch is required, state that requirement explicitly and pin a reviewed package version.
  • Commit and enforce a lockfile with integrity metadata.
  • Disable unnecessary npm lifecycle scripts where feasible, for example with npm install --ignore-scripts, after confirming compatibility.
  • Run package installation without administrative privileges and in an isolated project environment.
  • Add automated supply-chain scanning and require review before dependency updates.
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
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (8)

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 · examples/generate_app.py (reported line 238)May include surrounding context.

python
def main():
    # Get API key from environment variable
    api_key = os.environ.get("PULSE_EDITOR_API_KEY")
    
    if not api_key:

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding

The skill documents network access and use of environment-based secrets, but it declares no explicit tool scope or permissions. That creates an authorization gap where an agent may use broader capabilities than the user expects, especially because this skill can send prompts and generated code to an external service and trigger publishing.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The overview emphasizes convenience but does not clearly warn that user prompts and potentially sensitive app code are transmitted to a third-party cloud service and that generated apps are automatically published. This can cause unintended disclosure of confidential data or accidental public deployment because users may not realize the privacy and release implications.

Content

No source excerpt is available for this finding.

Whitespace Padding

Medium
Category
Prompt Injection
Confidence
70% confidence
Finding

Large whitespace padding was detected (a block of blank lines or a long run of spaces). This can push injected instructions below or to the right of the visible area so a human reviewer never sees them while the agent still reads them. Manual review of the hidden content is recommended.

Content

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

md
### Request Body Parameters

| Parameter | Type   | Required | Description                                                                                | Example                                       |
| --------- | ------ | -------- | ------------------------------------------------------------------------------------------ | --------------------------------------------- |
| `prompt`  | string | Yes      | The user prompt instructing the Vibe coding agent                                          | `"Create a todo app with auth and dark mode"` |
| `appName` | string | No       | Friendly display name for the app                                                          | `"My Todo App"`                               |

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

Example Usage

cURL Example

bash
curl -L 'https://pulse-editor.com/api/server-function/vibe_dev_flow/latest/generate-code/v2/generate' \

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

md
"appName": "My Todo App"
}

response = requests.post(url, json=payload, headers=headers, stream=True)

messages = {}  # Track messages by messageId
buffer = ""

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

JavaScript/Node.js Example

javascript
const response = await fetch(
  "https://pulse-editor.com/api/server-function/vibe_dev_flow/latest/generate-code/v2/generate",
  {
    method: "POST",

External Transmission

Medium
Category
Data Exfiltration
Confidence
80% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · examples/generate_app.py (reported line 140)May include surrounding context.

python
try:
        # Make streaming request
        response = requests.post(
            url,
            json=payload,
            headers=headers,

Static analysis

No suspicious patterns detected.