Skip to main content

cso

Conducts comprehensive security audits and threat modeling for infrastructure, focusing on CI/CD and AI security.

Install this skill

or
0/100

Security score

The cso skill was audited on Jun 9, 2026 and we found 107 security issues across 4 threat categories, including 4 critical. Review the findings below before installing.

Categories Tested

Security Issues

critical line 975

Direct command execution function call

SourceSKILL.md
975- **Eval/exec of LLM output:** `eval()`, `exec()`, `Function()`, `new Function` processing AI responses
critical line 1030

Direct command execution function call

SourceSKILL.md
1030- Command injection: system(), exec(), spawn(), popen
critical line 975

Eval function call - arbitrary code execution

SourceSKILL.md
975- **Eval/exec of LLM output:** `eval()`, `exec()`, `Function()`, `new Function` processing AI responses
critical line 1031

Eval function call - arbitrary code execution

SourceSKILL.md
1031- Template injection: render with params, eval(), html_safe, raw()
medium line 32

Template literal with variable interpolation in command context

SourceSKILL.md
32```bash
medium line 265

Template literal with variable interpolation in command context

SourceSKILL.md
265```bash
medium line 340

Template literal with variable interpolation in command context

SourceSKILL.md
340```bash
medium line 479

Template literal with variable interpolation in command context

SourceSKILL.md
479```bash
medium line 886

Template literal with variable interpolation in command context

