user-scope-skills/cso/SKILL.md
Use when performing security audits, vulnerability scanning, or threat modeling. Two modes: Daily (zero-noise quick scan) and Comprehensive (monthly deep audit). Observation only — no code changes, no exploitation. Triggers: "/cso", "security audit", "보안 점검", "보안 감사", "취약점 분석", "threat model", "OWASP check", "security scan", "시크릿 검사", "dependency audit", "의존성 감사"
npx skillsauth add onejaejae/skills csoInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Systematic security audit with OWASP Top 10 coverage, STRIDE threat modeling, and false-positive filtering.
OBSERVATION ONLY.
No code changes. No exploitation. No inline fix suggestions.
Every finding requires: file:line + pattern match + confidence score.
Violating the letter of this rule IS violating the spirit.
| Skill | Purpose | Pick when | |-------|---------|-----------| | /cso | Systematic security audit with structured report | Need comprehensive or quick security check | | /check | Pre-push rule validation | Verifying changes against project rules | | /investigate | Root cause debugging | Debugging a specific bug |
Daily (default): Zero-noise scan. Only findings with confidence >= 8/10. Fast, focused. Comprehensive: Monthly deep scan. Findings with confidence >= 2/10. Includes STRIDE. Thorough.
Select mode:
Phase 0: Project Detection
↓
Phase 1: Parallel Scan (5 categories)
↓
Phase 2: STRIDE Threat Model (COMPREHENSIVE only)
↓
Phase 3: False-Positive Filtering
↓
Phase 4: Confidence Gating
↓
Phase 5: Trend Comparison
↓
Phase 6: Report
Detect project type to scope the audit:
.dev/security/ for previous audit reportsLaunch 5 agents concurrently, each with a specific focus:
Agent 1: Secrets Scanner
.env files committed to gitgit log -p --all -S 'password')Agent 2: Dependency Auditor
pip-audit / npm audit / go vuln check (whichever applies)Agent 3: OWASP Code Patterns
references/owasp-top10-checklist.mdAgent 4: Infrastructure Scanner
Agent 5: Configuration Auditor
Each agent returns findings in this format:
| Severity | Category | Location | Description | Confidence |
|----------|----------|----------|-------------|------------|
| CRITICAL | A02 | constant.py:3 | Hardcoded webhook URL with token | 9/10 |
Synthesize Phase 1 results through STRIDE framework:
Read references/false-positive-filters.md. Apply all 17 filters to each finding.
For each finding, check:
Log every filter application:
| Finding | Filter Applied | Action |
|---------|---------------|--------|
| constant.py:3 webhook URL | #13 Internal-Only Webhook | Confidence 9→4 |
| constant.py:7 GITHUB_APP_ID | #14 Public GitHub App ID | EXCLUDED |
Excluded findings are logged but not shown in the main report.
If previous audit exists in .dev/security/:
If no previous audit: skip this phase, note "First audit — no trend data."
Save to .dev/security/{YYYY-MM-DD}-{daily|comprehensive}.md:
# Security Audit Report
## Meta
- Mode: DAILY / COMPREHENSIVE
- Date: {date}
- Project: {project name}
- Confidence threshold: {8 or 2}/10
## Summary
- Total findings (pre-filter): X
- After false-positive filter: Y
- After confidence gate: Z
- Severity breakdown: X CRITICAL, Y HIGH, Z MEDIUM, W LOW
## Findings
| # | Severity | OWASP | Location | Description | Confidence | Status |
|---|----------|-------|----------|-------------|------------|--------|
| 1 | HIGH | A01 | main.py:104 | No webhook signature verification | 9/10 | NEW |
## OWASP Top 10 Coverage Matrix
| Category | Checked | Findings | Notes |
|----------|---------|----------|-------|
| A01 Broken Access Control | Y | 2 | ... |
| A02 Cryptographic Failures | Y | 1 | ... |
| ... | | | |
## False-Positive Filter Log
| Finding | Filter | Action |
|---------|--------|--------|
| ... | ... | ... |
## Trend (vs previous audit)
- NEW: X findings
- PERSISTENT: Y findings
- RESOLVED: Z findings
| Excuse | Reality | |--------|---------| | "이건 바로 고칠 수 있으니 수정하겠습니다" | Observation only. Report it, don't fix it. | | "당연히 CRITICAL이죠" | Every finding needs a confidence score. No defaults. | | "테스트 파일의 시크릿도 위험합니다" | Apply false-positive filters. Test fixtures are Filter #1. | | "OWASP A03~A10은 해당 없습니다" | "해당 없음" is a valid result, but you MUST check each one and explain why. | | "빠른 체크라서 일부만 보면 됩니다" | Daily mode reduces noise via confidence gate, not by skipping categories. | | "Webhook URL이 노출되면 위험합니다" | Apply Filter #13. Google Chat webhooks use URL-based auth — assess actual risk. | | "App ID가 노출되면 위험합니다" | Apply Filter #14. GitHub App ID is public. Only private key is secret. |
testing
CLAUDE.md 기반 환경 안전 체크. 작업 시작 전에 프로젝트의 안전 규칙, 컨벤션, 환경 설정을 자동 검증하여 CLEAR/WARNING/BLOCKED 상태를 보고한다. /check가 "변경 후 검증"이라면, /pre-flight는 "작업 전 환경 검증"이다. Use PROACTIVELY before starting work, especially after switching branches, pulling changes, or resuming a session. Also use when explicitly asked: "/pre-flight", "프리플라이트", "환경 체크", "작업 전 점검", "안전 체크", "environment check", "pre-flight check", "시작해도 돼?", "환경 괜찮아?", "safety check", "DB 확인", "설정 확인", "config check".
tools
PR 리뷰 워크플로우와 체크리스트를 제공하는 스킬. "PR 리뷰해줘", "코드 리뷰 해줘", "이 PR 봐줘", "review this PR" 등 PR 리뷰 요청 시 사용. GitHub/GitLab PR URL 또는 로컬 브랜치 diff를 기반으로 체계적이고 일관된 리뷰를 수행. 코드 품질, 안정성/보안, 성능, 테스트, 문서화 관점에서 건설적인 피드백 제공.
documentation
PR review comments를 체계적으로 처리하는 skill. Use when: (1) PR에 동료의 리뷰가 달렸을 때, (2) 여러 리뷰를 한 번에 처리하고 싶을 때, (3) 수정 후 commit 링크가 포함된 reply를 자동으로 추가하고 싶을 때
tools
PR diff를 받아 코드 리뷰 자동 요약을 생성하는 스킬. 핵심 변경점을 3줄로 요약하고, 변경 파일별로 what changed / why it matters / risk level을 정리. Use when: "PR 요약", "diff 요약", "PR 변경점 정리", "코드 변경 요약", "summarize PR", "PR summary", "diff summary", "what changed in this PR", "변경점 요약해줘", "PR 핵심 정리", "리뷰 요약"