Back to skill

Security audit

Springboot Vue Builder

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent Spring Boot and Vue project workflow, but it asks users to paste privileged secrets into chat and writes them into plaintext project config.

Review before installing. Do not paste real root passwords, production database credentials, API keys, private keys, or payment secrets into this workflow. Use a least-privilege database user and environment-variable placeholders or a secret manager instead, and confirm any local commands before allowing the generated project to run.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:48
Finding

Privileged credentials are collected through conversation and stored in plaintext configuration

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 48-54 and line 391
Vulnerability Type: Plaintext collection and storage of sensitive credentials
Risk Level: High

Relevant instructions, translated into English:

text
3. Collect MySQL information
   - Ask: "Please provide your MySQL root password. I will write it into the configuration file."

4. Ask about optional components
   - AI conversation: "Do you need to integrate AI conversation functionality using Alibaba Cloud Qwen qwen-plus?"
     - If yes, continue asking: "Please provide the DashScope API Key you obtained from the Alibaba Cloud Bailian platform."
text
1. Do not hardcode API keys: Put sensitive information such as the Alibaba Cloud DashScope API Key and MySQL password in application.yml, and add it to .gitignore.

Technical Analysis

The skill explicitly instructs the agent to request a MySQL root password and a DashScope API key through the conversation. It then directs the generated project to place these credentials in application.yml.

This creates two related security weaknesses:

  1. Sensitive credentials are disclosed to the agent and conversation infrastructure. Credentials submitted in chat may be retained in conversation history, application telemetry, model-provider logs, exports, or backups.
  2. Credentials are stored as plaintext project files. Adding a file to .gitignore only prevents ordinary Git tracking. It does not encrypt the file or prevent disclosure through archives, backups, logs, misconfigured repositories, local filesystem access, IDE synchronization, or accidental sharing.
  3. The requested database privilege is excessive. A Spring Boot application ordinarily needs access only to its own schema and required operations. A MySQL root account grants substantially broader administrative control than the application requires.

Although the skill says not to hardcode secrets, ...[truncated 2416 chars]

Remediation
View remediation

Remediation Suggestions

  1. Do not request secrets through conversation

    • Ask users only for non-sensitive identifiers such as a database host, port, schema name, and environment-variable names.
    • Instruct users to inject secret values locally without sending them to the agent.
    • Explicitly warn users not to paste passwords, private keys, access tokens, or API keys into chat.
  2. Replace the MySQL root account with a dedicated application account

    • Create a separate user for the generated application.
    • Restrict the account to the application's schema.
    • Grant only required operations, such as SELECT, INSERT, UPDATE, and DELETE.
    • Grant migration privileges separately and only when migrations are being performed.
    • Apply source-host restrictions and require encrypted database connections where supported.
  3. Use environment-variable placeholders

    • Configuration committed to the project should contain references rather than real secrets:

      yaml
      spring:
        datasource:
          username: ${DB_USERNAME}
          password: ${DB_PASSWORD}
      
      dashscope:
        api-key: ${DASHSCOPE_API_KEY}
      
  4. Use a supported secret manager in deployed environments

    • Store production credentials in a platform secret store such as Kubernetes Secrets with appropriate encryption controls, Docker secrets, a cloud secret manager, or a dedicated vault.
    • Limit access to the runtime service identity that requires each secret.
    • Enable audit logging, expiration, and automated rotation where available.
  5. Harden local-development handling

    • Supply a redacted .env.example containing placeholder names only.
    • Exclude actual .env files and local secret-bearing configuration from version control and generated archives.
    • Restrict filesystem permissions on local secret files.
    • Ensure startup and error logs do not print resolved confi ...[truncated 634 chars]
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (8)

Vague Triggers

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The instruction to use this skill whenever generic keywords appear is especially risky because it mandates activation without validating user intent. In context, that is more dangerous than a normal routing issue because the skill quickly solicits secrets and orchestrates other capabilities, amplifying the consequences of accidental invocation.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill requests highly sensitive credentials with no privacy notice, no secure-handling guidance, and no safer alternative. In this context, the absence of warnings is materially dangerous because users may paste production-grade secrets into a conversational interface, unaware they could persist in logs, artifacts, or other tools.

Content

No source excerpt is available for this finding.

Ssd 3

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The workflow instructs the agent to solicit and handle high-sensitivity secrets directly in natural-language interaction, including a database root password and API key. This is dangerous because chat-based secret handling is hard to contain: the secrets can be retained in history, passed to subskills, surfaced in generated content, or exposed to anyone with transcript access.

Content

No source excerpt is available for this finding.

Ssd 3

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill not only collects secrets but explicitly carries them into later phases and configuration artifacts, telling the workflow to use the collected password/API key during implementation. That creates a high-likelihood path for credential propagation into files, logs, prompts, subskills, and possibly version control, making the context significantly more dangerous than a simple one-time request.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The trigger condition is broad and keyword-driven, so the skill may activate in conversations that only loosely mention 'new project', 'full stack', 'SpringBoot', or 'Vue'. Because this skill subsequently requests sensitive credentials and can steer the workflow into multiple downstream tools, overbroad invocation increases the chance of inappropriate data collection and unintended execution paths.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill explicitly asks users to disclose a MySQL root password and DashScope API key to the agent during a general project-orchestration workflow. Collecting high-value secrets in chat and reusing them later unnecessarily expands secret exposure to logs, transcripts, downstream tools, and generated files, which is unsafe even if the stated purpose is configuration.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The documentation repeatedly describes the skill as an orchestrator that loads other skills rather than directly performing implementation work. Phase 5 goes beyond coordination by instructing execution of local commands to run Maven and npm development servers, introducing an operational command-execution capability not clearly justified by the declared workflow-orchestration purpose.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The thesis-writing phase specifies that the paper will be a Chinese graduation/technical thesis and sets the language to Chinese, but does not offer the user a language choice. This imposes a locale/language constraint without opt-in, which matches the language policy violation criteria.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.