Versioned security assessment

Report ID: SA-3E4B6C31

7/9/2026, 8:57:49 AM

environment-setup security assessment v5

Skill Security Certification Report

Audit History
Audit model: codex Historical report
Skill name
environment-setup
Version
v5
Maintainer
supercent-io
Coverage
2 Files scanned · 378 Lines analyzed
Policy version
Unavailable

Highest confirmed finding severity

High

21 confirmed security findings require attention.

Installation context

Historical evidence

This report may not describe the currently installable artifact. Open the current Skill page for install guidance.

Open current Skill page

This report does not block or authorize the manifest or ZIP.

Most command, network, and role-token alerts are false positives caused by Markdown fences, reference links, SMTP field names, or normal YAML variable names. The confirmed risk is sensitive environment management: the skill is designed to create or edit .env-related data and includes credential, secret key, and connection-string examples. No malicious exfiltration instructions or prompt-injection attempts were found.

Report position

Historical report

Open audit history before using this report to install.

Audit attestation

Not attestable

The required immutable binding is incomplete.

Human verification

Not verified

No human verification is recorded for this report.

Coverage

2 Files scanned · 378 Lines analyzed

46 items shown for review

Limitations

This report does not claim runtime or sandbox execution and does not prove the absence of side effects.

Evidence chain

Follow the evidence from source binding to the install contract. Available evidence supports verification; it is not a safety guarantee.

  1. Source

    Binding unavailable

  2. Artifact

    Identity incomplete

  3. Audit

    Complete

  4. Install contract

    Open manifest to verify

    Open manifest

Capabilities observed

Observed means this report recorded supporting evidence. Not recorded does not prove that a capability is absent.

Contains scripts

May execute code included with the Skill.

Not recorded by this audit

Network access

May connect to external services.

Observed in 14 evidence locations

Filesystem access

May read or write local files.

Not recorded by this audit

Env variables

May read values from the process environment.

Observed in 36 evidence locations

External commands

May invoke commands or programs outside the Skill.

Observed in 27 evidence locations

