skills/security-review/SKILL.md
Security analysis with applicability-aware activation: STRIDE threat modeling only when the task introduces attack surface, trust-boundary, auth, data, or external-integration change; OWASP Top 10 vulnerability scanning per-diff post-execution (Phase 5).
npx skillsauth add bigeasyfreeman/adlc security-reviewInstall 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.
Every task gets a security decision. Active security surfaces get a STRIDE overlay; inactive surfaces get an explicit not_applicable reason. This is not optional, not a separate review — it is baked into the ADLC pipeline at two critical points.
Before generating a STRIDE table, record the security applicability decision:
| Field | Purpose |
|-------|---------|
| security_applicability.status | active or not_applicable |
| security_applicability.reason | Concrete reason tied to task class or repo evidence |
| security_applicability.trigger_fields | Which manifest fields activated or suppressed the overlay |
| security_applicability.manifest_ref | Pointer to the upstream applicability manifest entry |
If the status is not_applicable, do not invent a STRIDE table. Record the suppression and move on.
Run during brief generation when the security overlay is active. Per task, analyze all six STRIDE categories:
| Threat | Key Question | What to Look For | |--------|-------------|-----------------| | Spoofing | Can an attacker impersonate a legitimate actor? | Missing auth, weak identity verification, token theft vectors | | Tampering | Can data be modified in transit or at rest? | Missing integrity checks, unsigned data, mutable shared state | | Repudiation | Can actions be denied without evidence? | Missing audit logging, unsigned transactions, no correlation IDs | | Information Disclosure | Can sensitive data leak? | PII in logs, verbose errors, missing encryption, exposed internals | | Denial of Service | Can availability be degraded? | Missing rate limiting, unbounded queries, resource exhaustion paths | | Elevation of Privilege | Can an actor gain unauthorized access? | Missing authz checks, privilege escalation, role confusion |
| Rating | Definition | Action | |--------|-----------|--------| | Low | Minimal impact, unlikely exploitation | Document, address in future work | | Medium | Moderate impact or moderate likelihood | Mitigate in this task | | High | Significant impact or high likelihood | Must mitigate before execution. Blocks pipeline. | | Critical | Data breach, full compromise, or safety risk | Blocks pipeline. Requires human review. |
Per task in the brief:
### STRIDE Threat Model — [Task Title]
| Threat | Analysis | Risk | Mitigation Required |
|--------|----------|------|-------------------|
| Spoofing | [analysis] | L/M/H/C | [mitigation or N/A] |
| Tampering | [analysis] | L/M/H/C | [mitigation or N/A] |
| Repudiation | [analysis] | L/M/H/C | [mitigation or N/A] |
| Information Disclosure | [analysis] | L/M/H/C | [mitigation or N/A] |
| Denial of Service | [analysis] | L/M/H/C | [mitigation or N/A] |
| Elevation of Privilege | [analysis] | L/M/H/C | [mitigation or N/A] |
Mitigations marked "Required" become the Security Contract in the codegen context — the executor MUST implement them.
SWElfare (Software Engineering):
Ratatosk (Investment Operations):
Magnus (Content Operations):
Run on every diff at Phase 5 (Post-Execution Quality Gate).
| # | Vulnerability | Detection Patterns | |---|--------------|-------------------| | A01 | Broken Access Control | Missing auth decorators near routes, direct object references without ownership check, missing RBAC | | A02 | Cryptographic Failures | md5/sha1 usage, hardcoded secrets (API_KEY=, SECRET=, PASSWORD= in literals), missing encryption at rest | | A03 | Injection | f-strings/%-format in SQL, os.system/subprocess with string concat, eval/exec, template injection | | A04 | Insecure Design | Missing rate limiting on endpoints, no trust boundary validation, missing input size limits | | A05 | Security Misconfiguration | DEBUG=True in production, verbose error responses, default credentials, unnecessary features enabled | | A06 | Vulnerable Components | Known CVEs in dependencies (requires external scanning tool integration) | | A07 | Auth Failures | Hardcoded passwords, missing password complexity, weak session management, missing MFA | | A08 | Data Integrity Failures | pickle.loads, yaml.load without SafeLoader, missing signature verification, insecure deserialization | | A09 | Logging Failures | except blocks without logging, missing security event logging, insufficient audit trail | | A10 | SSRF | requests.get/post with user-controlled URLs, unvalidated redirect targets, internal network access |
| Severity | Definition | Pipeline Action | |----------|-----------|----------------| | Info | Best practice suggestion | Log, no block | | Low | Minor issue, limited exploitability | Log, no block | | Medium | Moderate risk, requires attention | Log, flag for review | | High | Significant vulnerability | BLOCKS pipeline | | Critical | Active exploitation risk, data breach potential | BLOCKS pipeline, requires human review |
{
"findings": [
{
"category": "A03",
"category_name": "Injection",
"severity": "high",
"file_path": "src/api/users.py",
"line_number": 42,
"description": "SQL query constructed with f-string using user input",
"remediation": "Use parameterized queries via SQLAlchemy or psycopg2 params"
}
],
"has_blocking_findings": true,
"severity_level": "high",
"summary": "OWASP scan: 1 high finding(s)."
}
| Excuse | Rebuttal | |--------|---------| | "This is an internal API, no one will attack it" | Internal APIs get compromised via lateral movement. STRIDE applies regardless. | | "We'll add auth later" | Auth is structural. Retrofitting it is 10x harder and 100x riskier. | | "The input is trusted" | Trust boundaries must be explicit and documented. If it crosses a boundary, validate. | | "It's just a prototype" | Prototypes become production. Security debt compounds faster than tech debt. | | "STRIDE is overkill for this change" | The analysis takes 2 minutes. A breach costs months. Always analyze. |
development
Orchestration skill: chains the full ADLC Build Loop. PRD → Brief → Council → Scaffold → Codegen → LDD → TDD → Council → PR. Use when implementing a new feature end-to-end.
development
# Skill: Helm & ArgoCD Deployment > Validates Helm charts and generates ArgoCD Application manifests when the ADLC pipeline produces infrastructure or service code. Ensures every deployable artifact has correct chart structure, environment-specific values, and a GitOps-ready Application manifest before code review. --- ## Why This Exists Without deployment validation in the pipeline, common failures slip through to production: - **Helm charts fail `helm template`** because of missing values,
testing
Decide whether an intersecting verifier actually exercises the semantic change.
development
# Skill: UX Flow Builder > Generates user flow diagrams (Mermaid) from PRD personas and screen specifications. Surfaces dead ends, missing screens, and disconnected flows before design or engineering starts. Helps PMs think in screens, not features. --- ## Trigger - Automatically during PRD Phase 4 (Personas & Flows) to visualize the user journey - On-demand when the PM says "show me the flow" or "map the user journey" - During PRD evaluation to verify screen connectivity --- ## Input ```