SourceSKILL.md
886```bash
high line 932

Template literal with variable interpolation in command context

SourceSKILL.md
932**Severity:** CRITICAL for `pull_request_target` + checkout of PR code / script injection via `${{ github.event.*.body }}` in `run:` steps. HIGH for unpinned third-party actions / secrets as env vars
high line 1030

System command execution

SourceSKILL.md
1030- Command injection: system(), exec(), spawn(), popen
medium line 714

Webhook reference - potential data exfiltration

SourceSKILL.md
714The real attack surface isn't your code — it's your dependencies. Most teams audit their own app but forget: exposed env vars in CI logs, stale API keys in git history, forgotten staging servers with
medium line 832

Webhook reference - potential data exfiltration

SourceSKILL.md
832**Code surface:** Use the Grep tool to find endpoints, auth boundaries, external integrations, file upload paths, admin routes, webhook handlers, background jobs, and WebSocket channels. Scope file ex
low line 859

Webhook reference - potential data exfiltration

SourceSKILL.md
859Webhook receivers: N
medium line 950

Webhook reference - potential data exfiltration

SourceSKILL.md
950### Phase 6: Webhook & Integration Audit
medium line 954

Webhook reference - potential data exfiltration

SourceSKILL.md
954**Webhook routes:** Use Grep to find files containing webhook/hook/callback route patterns. For each file, check whether it also contains signature verification (signature, hmac, verify, digest, x-hub
medium line 960

Webhook reference - potential data exfiltration

SourceSKILL.md
960**Verification approach (code-tracing only — NO live requests):** For webhook findings, trace the handler code to determine if signature verification exists anywhere in the middleware chain (parent ro
medium line 962

Webhook reference - potential data exfiltration

SourceSKILL.md
962**Severity:** CRITICAL for webhooks without any signature verification. HIGH for TLS verification disabled in prod code / overly broad OAuth scopes. MEDIUM for undocumented outbound data flows to thir
medium line 964

Webhook reference - potential data exfiltration

SourceSKILL.md
964**FP rules:** TLS disabled in test code excluded. Internal service-to-service webhooks on private networks = MEDIUM max. Webhook endpoints behind API gateway that handles signature verification upstre
medium line 1166

Webhook reference - potential data exfiltration

SourceSKILL.md
11662. **Webhooks:** Trace handler code to verify whether signature verification exists anywhere in the middleware chain. Do NOT make HTTP requests.
low line 1210

Webhook reference - potential data exfiltration

SourceSKILL.md
12104 HIGH 9/10 UNVERIFIED Integrations Webhook w/o signature verify P6 api/webhooks.ts:24
low line 1304

Webhook reference - potential data exfiltration

SourceSKILL.md
1304"infrastructure": { "ci_workflows": 0, "webhook_receivers": 0, "container_configs": 0, "iac_configs": 0, "deploy_targets": 0, "secret_management": "unknown" }
low line 33

Access to hidden dotfiles in home directory

SourceSKILL.md
33_UPD=$(~/.claude/skills/gstack/bin/gstack-update-check 2>/dev/null || .claude/skills/gstack/bin/gstack-update-check 2>/dev/null || true)
low line 35

Access to hidden dotfiles in home directory

SourceSKILL.md
35mkdir -p ~/.gstack/sessions
low line 36

Access to hidden dotfiles in home directory

SourceSKILL.md
36touch ~/.gstack/sessions/"$PPID"
low line 37

Access to hidden dotfiles in home directory

SourceSKILL.md
37_SESSIONS=$(find ~/.gstack/sessions -mmin -120 -type f 2>/dev/null | wc -l | tr -d ' ')
low line 38

Access to hidden dotfiles in home directory

SourceSKILL.md
38find ~/.gstack/sessions -mmin +120 -type f -exec rm {} + 2>/dev/null || true
low line 39

Access to hidden dotfiles in home directory

SourceSKILL.md
39_PROACTIVE=$(~/.claude/skills/gstack/bin/gstack-config get proactive 2>/dev/null || echo "true")
low line 40

Access to hidden dotfiles in home directory

SourceSKILL.md
40_PROACTIVE_PROMPTED=$([ -f ~/.gstack/.proactive-prompted ] && echo "yes" || echo "no")
low line 43

Access to hidden dotfiles in home directory

SourceSKILL.md
43_SKILL_PREFIX=$(~/.claude/skills/gstack/bin/gstack-config get skill_prefix 2>/dev/null || echo "false")
low line 47

Access to hidden dotfiles in home directory

SourceSKILL.md
47source <(~/.claude/skills/gstack/bin/gstack-repo-mode 2>/dev/null) || true
low line 50

Access to hidden dotfiles in home directory

SourceSKILL.md
50_LAKE_SEEN=$([ -f ~/.gstack/.completeness-intro-seen ] && echo "yes" || echo "no")
low line 52

Access to hidden dotfiles in home directory

SourceSKILL.md
52_TEL=$(~/.claude/skills/gstack/bin/gstack-config get telemetry 2>/dev/null || true)
low line 53

Access to hidden dotfiles in home directory

SourceSKILL.md
53_TEL_PROMPTED=$([ -f ~/.gstack/.telemetry-prompted ] && echo "yes" || echo "no")
low line 58

Access to hidden dotfiles in home directory

SourceSKILL.md
58_EXPLAIN_LEVEL=$(~/.claude/skills/gstack/bin/gstack-config get explain_level 2>/dev/null || echo "default")
low line 61

Access to hidden dotfiles in home directory

SourceSKILL.md
61_QUESTION_TUNING=$(~/.claude/skills/gstack/bin/gstack-config get question_tuning 2>/dev/null || echo "false")
low line 63

Access to hidden dotfiles in home directory

SourceSKILL.md
63mkdir -p ~/.gstack/analytics
low line 65

Access to hidden dotfiles in home directory

SourceSKILL.md
65echo '{"skill":"cso","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","repo":"'$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null || echo "unknown")'"}' >> ~/.gstack/analytics/skill-usage.j
low line 67

Access to hidden dotfiles in home directory

SourceSKILL.md
67for _PF in $(find ~/.gstack/analytics -maxdepth 1 -name '.pending-*' 2>/dev/null); do
low line 69

Access to hidden dotfiles in home directory

SourceSKILL.md
69if [ "$_TEL" != "off" ] && [ -x "~/.claude/skills/gstack/bin/gstack-telemetry-log" ]; then
low line 70

Access to hidden dotfiles in home directory

SourceSKILL.md
70~/.claude/skills/gstack/bin/gstack-telemetry-log --event-type skill_run --skill _pending_finalize --outcome unknown --session-id "$_SESSION_ID" 2>/dev/null || true
low line 76

Access to hidden dotfiles in home directory

SourceSKILL.md
76eval "$(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null)" 2>/dev/null || true
low line 82

Access to hidden dotfiles in home directory

SourceSKILL.md
82~/.claude/skills/gstack/bin/gstack-learnings-search --limit 3 2>/dev/null || true
low line 87

Access to hidden dotfiles in home directory

SourceSKILL.md
87~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"cso","event":"started","branch":"'"$_BRANCH"'","session":"'"$_SESSION_ID"'"}' 2>/dev/null &
low line 92

Access to hidden dotfiles in home directory

SourceSKILL.md
92_ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false")
low line 103

Access to hidden dotfiles in home directory

SourceSKILL.md
103_CHECKPOINT_MODE=$(~/.claude/skills/gstack/bin/gstack-config get checkpoint_mode 2>/dev/null || echo "explicit")
low line 104

Access to hidden dotfiles in home directory

SourceSKILL.md
104_CHECKPOINT_PUSH=$(~/.claude/skills/gstack/bin/gstack-config get checkpoint_push 2>/dev/null || echo "false")
medium line 112

Access to hidden dotfiles in home directory

SourceSKILL.md
112In plan mode, allowed because they inform the plan: `$B`, `$D`, `codex exec`/`codex review`, writes to `~/.gstack/`, writes to the plan file, and `open` for generated artifacts.
medium line 120

Access to hidden dotfiles in home directory

SourceSKILL.md
120If `SKILL_PREFIX` is `"true"`, suggest/invoke `/gstack-*` names. Disk paths stay `~/.claude/skills/gstack/[skill-name]/SKILL.md`.
medium line 122

Access to hidden dotfiles in home directory

SourceSKILL.md
122If output shows `UPGRADE_AVAILABLE <old> <new>`: read `~/.claude/skills/gstack/gstack-upgrade/SKILL.md` and follow the "Inline upgrade flow" (auto-upgrade if configured, otherwise AskUserQuestion with
medium line 127

Access to hidden dotfiles in home directory

SourceSKILL.md
127- Missing `~/.claude/skills/gstack/.feature-prompted-continuous-checkpoint`: AskUserQuestion for Continuous checkpoint auto-commits. If accepted, run `~/.claude/skills/gstack/bin/gstack-config set che
medium line 128