Capability review items (25)
High
AWS credential environment variables
AWS_ACCESS_KEY_ID=AKIAXXXXXXXX
The template includes AWS credential variable names with key-like placeholders. Even as examples, these are secret-bearing fields that can be mishandled if copied.
High
AWS credential environment variables
AWS_SECRET_ACCESS_KEY=xxxxxxxx
The template includes AWS credential variable names with key-like placeholders. Even as examples, these are secret-bearing fields that can be mishandled if copied.
High
Database connection strings
DATABASE_URL=postgresql://user:password@localhost:5432/myapp
The example defines or references database connection strings that may include credentials. The placeholders are not live secrets, but the skill handles secret-bearing values.
High
Database connection strings
DATABASE_URL=postgresql://localhost:5432/myapp_dev
The example defines or references database connection strings that may include credentials. The placeholders are not live secrets, but the skill handles secret-bearing values.
High
Database connection strings
DATABASE_URL=${DATABASE_URL} # Injected from environment variables
The example defines or references database connection strings that may include credentials. The placeholders are not live secrets, but the skill handles secret-bearing values.
High
Database connection strings
DATABASE_URL: z.string().url(),
The example validates or requires DATABASE_URL, which often contains credentials. It is legitimate configuration code, but it handles a secret-bearing connection string.
High
Database connection strings
// console.log(env.DATABASE_URL); // Type-safe!
The example suggests printing env.DATABASE_URL, which can expose credentials embedded in a database connection string. This is a real leakage risk if copied.
High
Database connection strings
url: process.env.DATABASE_URL!,
The example defines or references database connection strings that may include credentials. The placeholders are not live secrets, but the skill handles secret-bearing values.
High
Database connection strings
'DATABASE_URL',
The example validates or requires DATABASE_URL, which often contains credentials. It is legitimate configuration code, but it handles a secret-bearing connection string.
High
Database connection strings
- DATABASE_URL=postgresql://postgres:password@db:5432/myapp
The example defines or references database connection strings that may include credentials. The placeholders are not live secrets, but the skill handles secret-bearing values.
High
Generic API/secret keys
STRIPE_SECRET_KEY=sk_test_xxx
The example defines or validates STRIPE_SECRET_KEY, a secret-bearing API key variable. It uses a placeholder, but the workflow handles real payment credentials when applied.
High
Generic API/secret keys
STRIPE_SECRET_KEY: z.string().startsWith('sk_'),
The example defines or validates STRIPE_SECRET_KEY, a secret-bearing API key variable. It uses a placeholder, but the workflow handles real payment credentials when applied.
High
Database connection strings
DATABASE_URL=postgresql
The example defines or references database connection strings that may include credentials. The placeholders are not live secrets, but the skill handles secret-bearing values.
Low
Environment variable access (bracket notation)
if (!process.env[envVar]) {
The required variable check reads process.env dynamically for database and JWT secret keys. This is legitimate validation, but it touches secret-bearing variables.
Low
Environment variable access (dot notation)
url: process.env.DATABASE_URL!,
The example reads secret-bearing environment variables such as database URLs or JWT secrets. This is legitimate config code, but it is real environment access.
Low
Environment variable access (dot notation)
accessSecret: process.env.JWT_ACCESS_SECRET!,
The example reads secret-bearing environment variables such as database URLs or JWT secrets. This is legitimate config code, but it is real environment access.
Low
Environment variable access (dot notation)
refreshSecret: process.env.JWT_REFRESH_SECRET!,
The example reads secret-bearing environment variables such as database URLs or JWT secrets. This is legitimate config code, but it is real environment access.
Low
Environment variable object
export const env = envSchema.parse(process.env);
The example parses the entire process.env object, which can include secrets. It is legitimate validation code, but it handles secret-bearing environment data.
Low
Environment variable object
const env = envSchema.parse(process.env);
The example parses the entire process.env object, which can include secrets. It is legitimate validation code, but it handles secret-bearing environment data.
Low
Environment variable object
url: process.env.DATABASE_URL!,
The example reads secret-bearing environment variables such as database URLs or JWT secrets. This is legitimate config code, but it is real environment access.
Low
Environment variable object
accessSecret: process.env.JWT_ACCESS_SECRET!,
The example reads secret-bearing environment variables such as database URLs or JWT secrets. This is legitimate config code, but it is real environment access.
Low
Environment variable object
refreshSecret: process.env.JWT_REFRESH_SECRET!,
The example reads secret-bearing environment variables such as database URLs or JWT secrets. This is legitimate config code, but it is real environment access.
Low
Environment variable object
if (!process.env[envVar]) {
The required variable check reads process.env dynamically for database and JWT secret keys. This is legitimate validation, but it touches secret-bearing variables.
Low
dotenv library
import dotenv from 'dotenv';
The TypeScript example imports and configures dotenv to load .env values into process.env. This is legitimate, but it confirms environment-variable access.
Low
dotenv library
dotenv.config();
The TypeScript example imports and configures dotenv to load .env values into process.env. This is legitimate, but it confirms environment-variable access.

Risk findings

Confirmed security concerns are separated from items that still need review.

Confirmed security concerns (21)

RISK-001 High
Environment file access
description: Configure and manage development, staging, and production environments. Use when settin
The skill explicitly handles .env or process.env data that can contain secrets. This is intended for setup, but it is a real sensitive-file access capability.
RISK-002 High
Environment file access
**.env.local** (per developer):
The skill explicitly handles .env or process.env data that can contain secrets. This is intended for setup, but it is a real sensitive-file access capability.
RISK-003 High
Environment file access
**.env.production**:
The skill explicitly handles .env or process.env data that can contain secrets. This is intended for setup, but it is a real sensitive-file access capability.
RISK-004 High
Environment file access
// Load .env file
The skill explicitly handles .env or process.env data that can contain secrets. This is intended for setup, but it is a real sensitive-file access capability.
RISK-005 High
Environment file access
export const env = envSchema.parse(process.env);
The skill explicitly handles .env or process.env data that can contain secrets. This is intended for setup, but it is a real sensitive-file access capability.
RISK-006 High
Environment file access
const env = envSchema.parse(process.env);
The skill explicitly handles .env or process.env data that can contain secrets. This is intended for setup, but it is a real sensitive-file access capability.
RISK-007 High
Environment file access
url: process.env.DATABASE_URL!,
The skill explicitly handles .env or process.env data that can contain secrets. This is intended for setup, but it is a real sensitive-file access capability.
RISK-008 High
Environment file access
accessSecret: process.env.JWT_ACCESS_SECRET!,
The skill explicitly handles .env or process.env data that can contain secrets. This is intended for setup, but it is a real sensitive-file access capability.
RISK-009 High
Environment file access
refreshSecret: process.env.JWT_REFRESH_SECRET!,
The skill explicitly handles .env or process.env data that can contain secrets. This is intended for setup, but it is a real sensitive-file access capability.
RISK-010 High
Environment file access
if (!process.env[envVar]) {
The skill explicitly handles .env or process.env data that can contain secrets. This is intended for setup, but it is a real sensitive-file access capability.
RISK-011 High
Environment file access
- .env.local
The skill explicitly handles .env or process.env data that can contain secrets. This is intended for setup, but it is a real sensitive-file access capability.
RISK-012 High
Environment file access
├── .env # Local (gitignore)
The skill explicitly handles .env or process.env data that can contain secrets. This is intended for setup, but it is a real sensitive-file access capability.
RISK-013 High
Environment file access
├── .env.local # Per developer (gitignore)
The skill explicitly handles .env or process.env data that can contain secrets. This is intended for setup, but it is a real sensitive-file access capability.
RISK-014 High
Environment file access
├── .env.production # Production (gitignore or vault)
The skill explicitly handles .env or process.env data that can contain secrets. This is intended for setup, but it is a real sensitive-file access capability.
RISK-015 High
Environment variant files
**.env.local** (per developer):
The skill instructs use of environment-specific files such as .env.local or .env.production, which commonly contain secrets. This is legitimate but sensitive file handling.
RISK-016 High
Environment variant files
**.env.production**:
The skill instructs use of environment-specific files such as .env.local or .env.production, which commonly contain secrets. This is legitimate but sensitive file handling.
RISK-017 High
Environment variant files
- .env.local
The skill instructs use of environment-specific files such as .env.local or .env.production, which commonly contain secrets. This is legitimate but sensitive file handling.
RISK-018 High
Environment variant files
├── .env.local # Per developer (gitignore)
The skill instructs use of environment-specific files such as .env.local or .env.production, which commonly contain secrets. This is legitimate but sensitive file handling.
RISK-019 High
Environment variant files
├── .env.production # Production (gitignore or vault)
The skill instructs use of environment-specific files such as .env.local or .env.production, which commonly contain secrets. This is legitimate but sensitive file handling.
RISK-020 High
Unsafe Logging of Secret-Bearing Environment Variables
The usage example suggests logging env.DATABASE_URL, which can expose credentials embedded in database connection strings if copied into application code.
Line 127 directly demonstrates printing a database URL. It is commented example code, so confidence is high but not absolute.
RISK-021 High
Weak Default Database Password in Docker Example
The Docker Compose example uses a database URL with postgres:password and sets the database password to password, which can normalize weak defaults if copied.
The weak password string is explicit in the Docker example. The example appears local-only, so the risk depends on whether users copy it beyond development.

Remediation

Suggested fixes recorded by this audit. Applying them is the maintainer’s responsibility.

  1. FIX-001
    High
    Secret-bearing environment examples
    Keep templates placeholder-only and add explicit confirmation before reading or editing any existing .env, .env.local, or .env.production file.
  2. FIX-002
    High
    Database URL logging example
    Remove examples that print DATABASE_URL or other secret-bearing values. Show redacted names or validation summaries instead.
  3. FIX-003
    High
    Weak Docker database defaults
    Replace default passwords with generated local-only placeholders and warn users not to reuse them outside local development.
  4. FIX-004
    Medium
    Cloud and payment credential placeholders
    Use neutral placeholder names and direct users to approved secret managers for AWS and Stripe credentials.

Expert evidence

Immutable subject identity, scanner metadata, dismissed matches, and source-level evidence.

Artifact subject

Marketplace commit
Unavailable
Content hash
Unavailable
Tree hash
Unavailable
Skill path
Unavailable
Audit payload hash
Unavailable

Analysis metadata

Audit model: codex

Analysis state: Complete

Scope is limited to the recorded files, lines, methods, and evidence. No runtime or sandbox execution is claimed.

Verify and export

The manifest and lockfile bind install artifacts to cryptographic hashes. This integrity claim is separate from the security assessment.

Audit attestation: not_attestable