| name | secure |
| dimension | control_and_safety |
| description | Security review checklist with optional engagement scoping. Use when auth, DB, API, infra, or secrets code is touched. |
Secure — Security Review
Iron Law
NO DEPLOYMENT WITHOUT SECURITY REVIEW OF ALL CHANGED FILES. Every code change is a potential attack vector.
Process
Step 0: Load Engagement Context (Optional)
Check for engagement scoping:
cat .harness/engagement.md 2>/dev/null
If .harness/engagement.md exists:
- Parse the Scope, Constraints, and Exclusions sections
- Restrict security checks to in-scope components
- Apply rules of engagement (method, rate limits, no-exfil rules)
- Skip findings matching exclusion patterns
- Include engagement reference in report header
If not found: apply full OWASP Top 10 checklist (default behavior). No scope restrictions.
See references/engagement.md for the engagement file format.
Step 1: Identify Security-Relevant Changes
Identify security-relevant changes from the diff (auth, DB, API, infra, secrets).
Step 2: Run Checklist
Run the Checklist below, marking each item as pass, fail, or N/A with reason.
Step 3: Report
For each failure, cite the file and line number with severity (CRITICAL/HIGH/MEDIUM).
Report findings using the Evidence Required section.
When to Trigger
- Authentication or authorization code changed
- Database queries written or modified
- API endpoints added or changed
- Environment variables or secrets referenced
- File upload, user input parsing, or serialization code
- Infrastructure config (Docker, K8s, CI/CD)
Checklist
Injection
Authentication & Authorization
Data Exposure
Access Control
See references/security.md for the full OWASP Top 10 checklist.
Anti-Rationalization
| Excuse | Rebuttal | What to do instead |
|---|
| "This is internal-only, no security risk" | Internal tools get exposed. Assume every endpoint is public-facing. | Apply the same security standards as public APIs. |
| "We'll add security later" | Security debt compounds exponentially. Fix it now or pay 10x later. | Build it secure from the start. Retrofitting misses edge cases. |
| "The framework handles security" | Frameworks provide tools, not guarantees. OWASP Top 10 still applies. | Verify framework defaults and add application-layer checks. |
| "Security review is overkill for this" | One missed injection is a breach. Every input surface matters. | Run the checklist. It takes 2 minutes, a breach takes months. |
| "We'll harden it before production" | Security bolted on later is always incomplete. | Build it secure now. Retrofitting misses edge cases. |
| "It's an internal API, no one will abuse it" | Lateral movement attacks start from internal APIs. | Internal does not mean trusted. Validate and authorize every request. |
| "I'll just disable CORS for development" | Dev shortcuts leak into production. | Use a proper CORS allow-list from day one. |
| "Engagement scoping is bureaucratic overhead" | Unscoped assessments waste time on irrelevant surface area. | Define scope once, get focused results. Opt-in only. |
Evidence Required
Before claiming security review is complete, show ALL applicable:
A blank checklist is not a review. Each item needs a pass or N/A.
Red Flags
- Storing secrets in code or config files committed to git
- Using
HTTP instead of HTTPS for sensitive data
eval() or string-concatenated SQL anywhere
- Skipping engagement scope when
.harness/engagement.md is present
- Reporting findings outside authorized scope as blockers (informational only)