Access to hidden dotfiles in home directory

SourceSKILL.md
128- Missing `~/.claude/skills/gstack/.feature-prompted-model-overlay`: inform "Model overlays are active. MODEL_OVERLAY shows the patch." Always touch marker.
medium line 141

Access to hidden dotfiles in home directory

SourceSKILL.md
141If B: run `~/.claude/skills/gstack/bin/gstack-config set explain_level terse`.
low line 145

Access to hidden dotfiles in home directory

SourceSKILL.md
145rm -f ~/.gstack/.writing-style-prompt-pending
low line 146

Access to hidden dotfiles in home directory

SourceSKILL.md
146touch ~/.gstack/.writing-style-prompted
low line 155

Access to hidden dotfiles in home directory

SourceSKILL.md
155touch ~/.gstack/.completeness-intro-seen
medium line 168

Access to hidden dotfiles in home directory

SourceSKILL.md
168If A: run `~/.claude/skills/gstack/bin/gstack-config set telemetry community`
medium line 178

Access to hidden dotfiles in home directory

SourceSKILL.md
178If B→A: run `~/.claude/skills/gstack/bin/gstack-config set telemetry anonymous`
medium line 179

Access to hidden dotfiles in home directory

SourceSKILL.md
179If B→B: run `~/.claude/skills/gstack/bin/gstack-config set telemetry off`
low line 183

Access to hidden dotfiles in home directory

SourceSKILL.md
183touch ~/.gstack/.telemetry-prompted
medium line 196

Access to hidden dotfiles in home directory

SourceSKILL.md
196If A: run `~/.claude/skills/gstack/bin/gstack-config set proactive true`
medium line 197

Access to hidden dotfiles in home directory

SourceSKILL.md
197If B: run `~/.claude/skills/gstack/bin/gstack-config set proactive false`
low line 201

Access to hidden dotfiles in home directory

SourceSKILL.md
201touch ~/.gstack/.proactive-prompted
medium line 242

Access to hidden dotfiles in home directory

SourceSKILL.md
242If B: run `~/.claude/skills/gstack/bin/gstack-config set routing_declined true` and say they can re-enable with `gstack-config set routing_declined false`.
medium line 246

Access to hidden dotfiles in home directory

SourceSKILL.md
246If `VENDORED_GSTACK` is `yes`, warn once via AskUserQuestion unless `~/.gstack/.vendoring-warned-$SLUG` exists:
medium line 258

