Back to skill

Security audit

app-maker

Security checks for vulnerabilities and agentic risk

Overview

This app-generation skill is not clearly malicious, but it needs review because it handles API keys, external model calls, package execution, deployment, and model-generated file writes with weak safeguards.

Review before installing. Prefer environment variables or a secret manager over plaintext API keys, never publish screenshots showing real keys, pin and verify package commands, run generation in an isolated directory, inspect generated files and package.json before npm install, and deploy only after confirming the target account, costs, and public exposure.

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

T09 · Insecure Skill Coding Practices

Error
Location
scripts/app_builder.py:261
Finding

LLM-Controlled Filenames Permit Writes Outside the Generated Project Directories

Content
View full analysis
Remediation
View remediation
Path: if not isinstance(filename, str) or not filename: raise ValueError("Invalid generated filename") relative = Path(filename) if relative.is_absolute() or ".." in relative.parts: raise ValueError(f"Unsafe generated filename: {filename}") resolved_base = base.resolve() destination = (resolved_base / relative).resolve() if destination != resolved_base and resolved_base not in destination.parents: raise ValueError(f"Generated path escapes output directory: {filename}") return destination ``` 4. Use an explicit allowlist of expected output files and permitted extensions. 5. Refuse to follow existing symlinks in the output tree and create files using safe, exclusive filesystem operations where practical. 6. Validate that all returned values are strings before writing them. 7. Generate into a fresh, isolated directory with restrictive permissions. 8. Display generated manifests and scripts for review before execution. 9. Recommend `npm install --ignore-scripts` for initial inspection, followed by dependency and lifecycle-script review. 10. Add tests covering `../`, absolute paths, Windows drive paths, mixed separators, encoded traversal, and symlink escapes. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/app_builder.py:58
Finding

Model API Keys Are Stored in Plaintext Without Enforced Owner-Only Permissions

Content
View full analysis
Dict: """加载配置文件""" if self.config_path.exists(): with open(self.config_path, 'r', encoding='utf-8') as f: return json.load(f) return self.DEFAULT_CONFIG.copy() def save_config(self): """保存配置文件""" self.config_path.parent.mkdir(parents=True, exist_ok=True) with open(self.config_path, 'w', encoding='utf-8') as f: json.dump(self.config, f, indent=2, ensure_ascii=False) def get_model(self, name: Optional[str] = None) -> Dict: """获取模型配置""" if name is None: name = self.config.get("default", "claude-code") return self.config["models"].get(name, self.config["models"]["claude-code"]) def get_api_key(self, model_name: str) -> Optional[str]: """获取模型 API Key""" model = self.config["models"].get(model_name, {}) return model.get("apiKey") or os.environ.get(f"{model_name.upper()}_API_KEY") ``` The setup guide explicitly directs users to place live credentials in the file: ```json { "default": "claude-code", "models": { "claude-code": { "apiKey": "sk-ant-your-actual-key-here" }, "qwen": { "apiKey": "sk-your-actual-key-here" } } } ``` ### Technical Analysis The Skill supports reading API keys directly from `~/.config/app-maker/models.json`, and `save_config` serializes the complete configuration in plaintext. Neither directory creation nor file creation explicitly enforces owner-only permissions. ...[truncated 1671 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
QUICKSTART.md:5
Finding

Setup Instructions Execute Unpinned and Ambiguously Named Third-Party Packages

