T09 · Insecure Skill Coding Practices
- Location
SKILL.md:354- Finding
Unredacted prompts and model outputs transmitted to OpenRouter
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This appears to be a legitimate GCP automation skill, but it combines broad live cloud/CDN authority with under-disclosed external LLM evaluation and several unsafe default examples.
Install only if you are comfortable with an agent that can scaffold code, install packages, run tests, deploy to GCP, and alter Cloudflare/DNS settings. Treat OpenRouter-based QA as external data sharing, review or disable it for sensitive projects, pin package versions before running scaffolding commands, and require explicit confirmation before production deploys, database changes, public endpoints, IAM changes, or destructive tests.
SKILL.md:354Unredacted prompts and model outputs transmitted to OpenRouter
docs/01-scaffolding.md:11Unpinned packages are downloaded and executed during project scaffolding
docs/03-database.md:56Firestore profile creation rule permits cross-user document creation
docs/03-database.md:125Cloud SQL password is passed through the command line
The file claims listed credentials are never used for direct API calls, but later provides a template that sends OPENROUTER_API_KEY in an outbound fetch request to OpenRouter. This contradiction is dangerous because users may trust the credential-handling statement and unknowingly allow external transmission of prompts and potentially sensitive generated content under false assumptions.
Model output is used without validation or sanitization. Unvalidated output injected into downstream contexts (SQL, shell, HTML) enables injection attacks and arbitrary code execution.
}
if (config.forbiddenPatterns) {
for (const p of config.forbiddenPatterns) {
const match = p.exec(output.content);
results.push({ rule: `forbidden:${p.source}`, passed: !match,
details: match ? `Found: "${match[0]}"` : "Clean" });
}
The skill is user-invocable and framed as handling the entire GCP development lifecycle, which is broad enough to match many ordinary requests and trigger powerful actions with weak boundaries. In an agent setting, overbroad activation increases the chance of unintended scaffolding, cloud operations, file modification, or deployment in response to ambiguous prompts.
The skill advertises code generation, testing, deployment orchestration, and Cloudflare/GCP changes without a prominent user-facing warning that these actions can modify local files and live infrastructure. In this context, missing warnings are risky because the skill is designed for high-impact operational tasks and could be invoked by users who do not expect side effects.
The migration guide states that pre-production validation was extracted into a dedicated qa-gate-gcp skill, implying this skill no longer owns that capability. Later sections reintroduce a full QA gate workflow, generated validation tests, and go/no-go reporting as active responsibilities of gcp-fullstack, creating a semantic mismatch about the skill's actual scope.
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
The OpenRouter fetch sends prompt and output content, along with authorization derived from OPENROUTER_API_KEY, to an external service. In a QA workflow for arbitrary applications, this can expose proprietary code, user content, secrets, or sensitive business data unless the payload is minimized and redacted first.
return { overall_score: 0, issues: ["OPENROUTER_API_KEY not set — skipping"], recommendation: "review" };
}
const response = await fetch("https://openrouter.ai/api/v1/chat/completions", {
method: "POST",
headers: { Authorization: `Bearer ${OPENROUTER_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
Also generate `qa-reports/go-no-go-report.md` (human-readable version).
NEVER auto-deploy after a CONDITIONAL or NO-GO verdict. NEVER delete test data from production databases. Redact API keys from reports before writing to disk.
The manifest description advertises a very broad 'super agent' that spans scaffolding, cloud provisioning, authentication, deployment, CDN/security, and monitoring, but it provides no narrowing activation conditions, safety boundaries, or explicit exclusions. In a skill that also requests filesystem and network permissions plus access to cloud and CDN credentials, this ambiguity increases the chance the agent is invoked for overly broad or sensitive operations without clear user intent verification.
The scaffolding instructions invoke remote package executables via npx using the moving @latest tag, which causes unreviewed code to be fetched and executed at runtime. If an upstream package is compromised or a breaking release is published, users following the skill may execute attacker-controlled code on their workstation or CI environment.
This instruction runs nuxi through npx with @latest, which downloads and executes whichever version is current at the time the skill is used. That creates a supply-chain risk because the executed bootstrap code is not fixed, reviewed, or reproducible, and a compromised or malicious upstream release could run arbitrary code.
Using npx sv create without an exact version means the skill directs users to execute mutable remote code during project setup. In a high-automation scaffolding context, this increases exposure to supply-chain compromise and makes builds non-reproducible.
The create-remix scaffolding command is executed through npx with @latest, so the exact code run is uncontrolled and may change over time. If the upstream package or dependency chain is compromised, the initialization step could execute arbitrary code and alter generated project files.
The create-astro command uses npx with @latest, which instructs users to fetch and run the newest remote package version without prior validation. That exposes developers to supply-chain attacks and unpredictable behavior during bootstrap, especially when this skill is used repeatedly across environments.
The Cloud Run deployment example includes --allow-unauthenticated, which makes the service publicly reachable, but the documentation does not clearly warn readers that this exposes the endpoint to the internet. In a "fullstack super agent" skill intended to scaffold and deploy production workloads, this can lead users to unintentionally publish internal/admin or partially secured services.
The HTTP Cloud Functions example also uses --allow-unauthenticated without explaining that anyone on the internet can invoke the function. For webhook/API patterns, this is especially risky because users may copy the command for handlers that process sensitive data or trigger privileged backend actions, resulting in unintended public exposure.
This markdown file includes code that accesses sensitive credentials via environment variables, including a private key, but the surrounding documentation does not warn the user about handling secrets safely. Under the markdown-file criteria for SQP-2, examples that affect privacy or credential security should include a clear warning or disclosure.
The documentation tells users to execute npx firebase without pinning an exact package version, which can pull whatever version is current at execution time. This creates a supply-chain and reproducibility risk: a compromised, malicious, or breaking upstream release could be fetched and run in the user's environment.
Using npx firebase without a pinned version allows arbitrary latest code from the package registry to be downloaded and executed at runtime. In a deployment-oriented skill, this is especially risky because the command may run with developer credentials and modify production Firebase resources.
npx prisma generate without version pinning can execute whichever Prisma package version is resolved at the time, undermining build integrity and reproducibility. If the upstream package or dependency chain is compromised, the generated client step becomes an arbitrary code execution vector in the developer or CI environment.
npx prisma db push executes an unpinned CLI that may change behavior across releases or run compromised upstream code. Because this command directly affects the database schema, exploitation or accidental drift could impact data integrity in addition to supply-chain exposure.
npx prisma migrate dev is another unpinned package execution point, exposing the user to dependency substitution, malicious releases, or unexpected version behavior. In a database migration context, this can lead to unauthorized code execution and unintended schema modifications.
The skill instructs the agent to implement a complete feature 'autonomously' including schema changes, API routes, auth-related logic, and write operations, but it does not require warning the user or obtaining confirmation before making impactful code or data-model changes. In a high-privilege full-stack/GCP automation skill, that omission increases the chance of unintended database mutations, privilege-affecting auth changes, or broad code changes being applied without informed user consent.
The E2E example performs create and delete operations after logging in, but it does not require a dedicated test environment, seeded fixture account, or explicit warning against running against production-like systems. In this skill's GCP full-stack context, these steps can mutate real cloud-backed data and cause accidental data loss or unauthorized changes if pointed at the wrong environment.
The full-suite commands encourage running Vitest and Playwright without warning that tests may invoke state-changing operations in connected services. Given the preceding destructive E2E examples and the skill's cloud deployment scope, an agent or user could unintentionally execute writes, deletions, or billable actions against non-test environments.
No suspicious patterns detected.