Access to hidden dotfiles in home directory

SourceSKILL.md
2583. Run `~/.claude/skills/gstack/bin/gstack-team-init required` (or `optional`)
medium line 260

Access to hidden dotfiles in home directory

SourceSKILL.md
2605. Tell the user: "Done. Each developer now runs: `cd ~/.claude/skills/gstack && ./setup --team`"
low line 266

Access to hidden dotfiles in home directory

SourceSKILL.md
266eval "$(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null)" 2>/dev/null || true
low line 267

Access to hidden dotfiles in home directory

SourceSKILL.md
267touch ~/.gstack/.vendoring-warned-${SLUG:-unknown}
low line 343

Access to hidden dotfiles in home directory

SourceSKILL.md
343_BRAIN_SYNC_BIN="~/.claude/skills/gstack/bin/gstack-brain-sync"
low line 344

Access to hidden dotfiles in home directory

SourceSKILL.md
344_BRAIN_CONFIG_BIN="~/.claude/skills/gstack/bin/gstack-config"
medium line 431

Access to hidden dotfiles in home directory

SourceSKILL.md
431If A/B and `~/.gstack/.git` is missing, ask whether to run `gstack-brain-init`. Do not block the skill.
low line 436

Access to hidden dotfiles in home directory

SourceSKILL.md
436"~/.claude/skills/gstack/bin/gstack-brain-sync" --discover-new 2>/dev/null || true
low line 437

Access to hidden dotfiles in home directory

SourceSKILL.md
437"~/.claude/skills/gstack/bin/gstack-brain-sync" --once 2>/dev/null || true
low line 480

Access to hidden dotfiles in home directory

SourceSKILL.md
480eval "$(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null)"
medium line 635

Access to hidden dotfiles in home directory

SourceSKILL.md
635Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `~/.claude/skills/gstack/bin/gstack-question-preference --check "<id>"`. `AUTO_DECID
low line 639

Access to hidden dotfiles in home directory

SourceSKILL.md
639~/.claude/skills/gstack/bin/gstack-question-log '{"skill":"cso","question_id":"<id>","question_summary":"<short>","category":"<approval|clarification|routing|cherry-pick|feedback-loop>","door_type":"<
low line 648

Access to hidden dotfiles in home directory

SourceSKILL.md
648~/.claude/skills/gstack/bin/gstack-question-preference --write '{"question_id":"<id>","preference":"<pref>","source":"inline-user","free_text":"<optional original words>"}'
low line 668

Access to hidden dotfiles in home directory

SourceSKILL.md
668~/.claude/skills/gstack/bin/gstack-learnings-log '{"skill":"SKILL_NAME","type":"operational","key":"SHORT_KEY","insight":"DESCRIPTION","confidence":N,"source":"observed"}'
medium line 678

Access to hidden dotfiles in home directory

SourceSKILL.md
678`~/.gstack/analytics/`, matching preamble analytics writes.
low line 685

Access to hidden dotfiles in home directory

SourceSKILL.md
685rm -f ~/.gstack/analytics/.pending-"$_SESSION_ID" 2>/dev/null || true
low line 687

Access to hidden dotfiles in home directory

SourceSKILL.md
687~/.claude/skills/gstack/bin/gstack-timeline-log '{"skill":"SKILL_NAME","event":"completed","branch":"'$(git branch --show-current 2>/dev/null || echo unknown)'","outcome":"OUTCOME","duration_s":"'"$_T
low line 690

Access to hidden dotfiles in home directory

SourceSKILL.md
690echo '{"skill":"SKILL_NAME","duration_s":"'"$_TEL_DUR"'","outcome":"OUTCOME","browse":"USED_BROWSE","session":"'"$_SESSION_ID"'","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'"}' >> ~/.gstack/analytics/skill-
low line 693

Access to hidden dotfiles in home directory

SourceSKILL.md
693if [ "$_TEL" != "off" ] && [ -x ~/.claude/skills/gstack/bin/gstack-telemetry-log ]; then
low line 694

Access to hidden dotfiles in home directory

SourceSKILL.md
694~/.claude/skills/gstack/bin/gstack-telemetry-log \
medium line 704

Access to hidden dotfiles in home directory

SourceSKILL.md
704In plan mode before ExitPlanMode: if the plan file lacks `## GSTACK REVIEW REPORT`, run `~/.claude/skills/gstack/bin/gstack-review-read` and append the standard runs/status/findings table. With `NO_RE
low line 795