Content
View full analysis
=0.24.0` in `package.json`, lines 35–40. ### Vulnerable Code ```bash ### 1. Install Dependencies ```bash # Python dependencies pip install httpx openpyxl # Node.js dependencies (for generated projects) npm install -g vercel ``` ``` Additional documented commands include: ```bash npx app-builder init my-app npx app-builder create npx app-builder plugin install @app-builder/tailwind ``` The package metadata identifies this project as `@clawhub/app-maker`, whereas the documentation repeatedly executes `app-builder`. The audit did not establish that these registry identities refer to the same trusted package. ### Technical Analysis The setup process installs packages without exact versions, lockfiles, integrity hashes, or isolated environments. `npx` may download and execute a package directly from a registry when it is not already installed locally. A global Vercel installation also modifies the user's shared tool environment. The mismatch between the documented `app-builder` command and the package metadata name `@clawhub/app-maker` introduces package-identity ambiguity. This increases exposure to dependency confusion, typosquatting, namespace mistakes, or an unrelated package being executed. The generated application workflow further instructs users to run `npm install` against a model-generated manifest. Because npm packages can define lifecycle scripts, dependency installation may execute code before the generated project has been reviewed. ### Attack Path 1. A user copies an installation command from the documentation. 2. The package manager resolves the current registry version of an unpinned package, or ` ...[truncated 1543 chars]
Remediation
View remediation
Vulnerability Patterns
  • 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
  • Rogue AgentSelf-Modification, Session Persistence
Findings (64)

Ssd 3

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The file does not merely omit a warning; it specifically asks for a screenshot of '~/.config/app-maker/models.json' and to highlight the API key configuration section. In the context of a screenshot/upload guide, this materially increases the likelihood that secrets will be exposed to third parties via documentation, ClawHub uploads, or source control.

Content

No source excerpt is available for this finding.

External Model or Provider Selection

High
Category
Excessive Agency
Confidence
90% confidence
Finding

The skill explicitly supports switching to external model providers such as Gemini, which can cause user prompts, source code, architecture documents, and possibly secrets to be transmitted to third-party services. Without strong disclosure, consent, provider-specific data handling notes, and controls, users may unintentionally exfiltrate proprietary or regulated data outside their trust boundary. In this skill, model selection directly affects code generation workflows, so sensitive project contents are likely to be sent upstream.

Content

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

npx app-builder config set default-model qwen

临时使用其他模型

npx app-builder generate "..." --model gemini

text

### Q: 如何自定义生成的代码风格?

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

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

Content

Scanner excerpt · scripts/app_builder.py (reported line 285)May include surrounding context.

