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 May 12, 2026 and we found 109 security issues across 5 threat categories, including 4 critical. Review the findings below before installing.

Categories Tested

Security Issues

critical line 1019

Direct command execution function call

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

Direct command execution function call

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

Eval function call - arbitrary code execution

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

Eval function call - arbitrary code execution

SourceSKILL.md
1075- 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 361

Template literal with variable interpolation in command context

SourceSKILL.md
361```bash
medium line 395

Template literal with variable interpolation in command context

SourceSKILL.md
395echo "before relying on \`gbrain search\` for code questions in this worktree."
medium line 523

Template literal with variable interpolation in command context

SourceSKILL.md
523```bash
medium line 930

Template literal with variable interpolation in command context

SourceSKILL.md
930```bash
high line 976

Template literal with variable interpolation in command context

SourceSKILL.md
976**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 1074

System command execution

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

Webhook reference - potential data exfiltration

SourceSKILL.md
758The 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 876

Webhook reference - potential data exfiltration

SourceSKILL.md
876**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 903

Webhook reference - potential data exfiltration

SourceSKILL.md
903Webhook receivers: N
medium line 994

Webhook reference - potential data exfiltration

SourceSKILL.md
994### Phase 6: Webhook & Integration Audit
medium line 998

Webhook reference - potential data exfiltration

SourceSKILL.md
998**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 1004

Webhook reference - potential data exfiltration

SourceSKILL.md
1004**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 1006

Webhook reference - potential data exfiltration

SourceSKILL.md
1006**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 1008

Webhook reference - potential data exfiltration

SourceSKILL.md
1008**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 1210

Webhook reference - potential data exfiltration

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

Webhook reference - potential data exfiltration

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

Webhook reference - potential data exfiltration

SourceSKILL.md
1348"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 370

Access to hidden dotfiles in home directory

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

Access to hidden dotfiles in home directory

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

Access to hidden dotfiles in home directory

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

Access to hidden dotfiles in home directory

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

Access to hidden dotfiles in home directory

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

Access to hidden dotfiles in home directory

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

Access to hidden dotfiles in home directory

SourceSKILL.md
679Before 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 683

Access to hidden dotfiles in home directory

SourceSKILL.md
683~/.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 692

Access to hidden dotfiles in home directory

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

Access to hidden dotfiles in home directory

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

Access to hidden dotfiles in home directory

SourceSKILL.md
722`~/.gstack/analytics/`, matching preamble analytics writes.
low line 729

Access to hidden dotfiles in home directory

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

Access to hidden dotfiles in home directory

SourceSKILL.md
731~/.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 734

Access to hidden dotfiles in home directory

SourceSKILL.md
734echo '{"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 737

Access to hidden dotfiles in home directory

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

Access to hidden dotfiles in home directory

SourceSKILL.md
738~/.claude/skills/gstack/bin/gstack-telemetry-log \
medium line 748

Access to hidden dotfiles in home directory

SourceSKILL.md
748In 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 839

Access to hidden dotfiles in home directory

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

Access to hidden dotfiles in home directory

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

Access to hidden dotfiles in home directory

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

Access to hidden dotfiles in home directory

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

Access to hidden dotfiles in home directory

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

Access to hidden dotfiles in home directory

SourceSKILL.md
1397~/.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 884

Access to .env file

SourceSKILL.md
884ls .env .env.* 2>/dev/null
medium line 912

Access to .env file

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

Access to .env file

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

Access to .env file

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

Access to .env file

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

Access to .env file

SourceSKILL.md
923**.env files tracked by git:**
low line 925

Access to .env file

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

Access to .env file

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

Access to .env file

SourceSKILL.md
936**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 938

Access to .env file

SourceSKILL.md
938**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 984

Access to .env file

SourceSKILL.md
984**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 1044

Access to .env file

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

Access to .env file

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

Unicode escape sequences

SourceSKILL.md
332writes `\u3103` thinking it is 管 U+7BA1, but `\u3103` is
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 May 12, 2026
View Security Dashboard
Installation guide →