Access to hidden dotfiles in home directory

SourceSKILL.md
795_CROSS_PROJ=$(~/.claude/skills/gstack/bin/gstack-config get cross_project_learnings 2>/dev/null || echo "unset")
low line 798

Access to hidden dotfiles in home directory

SourceSKILL.md
798~/.claude/skills/gstack/bin/gstack-learnings-search --limit 10 --cross-project 2>/dev/null || true
low line 800

Access to hidden dotfiles in home directory

SourceSKILL.md
800~/.claude/skills/gstack/bin/gstack-learnings-search --limit 10 2>/dev/null || true
medium line 815

Access to hidden dotfiles in home directory

SourceSKILL.md
815If A: run `~/.claude/skills/gstack/bin/gstack-config set cross_project_learnings true`
medium line 816

Access to hidden dotfiles in home directory

SourceSKILL.md
816If B: run `~/.claude/skills/gstack/bin/gstack-config set cross_project_learnings false`
low line 1353

Access to hidden dotfiles in home directory

SourceSKILL.md
1353~/.claude/skills/gstack/bin/gstack-learnings-log '{"skill":"cso","type":"TYPE","key":"SHORT_KEY","insight":"DESCRIPTION","confidence":N,"source":"SOURCE","files":["path/to/relevant/file"]}'
low line 840

Access to .env file

SourceSKILL.md
840ls .env .env.* 2>/dev/null
medium line 868

Access to .env file

SourceSKILL.md
868Scan git history for leaked credentials, check tracked `.env` files, find CI configs with inline secrets.
low line 872

Access to .env file

SourceSKILL.md
872git log -p --all -S "AKIA" --diff-filter=A -- "*.env" "*.yml" "*.yaml" "*.json" "*.toml" 2>/dev/null
low line 873

Access to .env file

SourceSKILL.md
873git log -p --all -S "sk-" --diff-filter=A -- "*.env" "*.yml" "*.json" "*.ts" "*.js" "*.py" 2>/dev/null
low line 876

Access to .env file

SourceSKILL.md
876git log -p --all -G "password|secret|token|api_key" -- "*.env" "*.yml" "*.json" "*.conf" 2>/dev/null
medium line 879

Access to .env file

SourceSKILL.md
879**.env files tracked by git:**
low line 881

Access to .env file

SourceSKILL.md
881git ls-files '*.env' '.env.*' 2>/dev/null | grep -v '.example\|.sample\|.template'
low line 882

Access to .env file

SourceSKILL.md
882grep -q "^\.env$\|^\.env\.\*" .gitignore 2>/dev/null && echo ".env IS gitignored" || echo "WARNING: .env NOT in .gitignore"
medium line 892

Access to .env file

SourceSKILL.md
892**Severity:** CRITICAL for active secret patterns in git history (AKIA, sk_live_, ghp_, xoxb-). HIGH for .env tracked by git, CI configs with inline credentials. MEDIUM for suspicious .env.example val
medium line 894

Access to .env file

SourceSKILL.md
894**FP rules:** Placeholders ("your_", "changeme", "TODO") excluded. Test fixtures excluded unless same value in non-test code. Rotated secrets still flagged (they were exposed). `.env.local` in `.gitig
medium line 940

Access to .env file

SourceSKILL.md
940**Dockerfiles:** For each Dockerfile, check for missing `USER` directive (runs as root), secrets passed as `ARG`, `.env` files copied into images, exposed ports.
medium line 1000

Access to .env file

SourceSKILL.md
1000- `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `env.`, `process.env` (credential access)
low line 1207

Access to .env file

SourceSKILL.md
12071 CRIT 9/10 VERIFIED Secrets AWS key in git history P2 .env:3
low line 151

External URL reference

SourceSKILL.md
151If `LAKE_INTRO` is `no`: say "gstack follows the **Boil the Lake** principle — do the complete thing when AI makes marginal cost near-zero. Read more: https://garryslist.org/posts/boil-the-ocean" Offe
low line 154

External URL reference

SourceSKILL.md
154open https://garryslist.org/posts/boil-the-ocean
Scanned on Jun 9, 2026
View Security Dashboard
Installation guide →