python
gitignore = """
node_modules/
dist/
.env
.env.local
*.log
.DS_Store

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

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

Content

Scanner excerpt · scripts/app_builder.py (reported line 286)May include surrounding context.

python
node_modules/
dist/
.env
.env.local
*.log
.DS_Store
coverage/

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · DEMO_VIDEO.md (reported line 34)May include surrounding context.

md
**Visual:** Split screen showing traditional development vs. App Maker

**Script:**
> "Traditional app development takes weeks. You need to write requirements, design UIs, set up databases, code frontend and backend, test, and deploy. Each step requires different skills and tools. App Maker automates all of this using AI."

**On-screen text:** 
- Traditional: 2-4 weeks

Rp1

Medium
Category
MCP Rug Pull
Confidence
93% confidence
Finding

The demo instructs users to run npx skills add app-maker without pinning an exact package/version, which can pull whatever package is current at execution time. That increases supply-chain risk because a compromised or newly published version could execute attacker-controlled install logic on the user's machine.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The script tells users to open the model configuration and highlight API key configuration, but provides no guidance on secret handling. In a demo context this can normalize exposing credentials on screen, storing them insecurely, or checking them into files that may later be shared.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

The deployment section promotes one-command production deployment without warning about cloud costs, credential use, environment targeting, or unintended publication of generated code/services. Users may deploy unsafe or unreviewed applications directly to public infrastructure.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
93% confidence
Finding

This quick-demo installation command again uses npx skills add app-maker without a pinned version, creating the same time-of-use supply-chain exposure. Viewers following the video may execute whatever code is served by the registry at that moment.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
93% confidence
Finding

The video description repeats an unpinned npx skills add app-maker install command, extending the supply-chain risk into copy-pasteable published content. Because descriptions are often used directly by viewers, this increases the likelihood of unsafe execution.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The guide tells users to place live API keys into a local JSON config file but provides no warning about credential sensitivity, file permissions, accidental commits, or secret rotation. In a code-generation/deployment workflow, users may copy this file into projects, logs, backups, or shared environments, increasing the chance of credential exposure and downstream account abuse.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
82% confidence
Finding

Persisting API keys in ~/.config/app-maker/models.json creates long-lived local credential storage without any documented protections. While local config storage is common, the absence of guidance on access control, encryption, or lifecycle management makes credential theft via local compromise, backups, or accidental sharing more likely.

Content

Scanner excerpt · QUICKSTART.md (reported line 17)May include surrounding context.

2. Configure Model API Keys

Create config file ~/.config/app-maker/models.json:

bash
mkdir -p ~/.config/app-maker

Rp1

Medium
Category
MCP Rug Pull
Confidence
93% confidence
Finding

The quick start instructs users to run npx vercel without pinning a specific version, which can fetch and execute whatever package version is current at runtime. This creates a supply-chain risk: a compromised upstream release or typo-resolved package could execute arbitrary code on the user's machine during deployment.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The README advertises deployment and plugin installation capabilities but does not warn users that these actions can modify systems, create cloud resources, incur charges, or expose services publicly. This omission can lead users to trigger impactful operations without informed consent, especially in an AI-assisted automation tool that emphasizes speed and one-click workflows.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
91% confidence
Finding

The README instructs users to run npx skills add app-maker without pinning an exact package version. npx resolves and executes the latest published package by default, so a compromised maintainer account, typosquatted dependency, or malicious upstream release could result in arbitrary code execution on the user's system. In a skill whose purpose is automation and code generation, users are especially likely to copy-paste commands directly, which increases practical risk.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · README.md (reported line 77)May include surrounding context.

Configuration

bash
# Create config directory
mkdir -p ~/.config/app-maker

# Copy example config

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

The plugin creation command uses npx app-maker without a pinned version, which allows execution of whatever version is currently published. If the package or one of its install-time dependencies is malicious or compromised, the command can execute attacker-controlled code locally. Because this is part of a plugin workflow, it may also normalize repeated trust in unaudited package execution.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

The plugin installation example again invokes npx app-maker without version pinning, exposing users to supply-chain risk and arbitrary code execution from future package changes. In context, this is more dangerous because it is tied to installing plugins, which already expands the trusted code surface and may lead users to accept execution of external packages without scrutiny.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The screenshot guide explicitly instructs the user to open the model configuration file and highlight the API key configuration section in a screenshot. This creates a direct risk of credential disclosure through published images, repository commits, or marketplace uploads, especially because there is no instruction to redact or use dummy values.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill advertises end-to-end project generation, debugging, and one-click deployment but does not give an explicit warning that it may create/modify files or deploy artifacts to external platforms. Users could invoke it without understanding that local repositories, cloud resources, or public endpoints may be changed. In a tool with broad automation powers, missing consent and scope warnings materially increase operational and security risk.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The API key setup section shows credential fields and CLI commands for setting keys but does not warn about secure storage, exposure in shell history, or accidental inclusion in config files and repositories. Users may paste secrets directly into commands or config files, leading to leakage through process listings, terminal logs, backups, or version control. Because the skill integrates multiple external providers, compromise of these keys could grant paid API access and access to submitted data.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The debugging and network-monitoring section promotes previews, logs, request inspection, and error tracing without warning that these features can expose sensitive application data, tokens, personal data, or internal endpoints. In practice, preview links and debug consoles often surface request/response bodies and runtime state that should not be broadly shared. Given this skill's full-stack and deployment focus, such leakage can affect both development and production-like data.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding

The documentation instructs users to run npx app-builder without pinning a specific package version. This allows whatever version is currently published to the registry to be fetched and executed, creating supply-chain risk if the package is updated maliciously or unexpectedly. Because this skill is centered on code generation, debugging, and deployment, users are likely to run these commands with access to source code, credentials, and deployment environments, increasing the blast radius.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding

The skill references npx app-builder without a pinned version, which means users may execute unreviewed code pulled at runtime from the package registry. If the package is compromised or a breaking update is released, the command can run attacker-controlled code on the user's machine. In this skill's context, that code may gain access to generated projects and local configuration.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding

Using npx app-builder without version pinning exposes users to supply-chain execution risk. The resolved package can change over time, so the command may execute code different from what the skill author intended or reviewed. Since this command generates application code, it may run in developer environments containing secrets and repository access.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.