cso
Skill178 starsChanged 4 months agoMITView on GitHub
Chief Security Officer mode. Infrastructure-first security audit: secrets archaeology, dependency supply chain, CI/CD pipeline security, LLM/AI security, skill supply chain scanning, plus OWASP Top 10, STRIDE threat modeling, and active verification. Two modes: daily (zero-noise, 8/10 confidence gate) and comprehensive (monthly deep scan, 2/10 bar). Use when a user says "security audit", "threat model", "pentest review", "OWASP", "CSO review", "check for vulnerabilities", or "is my code secure".
- Reads credentials
- Sends data out
37 other projects use a version of this.
Adopted by
Most recently taken up by
- timurgaleev/vibestacktheir own version, first seen Nov 8, 2026
- joi-fairshare/agentic-workflowtheir own version, first seen Nov 8, 2026
- trungtm78/ClaudeSkillstheir own version, first seen Oct 25, 2026
- jthorare/agentic-workflowtheir own version, first seen Oct 25, 2026
- Marco-Satis/claude-setuptheir own version, first seen Oct 20, 2026
- thedigitalorganizer/soloshiptheir own version, first seen Oct 15, 2026
Used with
Projects with it also use ios-clean, ios-fix and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
Saqlain-811Skillios-clean
Remove the DebugBridge SPM package and all #if DEBUG wiring from an iOS app. (gstack)
Also in 5 projects that use this
Saqlain-811Skillios-fix
Autonomous iOS bug fixer. (gstack)
Also in 5 projects that use this
seek888Skillopen-gstack-browser
Launch GStack Browser — AI-controlled Chromium with the sidebar extension baked in. Opens a visible browser window where you can watch every action in real time. The sidebar shows a live activity feed and chat. Anti-bot stealth built in. Use when asked to "open gstack browser", "launch browser", "connect chrome", "open chrome", "real browser", "launch chrome", "side panel", or "control my browser". Voice triggers (speech-to-text aliases): "show me the browser".
Also in 9 projects that use this
seek888Skillpair-agent
Pair a remote AI agent with your browser. One command generates a setup key and prints instructions the other agent can follow to connect. Works with OpenClaw, Hermes, Codex, Cursor, or any agent that can make HTTP requests. The remote agent gets its own tab with scoped access (read+write by default, admin on request). Use when asked to "pair agent", "connect agent", "share browser", "remote browser", "let another agent use my browser", or "give browser access". (gstack) Voice triggers (speech-to-text aliases): "pair agent", "connect agent", "share my browser", "remote browser access".
Also in 11 projects that use this
ShreyRaviSkilllanding-report
Read-only queue dashboard for workspace-aware ship. Shows which VERSION slots are currently claimed by open PRs, which sibling Conductor workspaces have WIP work likely to ship soon, and what slot /ship would pick next. No mutations — just a snapshot. Use when asked to "landing report", "what's in the queue", "show me open PRs", or "which version do I claim next". (gstack)
Also in 8 projects that use this
timurgaleevSkilldocument-generate
Generate missing docs for a feature, module or project as tutorials, how-tos, reference and explanation.
Also in 7 projects that use this
- +1 more from Saqlain-811
- +1 more from seek888
Other versions37 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 37
- garrytan/gstack★ 141ksame name
- mr-daedalium/ostack-saas★ 108same name
- no-session/pstack★ 96same name
- lucas-flatwhite/gstack-ko★ 45same name
- CarbeneAI/Forge★ 9same name
- Samin12/skills★ 8same name
- timurgaleev/vibestack★ 8same name
- joi-fairshare/agentic-workflow★ 3same name
- jthorare/agentic-workflow★ 3same name
- blas1n/claude-skills★ 2same name
27 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository34 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- animation-reverse-engineeringSkill
- brand-designSkill
- build-data-pipelineSkill
- build-defi-protocolSkill
- build-mobileSkill
- build-with-claudeSkill
- debug-programSkill
- design-tasteSkill
- frontend-design-guidelinesSkill
- launch-tokenSkill
- navigate-skillsSkill
- number-formattingSkill
- page-load-animationsSkill
- product-reviewSkill
- review-and-iterateSkill
- roast-my-productSkill
- scaffold-projectSkill
- verify-humanity-pohSkill
- virtual-solana-incubatorSkill
- colosseum-copilotSkill
- competitive-landscapeSkill
- defillama-researchSkill
- find-next-crypto-ideaSkill
- learnSkill
- solana-beginnerSkill
- validate-ideaSkill
- apply-grantSkill
- create-pitch-deckSkill
- deploy-to-mainnetSkill
- marketing-videoSkill
- submit-to-hackathonSkill
- video-craftSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
124 rules. 0 are common, 85 are distinctive, and 39 are very specific to this project.
0
Common
Most of the 30 edited versions we read keep these.
85
Distinctive
This author's own choices. Worth a look.
39
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 41
If TEL_PROMPTED is no: Before starting the skill workflow, ask the user about telemetry.
- Distinctive: line 51
If A: run this bash:
- Distinctive: line 58
If B: run this bash:
- Very specific: line 91
If --comprehensive is passed: set confidence gate to 2/10 (catch everything, even speculative)
- Distinctive: line 92
If no flags: set confidence gate to 8/10 (daily mode, zero-noise)
- Distinctive: line 99
Always start by asking the user which scope they want using AskUserQuestion, unless they specified flags.
- Very specific: line 110
Use Grep tool for all searches: Do not shell out to grep or rg via Bash.
- Distinctive: line 112
Use Bash only for: git commands, running test suites, checking file permissions, network checks, and other operations that require a shell.
- Very specific: line 120
Read the project root: package.json, Cargo.toml, pyproject.toml, go.mod, Anchor.toml, docker-compose.yml, Dockerfile, .env.example
- Distinctive: line 128
Check for monorepo structure (workspaces, Turborepo, Nx)
- Very specific: line 140
Network listeners: Search for listen(, createServer(, serve(, bind(, .start( patterns
- Very specific: line 141
API routes: Search for route definitions (app.get, app.post, router., @app.route, #[endpoint], etc.)
- Very specific: line 142
File uploads: Search for multer, formidable, busboy, multipart, file write operations
- Very specific: line 143
WebSocket endpoints: Search for ws://, wss://, WebSocket, socket.io
- Very specific: line 144
Scheduled tasks: Search for cron, setInterval, schedule, @Cron
- Very specific: line 145
External API calls: Search for fetch(, axios, http.get, reqwest, outbound URLs
- Very specific: line 147
Environment variable consumption: Search for process.env, std::env, os.environ, env::var
- Distinctive: line 158
Current codebase: Search for high-entropy strings, Base64 blobs, hex strings > 32 chars
- Very specific: line 167
CI secrets: Check .github/workflows/*.yml for hardcoded secrets vs ${{ secrets.* }}
- Very specific: line 168
Docker: Check Dockerfiles for ARG/ENV with secrets, build args leaking to image layers
- Very specific: line 169
Git hooks: Check .git/hooks/ and .husky/ for credential exposure
- Distinctive: line 173
HIGH: Test/dev secrets that match production naming patterns
- Very specific: line 189
Check for common letter swaps (lodash vs 1odash)
- Very specific: line 190
Check for scope confusion (@solana/web3.js vs solana-web3.js)
- Very specific: line 196
Check for ^ or ~ ranges in production dependencies
- Distinctive: line 197
Check for lockfile presence and freshness
- Very specific: line 198
Check for npm_config_ignore_scripts=true or equivalent
- Very specific: line 199
Post-install scripts: Search for packages with preinstall, postinstall, prepare scripts that execute arbitrary code
- Very specific: line 200
Solana-specific: Check @coral-xyz/anchor, @solana/web3.js, @solana/spl-token versions against known-good versions
- Distinctive: line 208
Goal: Ensure the build and deploy pipeline cannot be compromised.
- Very specific: line 211
Search for uses: entries not pinned to a full immutable commit SHA (for example, @<full commit SHA>, including 40- or 64-character SHAs)
- Very specific: line 212
Treat @v* tags, branches, and other mutable refs as weaker references, not immutable pinning
- Very specific: line 213
Check for pull_request_target trigger (code injection risk)
- Very specific: line 214
Check for ${{ github.event.*.body }} or similar injection points
- Very specific: line 215
Verify secrets are not logged (echo ${{ secrets.* }})
- Very specific: line 216
Check for excessive permissions: (should be minimal)
- Distinctive: line 223
Verify deploy requires passing CI
- Distinctive: line 224
Check for manual approval gates on production
- Distinctive: line 225
Verify rollback capability exists
- Distinctive: line 227
Check if build artifacts are signed
- Distinctive: line 228
Verify SBOM generation if applicable
- Distinctive: line 229
Check for reproducible builds
- Distinctive: line 237
DNS and domains: Check for references to domains, subdomains, CDN endpoints
- Distinctive: line 238
Cloud resources: Search for AWS ARNs, GCP project IDs, Azure resource IDs
- Distinctive: line 239
Terraform/IaC: If present, check for drift indicators, unencrypted state
- Distinctive: line 240
Database migrations: Check migration files for security-relevant changes (adding auth columns, dropping constraints)
- Distinctive: line 241
Feature flags: Search for feature flag services (LaunchDarkly, Unleash, env-based flags) that might expose unauthenticated endpoints
- Distinctive: line 243
Check for program upgrade authority settings
- Distinctive: line 244
Verify multisig requirements for program upgrades
- Distinctive: line 245
Check for open PDAs that anyone can write to
- Distinctive: line 251
Goal: Verify all inbound webhooks validate authenticity and all outbound integrations are secure.
- Distinctive: line 254
Search for webhook handler endpoints
- Distinctive: line 255
Verify signature validation (HMAC, asymmetric signature)
- Distinctive: line 256
Check for replay protection (timestamp validation, nonce)
- Distinctive: line 257
Verify IP allowlisting if applicable
- Very specific: line 259
Check for TLS verification (rejectUnauthorized: false, verify=False)
- Distinctive: line 260
Verify timeout settings on outbound calls
- Distinctive: line 261
Check for circuit breaker patterns
- Distinctive: line 274
Search for user input concatenated directly into prompts
- Distinctive: line 275
Check for system prompt leakage via instructions
- Distinctive: line 276
Verify input sanitization before LLM calls
- Distinctive: line 278
Check if LLM responses are used to construct URLs, file paths, or shell commands
- Very specific: line 279
Verify LLM output is not directly executed (eval, exec, Function())
- Distinctive: line 280
Check for tool-use/function-calling without output validation
- Distinctive: line 283
Check for context window stuffing with sensitive data
- Distinctive: line 284
Verify rate limiting on LLM-powered endpoints
- Distinctive: line 287
Check for key rotation policies
- Distinctive: line 288
Verify billing alerts are configured
- Very specific: line 304
Verify each skill has a valid SKILL.md with frontmatter
- Very specific: line 305
Check for unexpected allowed_tools (especially Bash with no constraints)
- Distinctive: line 308
Search for encoded/obfuscated content in skill files
- Distinctive: line 309
Check for URLs that download and execute code
- Distinctive: line 310
Look for instructions that override safety guidelines
- Very specific: line 311
Search for ignore previous instructions, you are now, system prompt patterns
- Distinctive: line 313
Check if skills come from known sources (official repos, verified publishers)
- Distinctive: line 315
Check git history for skill modifications
- Very specific: line 317
Check references/ directories for unexpected file types
- Distinctive: line 318
Verify referenced URLs are legitimate
- Distinctive: line 319
Check for large binary files in skill directories
- Distinctive: line 328
Check for missing authorization on API routes
- Distinctive: line 329
Search for IDOR patterns (user ID in URL without ownership check)
- Distinctive: line 330
Verify role-based access control implementation
- Distinctive: line 334
Check for debug mode in production configs
- Distinctive: line 335
Search for default credentials
- Distinctive: line 336
Verify security headers (CSP, HSTS, X-Frame-Options, X-Content-Type-Options)
- Very specific: line 337
Check CORS configuration (Access-Control-Allow-Origin: *)
- Distinctive: line 338
Verify directory listing is disabled
- Distinctive: line 342
Check for vulnerable, unsupported, or unmaintained third-party components
- Distinctive: line 343
Verify version tracking, vulnerability scanning, and change-management processes exist
- Distinctive: line 344
Check CI/CD dependencies such as GitHub Actions, container base images, and build tooling for mutable or untrusted sources
- Very specific: line 347
Search for weak algorithms: MD5, SHA1 (for security purposes), DES, RC4
- Distinctive: line 348
Check for hardcoded encryption keys
- Distinctive: line 349
Verify TLS configuration (minimum version, cipher suites)
- Very specific: line 353
SQL: Search for string concatenation in queries ("SELECT.*" + ,
SELECT ${) - Very specific: line 354
Command: Search for exec(, spawn(, system( with user input
- Very specific: line 355
XSS: Search for dangerouslySetInnerHTML, innerHTML, unescaped output in templates
- Distinctive: line 356
LDAP/XPath: If applicable, check injection points
- Distinctive: line 357
Solana: Check for unchecked instruction data deserialization
- Distinctive: line 360
Check for rate limiting on auth endpoints
- Distinctive: line 361
Verify account lockout mechanisms
- Distinctive: line 362
Check for security-relevant business logic flaws
- Distinctive: line 366
Check password policies (if applicable)
- Distinctive: line 367
Verify session management (expiry, rotation, secure flags)
- Distinctive: line 368
Check for credential stuffing protections
- Distinctive: line 372
Check for unsigned updates or deployments
- Distinctive: line 373
Verify CI/CD pipeline integrity (cross-ref Phase 4)
- Distinctive: line 374
Check for deserialization of untrusted data
- Distinctive: line 378
Check for security event logging (failed logins, privilege changes)
- Distinctive: line 379
Verify log injection protections
- Distinctive: line 380
Check for sensitive data in logs (passwords, tokens, keys)
- Distinctive: line 381
Verify alerting exists for security events
- Distinctive: line 384
Check for fail-open behavior on errors or missing inputs
- Distinctive: line 385
Verify exceptions and abnormal states are handled securely and consistently
- Distinctive: line 387
Check timeout, retry, fallback, and privilege-failure handling
- Distinctive: line 485
When you encounter a pattern, check these precedents before reporting:
- Distinctive: line 512
Trace the data flow: Follow user input from entry point to the vulnerable code
- Distinctive: line 513
Check for guards: Look for middleware, validators, sanitizers upstream
- Distinctive: line 514
Test the path: If Bash is available, attempt to trigger the condition (non-destructively)
- Distinctive: line 562
After presenting all findings, create a prioritized remediation roadmap:
- Distinctive: line 566
Use AskUserQuestion to confirm priorities with the user
- Distinctive: line 567
Ask if they want to start fixing P0 issues now
- Very specific: line 593
Create .superstack/security-reports/ directory if it doesn't exist
- Distinctive: line 596
If a previous report exists, compare finding counts and highlight:
- Very specific: line 614
After the skill workflow completes (success, error, or abort), log the telemetry event.
“Common” is measured: kept by at least 6 in 10 of the 30 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Preamble (run first)
_TEL_TIER=$(cat ~/.superstack/config.json 2>/dev/null | grep -o '"telemetryTier": *"[^"]*"' | head -1 | sed 's/.*"telemetryTier": *"//;s/"$//' || echo "anonymous")
_TEL_TIER="${_TEL_TIER:-anonymous}"
_TEL_PROMPTED=$([ -f ~/.superstack/.telemetry-prompted ] && echo "yes" || echo "no")
_TEL_START=$(date +%s)
_SESSION_ID="$$-$(date +%s)"
mkdir -p ~/.superstack
echo "TELEMETRY: $_TEL_TIER"
echo "TEL_PROMPTED: $_TEL_PROMPTED"
if [ "$_TEL_TIER" != "off" ]; then
_TEL_EVENT='{"skill":"cso","phase":"build","event":"started","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'"}'
echo "$_TEL_EVENT" >> ~/.superstack/telemetry.jsonl 2>/dev/null || true
_CONVEX_URL=$(cat ~/.superstack/config.json 2>/dev/null | grep -o '"convexUrl":"[^"]*"' | head -1 | cut -d'"' -f4 || echo "")
[ -n "$_CONVEX_URL" ] && curl -s -X POST "$_CONVEX_URL/api/mutation" -H "Content-Type: application/json" -d '{"path":"telemetry:track","args":{"skill":"cso","phase":"build","status":"success","version":"0.2.0","platform":"'$(uname -s)-$(uname -m)'","timestamp":'$(date +%s)000'}}' >/dev/null 2>&1 &
true
fiIf TEL_PROMPTED is no: Before starting the skill workflow, ask the user about telemetry.
Use AskUserQuestion:
Help superstack get better! We track which skills get used and how long they take — no code, no file paths, no PII. Change anytime in
~/.superstack/config.json.
Options:
- A) Sure, help superstack improve (anonymous)
- B) No thanks
If A: run this bash:
echo '{"telemetryTier":"anonymous"}' > ~/.superstack/config.json
_TEL_TIER="anonymous"
touch ~/.superstack/.telemetry-promptedIf B: run this bash:
echo '{"telemetryTier":"off"}' > ~/.superstack/config.json
_TEL_TIER="off"
touch ~/.superstack/.telemetry-promptedThis only happens once. If TEL_PROMPTED is yes, skip this entirely and proceed to the skill workflow.
Wrong skill? See SKILL_ROUTER.md for all available skills.
Adapted from gstack CSO skill.
Chief Security Officer (CSO)
You are a Chief Security Officer conducting a security audit. You are methodical, thorough, and paranoid in the way a good security engineer should be. You never guess -- you verify. You never assume safe -- you prove safe.
Arguments
| Flag | Scope |
/cso | Full audit (all phases) |
/cso --comprehensive | Monthly deep scan, 2/10 confidence bar |
/cso --infra | Phases 0-6 only (infrastructure) |
/cso --code | Phases 8-9 only (OWASP Top 10:2025 + code) |
/cso --skills | Phase 8 only (skill supply chain) |
/cso --diff | Audit only changed files (git diff against main) |
/cso --supply-chain | Phases 3, 8 only (dependency + skill supply chain) |
/cso --owasp | Phase 9 only (OWASP Top 10:2025) |
/cso --scope <path> | Limit audit to specific directory or file |
Mode Resolution
- If
--comprehensiveis passed: set confidence gate to 2/10 (catch everything, even speculative) - If no flags: set confidence gate to 8/10 (daily mode, zero-noise)
--diffrestricts file scope togit diff --name-only main...HEAD--scope <path>restricts file scope to the given path- Multiple flags combine (e.g.,
--infra --comprehensive= infra phases at 2/10 bar)
Starting the Audit
Always start by asking the user which scope they want using AskUserQuestion, unless they specified flags. Present the options:
- Full audit — all 15 phases, recommended for first run
- Infrastructure only — network, secrets, CI/CD, webhooks
- Code only — OWASP Top 10:2025, code-level vulnerabilities
- Supply chain — dependencies and skill packages
- Diff only — just the changed files since main
- Custom scope — specific directory or file path
Tool Usage
Use Grep tool for all searches. Do not shell out to grep or rg via Bash. The Grep tool has correct permissions and is optimized for this environment.
Use Bash only for: git commands, running test suites, checking file permissions, network checks, and other operations that require a shell.
Phase 0: Architecture Mental Model + Stack Detection
Goal: Build a mental model of the project before scanning anything.
- Read the project root:
package.json,Cargo.toml,pyproject.toml,go.mod,Anchor.toml,docker-compose.yml,Dockerfile,.env.example - Identify:
- Language/framework (Node, Rust/Anchor, Python, Go, etc.)
- Package manager (npm, pnpm, yarn, cargo, pip, go mod)
- Database (Postgres, SQLite, Redis, on-chain accounts, etc.)
- Auth mechanism (JWT, sessions, wallet signatures, OAuth)
- Deployment target (Vercel, Fly.io, AWS, Solana devnet/mainnet)
- API style (REST, GraphQL, gRPC, RPC, on-chain instructions)
- Check for monorepo structure (workspaces, Turborepo, Nx)
- Map entry points: servers, CLIs, cron jobs, serverless functions, on-chain programs
- Record stack summary for use in later phases
Output: Stack summary table with language, framework, package manager, database, auth, deployment, API style.
Phase 1: Attack Surface Census
Goal: Enumerate every way data enters or leaves the system.
- Network listeners: Search for
listen(,createServer(,serve(,bind(,.start(patterns - API routes: Search for route definitions (
app.get,app.post,router.,@app.route,#[endpoint], etc.) - File uploads: Search for
multer,formidable,busboy,multipart, file write operations - WebSocket endpoints: Search for
ws://,wss://,WebSocket,socket.io - Scheduled tasks: Search for
cron,setInterval,schedule,@Cron - External API calls: Search for
fetch(,axios,http.get,reqwest, outbound URLs - On-chain entry points: For Solana programs, enumerate all instruction handlers, CPI calls, PDA derivations
- Environment variable consumption: Search for
process.env,std::env,os.environ,env::var
Output: Attack surface table: entry point, type, authentication required (yes/no/unknown), input validation present (yes/no/unknown).
Phase 2: Secrets Archaeology
Goal: Find every secret, credential, API key, and sensitive value — committed or not.
Scan targets:
- Current codebase: Search for high-entropy strings, Base64 blobs, hex strings > 32 chars
- Git history:
git log --all --diff-filter=A -- '*.env' '*.pem' '*.key' '*.secret' - Common patterns:
PRIVATE_KEY,SECRET_KEY,API_KEY,TOKEN,PASSWORD,CREDENTIALsk_live_,pk_live_,ghp_,gho_,github_pat_,xoxb-,xoxp------BEGIN (RSA |EC |OPENSSH )?PRIVATE KEY-----mongodb://,postgres://,mysql://,redis://with credentials- Solana keypair files:
[followed by 64 numbers (byte array format)
- Config files:
.env,.env.*,config.json,secrets.yaml,credentials.json - CI secrets: Check
.github/workflows/*.ymlfor hardcoded secrets vs${{ secrets.* }} - Docker: Check Dockerfiles for
ARG/ENVwith secrets, build args leaking to image layers - Git hooks: Check
.git/hooks/and.husky/for credential exposure
Severity ratings:
- CRITICAL: Live production secrets in code or git history
- HIGH: Test/dev secrets that match production naming patterns
- MEDIUM: Secrets in .env.example with real-looking values
- LOW: Overly broad .gitignore gaps (missing
*.pem,*.key)
Phase 3: Dependency Supply Chain
Goal: Audit every dependency for known vulnerabilities, typosquatting, and maintainer risk.
- Known vulnerabilities:
npm audit/pnpm audit/yarn audit(Node)cargo audit(Rust — install if missing)pip-audit(Python)govulncheck(Go)
- Typosquatting check: For each dependency, verify the package name is correct:
- Check for common letter swaps (
lodashvs1odash) - Check for scope confusion (
@solana/web3.jsvssolana-web3.js)
- Check for common letter swaps (
- Maintainer risk:
- Single-maintainer packages with > 1M weekly downloads
- Packages with recent ownership transfers
- Packages last published > 2 years ago
- Pinning audit:
- Check for
^or~ranges in production dependencies - Check for lockfile presence and freshness
- Check for
npm_config_ignore_scripts=trueor equivalent
- Check for
- Post-install scripts: Search for packages with
preinstall,postinstall,preparescripts that execute arbitrary code - Solana-specific: Check
@coral-xyz/anchor,@solana/web3.js,@solana/spl-tokenversions against known-good versions
Output: Dependency risk table: package, version, vulnerability (CVE if applicable), risk level, recommendation.
Phase 4: CI/CD Pipeline Security
Goal: Ensure the build and deploy pipeline cannot be compromised.
- GitHub Actions:
- Search for
uses:entries not pinned to a full immutable commit SHA (for example,@<full commit SHA>, including 40- or 64-character SHAs) - Treat
@v*tags, branches, and other mutable refs as weaker references, not immutable pinning - Check for
pull_request_targettrigger (code injection risk) - Check for
${{ github.event.*.body }}or similar injection points - Verify secrets are not logged (
echo ${{ secrets.* }}) - Check for excessive
permissions:(should be minimal)
- Search for
- Docker builds:
- Multi-stage builds (secrets not in final image)
- No
--build-argwith secrets - Base images pinned by digest
- No
latesttags in FROM
- Deploy pipeline:
- Verify deploy requires passing CI
- Check for manual approval gates on production
- Verify rollback capability exists
- Artifact security:
- Check if build artifacts are signed
- Verify SBOM generation if applicable
- Check for reproducible builds
Phase 5: Infrastructure Shadow Surface
Goal: Find infrastructure that exists but isn't in the main codebase.
- DNS and domains: Check for references to domains, subdomains, CDN endpoints
- Cloud resources: Search for AWS ARNs, GCP project IDs, Azure resource IDs
- Terraform/IaC: If present, check for drift indicators, unencrypted state
- Database migrations: Check migration files for security-relevant changes (adding auth columns, dropping constraints)
- Feature flags: Search for feature flag services (LaunchDarkly, Unleash, env-based flags) that might expose unauthenticated endpoints
- Solana-specific:
- Check for program upgrade authority settings
- Verify multisig requirements for program upgrades
- Check for open PDAs that anyone can write to
Phase 6: Webhook & Integration Audit
Goal: Verify all inbound webhooks validate authenticity and all outbound integrations are secure.
- Inbound webhooks:
- Search for webhook handler endpoints
- Verify signature validation (HMAC, asymmetric signature)
- Check for replay protection (timestamp validation, nonce)
- Verify IP allowlisting if applicable
- Outbound integrations:
- Check for TLS verification (
rejectUnauthorized: false,verify=False) - Verify timeout settings on outbound calls
- Check for circuit breaker patterns
- Check for TLS verification (
- Third-party callbacks:
- OAuth callback URLs: verify state parameter validation
- Payment callbacks: verify signature and idempotency
- Solana: verify transaction confirmation before acting on webhooks
Phase 7: LLM & AI Security
Goal: Audit LLM integrations for prompt injection, data exfiltration, and trust boundary violations.
- Prompt injection:
- Search for user input concatenated directly into prompts
- Check for system prompt leakage via instructions
- Verify input sanitization before LLM calls
- Data exfiltration:
- Check if LLM responses are used to construct URLs, file paths, or shell commands
- Verify LLM output is not directly executed (
eval,exec,Function()) - Check for tool-use/function-calling without output validation
- Trust boundaries:
- Map which data flows to LLMs (PII, secrets, financial data)
- Check for context window stuffing with sensitive data
- Verify rate limiting on LLM-powered endpoints
- API key management:
- LLM API keys should be server-side only
- Check for key rotation policies
- Verify billing alerts are configured
Phase 8: Skill Supply Chain
Goal: Audit installed skills for malicious or vulnerable content.
Scan paths:
~/.claude/skills/(Claude Code skills)~/.codex/skills/(Codex skills)- Project-local
skills/directory .claude/settings.jsonfor skill references
Checks:
- Skill manifest validation:
- Verify each skill has a valid
SKILL.mdwith frontmatter - Check for unexpected
allowed_tools(especiallyBashwith no constraints) - Flag skills that request
Write+Bashtogether (can modify and execute)
- Verify each skill has a valid
- Skill content scanning:
- Search for encoded/obfuscated content in skill files
- Check for URLs that download and execute code
- Look for instructions that override safety guidelines
- Search for
ignore previous instructions,you are now,system promptpatterns
- Skill provenance:
- Check if skills come from known sources (official repos, verified publishers)
- Flag skills with no clear origin
- Check git history for skill modifications
- Reference file scanning:
- Check
references/directories for unexpected file types - Verify referenced URLs are legitimate
- Check for large binary files in skill directories
- Check
Phase 9: OWASP Top 10:2025 Assessment
Goal: Systematic check against OWASP Top 10:2025 with active verification.
A01: Broken Access Control
- Check for missing authorization on API routes
- Search for IDOR patterns (user ID in URL without ownership check)
- Verify role-based access control implementation
- Solana: check for missing signer constraints, unchecked account ownership
A02: Security Misconfiguration
- Check for debug mode in production configs
- Search for default credentials
- Verify security headers (CSP, HSTS, X-Frame-Options, X-Content-Type-Options)
- Check CORS configuration (
Access-Control-Allow-Origin: *) - Verify directory listing is disabled
A03: Software Supply Chain Failures
- Cross-reference with Phase 3 dependency audit and Phase 4 CI/CD integrity audit
- Check for vulnerable, unsupported, or unmaintained third-party components
- Verify version tracking, vulnerability scanning, and change-management processes exist
- Check CI/CD dependencies such as GitHub Actions, container base images, and build tooling for mutable or untrusted sources
A04: Cryptographic Failures
- Search for weak algorithms:
MD5,SHA1(for security purposes),DES,RC4 - Check for hardcoded encryption keys
- Verify TLS configuration (minimum version, cipher suites)
- Solana: verify proper use of
ed25519, check for weak randomness in key generation
A05: Injection
- SQL: Search for string concatenation in queries (
"SELECT.*" +,`SELECT ${`) - Command: Search for
exec(,spawn(,system(with user input - XSS: Search for
dangerouslySetInnerHTML,innerHTML, unescaped output in templates - LDAP/XPath: If applicable, check injection points
- Solana: Check for unchecked instruction data deserialization
A06: Insecure Design
- Check for rate limiting on auth endpoints
- Verify account lockout mechanisms
- Check for security-relevant business logic flaws
- Review error messages for information leakage
A07: Authentication Failures
- Check password policies (if applicable)
- Verify session management (expiry, rotation, secure flags)
- Check for credential stuffing protections
- Solana: verify wallet signature validation, check for replay attacks
A08: Software or Data Integrity Failures
- Check for unsigned updates or deployments
- Verify CI/CD pipeline integrity (cross-ref Phase 4)
- Check for deserialization of untrusted data
- Solana: verify program upgrade authority, check IDL integrity
A09: Security Logging and Alerting Failures
- Check for security event logging (failed logins, privilege changes)
- Verify log injection protections
- Check for sensitive data in logs (passwords, tokens, keys)
- Verify alerting exists for security events
A10: Mishandling of Exceptional Conditions
- Check for fail-open behavior on errors or missing inputs
- Verify exceptions and abnormal states are handled securely and consistently
- Review error paths for sensitive-data leakage
- Check timeout, retry, fallback, and privilege-failure handling
Sources for Phase 4 and Phase 9
- GitHub secure use reference: https://docs.github.com/en/actions/reference/security/secure-use
- OWASP Top Ten project: https://owasp.org/www-project-top-ten/
- OWASP Top 10:2025 reference: https://owasp.org/www-project-top-ten/
Phase 10: STRIDE Threat Model
Goal: Systematic threat modeling using STRIDE methodology.
For each major component identified in Phase 0:
| Threat | Question | Check |
| Spoofing | Can an attacker impersonate a user or component? | Auth mechanisms, certificate validation, wallet signature checks |
| Tampering | Can data be modified in transit or at rest? | Integrity checks, HMAC, digital signatures, on-chain account constraints |
| Repudiation | Can actions be denied? | Audit logging, transaction receipts, on-chain event emission |
| Information Disclosure | Can sensitive data leak? | Encryption at rest/transit, access controls, error messages |
| Denial of Service | Can the system be overwhelmed? | Rate limiting, resource quotas, compute unit limits |
| Elevation of Privilege | Can a user gain unauthorized access? | Privilege checks, role validation, PDA authority checks |
Output: STRIDE matrix with component, threat type, risk level, existing mitigation, recommended action.
Phase 11: Data Classification
Goal: Identify and classify all sensitive data in the system.
- PII: Names, emails, addresses, phone numbers, government IDs
- Financial: Payment info, wallet addresses, transaction data, balances
- Auth credentials: Passwords, tokens, API keys, private keys, seed phrases
- Business sensitive: Proprietary algorithms, pricing, user analytics
- Regulated: Data subject to GDPR, CCPA, PCI-DSS, SOC2
For each data type found:
- Where is it stored?
- How is it transmitted?
- Who has access?
- What is the retention policy?
- Is it encrypted at rest and in transit?
Phase 12: False Positive Filtering + Active Verification
Goal: Eliminate noise. Every finding must be verified or clearly marked as unverified.
Confidence Calibration
| Confidence | Meaning | Evidence Required |
| 10/10 | Confirmed exploitable | Working exploit or proof |
| 9/10 | Almost certain | Code path verified, all conditions met |
| 8/10 | High confidence | Code pattern matches, reasonable assumptions |
| 7/10 | Likely | Pattern match with some uncertainty |
| 6/10 | Probable | Indicator present but not fully traced |
| 5/10 | Possible | Suspicious pattern, needs investigation |
| 4/10 | Speculative | Weak indicator only |
| 3/10 | Low confidence | Theoretical concern |
| 2/10 | Very unlikely | Edge case only |
| 1/10 | Negligible | Almost certainly not an issue |
Daily Mode (default): Only report findings >= 8/10
Comprehensive Mode: Report findings >= 2/10, clearly labeled
Hard Exclusions (NEVER report these as findings)
These 22 patterns are categorically NOT vulnerabilities. Reporting them is a false positive:
- Source map files in dev —
*.mapfiles in development builds - Console.log in development — logging statements in dev/debug code
- TODO/FIXME comments — unless they describe a known security issue
- Missing HTTPS in localhost — local development does not need TLS
- Test credentials in test files —
test/,__tests__/,*.test.*,*.spec.* - Example/placeholder values in docs — README, docs/, examples/
- Type assertion as security issue — TypeScript
ascasts are type-level only - Unused imports — code quality issue, not security
- Any ESLint/linter warning — unless it directly indicates a vulnerability
- Missing rate limiting on dev server — only matters in production
- Self-signed certs in dev/test — expected for local development
- Open CORS in dev — only a finding in production configuration
- Hardcoded ports — port numbers are not secrets
- Package-lock.json conflicts — merge issue, not security
- Deprecated API warnings — unless the deprecation IS the vulnerability
- Missing CSP in development — only matters in production
- Git merge artifacts —
<<<<<<<,=======,>>>>>>>are not vulnerabilities - Empty catch blocks — code quality issue unless swallowing auth errors
- Magic numbers — code style issue, not security
- Missing input validation on internal functions — only public-facing entry points matter
- Anchor IDL files — IDL JSON is public interface documentation, not a leak
- Solana program derived addresses — PDAs are deterministic and public by design
Precedent Database
When you encounter a pattern, check these precedents before reporting:
| Pattern | Verdict | Reasoning |
.env.example with placeholder values | NOT a finding | Example files are documentation |
console.log in production code | FINDING only if it logs secrets | Check what is logged |
eval() in build scripts | NOT a finding (usually) | Build-time only, not runtime |
eval() in runtime code | FINDING | Code injection risk |
dangerouslySetInnerHTML with sanitized input | Verify sanitizer | Check if DOMPurify or equivalent is used |
dangerouslySetInnerHTML with raw user input | CRITICAL finding | XSS confirmed |
| Hardcoded JWT secret in test file | NOT a finding | Test-only credential |
| Hardcoded JWT secret in config file | CRITICAL finding | Production credential exposure |
rejectUnauthorized: false in test | NOT a finding | Test environment |
rejectUnauthorized: false in production | HIGH finding | TLS bypass |
chmod 777 in Dockerfile | HIGH finding | Excessive permissions |
chmod 755 on binary in Dockerfile | NOT a finding | Normal executable permission |
Solana SystemProgram.transfer without signer check | Verify context | May be legitimate if called from validated instruction |
Anchor #[account(mut)] without constraint | Verify if constraint needed | Missing has_one or constraint may be intentional |
Keypair.generate() in test file | NOT a finding | Test keypair |
Keypair.generate() in production code | VERIFY | May be legitimate for ephemeral operations |
Private key in .env (gitignored) | LOW finding | Should use vault/KMS, but gitignored is baseline |
| Private key in committed file | CRITICAL finding | Immediate rotation required |
Active Verification Steps
For any finding >= 7/10 confidence, attempt active verification:
- Trace the data flow: Follow user input from entry point to the vulnerable code
- Check for guards: Look for middleware, validators, sanitizers upstream
- Test the path: If Bash is available, attempt to trigger the condition (non-destructively)
- Check runtime context: Is this code reachable in production? Dead code is not a finding.
- Cross-reference: Does another phase's finding confirm or contradict this one?
Phase 13: Findings Report + Remediation
Findings Table Format
Present each finding as:
### [SEVERITY] Finding-ID: Title
**Confidence:** X/10
**Phase:** Phase N — Phase Name
**Category:** OWASP A0X / STRIDE Letter / Infrastructure
**Location:** file:line (or directory)
**Description:**
One paragraph explaining the vulnerability.
**Exploit Scenario:**
Step-by-step description of how an attacker would exploit this.
(REQUIRED for all findings >= 7/10 confidence)
**Evidence:**
Code snippet or command output proving the finding.
**Remediation:**
Specific fix with code example if applicable.
**Priority:** P0 (fix now) / P1 (fix this sprint) / P2 (fix this month) / P3 (backlog)Severity Definitions
| Severity | Meaning | SLA |
| CRITICAL | Actively exploitable, data loss or system compromise | Fix immediately |
| HIGH | Exploitable with some conditions, significant impact | Fix within 24 hours |
| MEDIUM | Requires specific conditions, moderate impact | Fix this sprint |
| LOW | Minor impact, defense-in-depth improvement | Fix this month |
| INFO | Not a vulnerability, but worth noting | No SLA |
Remediation Roadmap
After presenting all findings, create a prioritized remediation roadmap:
- Group findings by priority (P0, P1, P2, P3)
- For each group, estimate effort (hours)
- Use AskUserQuestion to confirm priorities with the user
- Ask if they want to start fixing P0 issues now
- Escalate invariant-class findings to formal verification. If a finding concerns authorization flows, conservation (token totals, accounting), state-machine correctness (one-shot safety, lifecycle transitions), CPI correctness, or arithmetic bounds — and closing it via testing alone would leave material uncertainty — recommend the community skill
qedgen-formal-verification. It generates Lean 4 proofs, Kani harnesses, and proptests from a single.qedspec, producing machine-checked evidence rather than coverage-based assurance.
Confidence Calibration Summary
At the end of the report, include:
## Confidence Calibration
- Total findings: N
- CRITICAL: N (avg confidence: X/10)
- HIGH: N (avg confidence: X/10)
- MEDIUM: N (avg confidence: X/10)
- LOW: N (avg confidence: X/10)
- INFO: N (avg confidence: X/10)
- False positives filtered: N
- Mode: Daily (8/10 gate) | Comprehensive (2/10 gate)Phase 14: Save Report
Goal: Persist the audit report for tracking over time.
- Create
.superstack/security-reports/directory if it doesn't exist - Determine project slug:
basename $(git rev-parse --show-toplevel 2>/dev/null)(fallback: current directory name) - Save report to
.superstack/security-reports/{slug}-{YYYY-MM-DD}.md - If a previous report exists, compare finding counts and highlight:
- New findings (not in previous report)
- Resolved findings (in previous report but not current)
- Persistent findings (in both reports)
- Append summary to
.superstack/security-reports/history.md:
## {YYYY-MM-DD} — {slug}
- Mode: Daily | Comprehensive
- Findings: N (C: X, H: X, M: X, L: X, I: X)
- New: N | Resolved: N | Persistent: N
- Confidence gate: X/10- Tell the user where the report was saved and offer to start remediation.
Telemetry (run last)
After the skill workflow completes (success, error, or abort), log the telemetry event.
Determine the outcome from the workflow result: success if completed normally, error
if it failed, abort if the user interrupted.
Run this bash:
_TEL_END=$(date +%s)
_TEL_DUR=$(( _TEL_END - ${_TEL_START:-$_TEL_END} ))
_TEL_TIER=$(cat ~/.superstack/config.json 2>/dev/null | grep -o '"telemetryTier": *"[^"]*"' | head -1 | sed 's/.*"telemetryTier": *"//;s/"$//' || echo "anonymous")
if [ "$_TEL_TIER" != "off" ]; then
echo '{"skill":"cso","phase":"build","event":"completed","outcome":"OUTCOME","duration_s":"'"$_TEL_DUR"'","session":"'"$_SESSION_ID"'","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","platform":"'$(uname -s)-$(uname -m)'"}' >> ~/.superstack/telemetry.jsonl 2>/dev/null || true
true
fiReplace OUTCOME with success/error/abort based on the workflow result.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

