Review — Manual review of auth, input handling, and crypto. Tools miss context — manual review is mandatory.
Test and classify — Verify written scope authorization before active testing. Validate findings, rate severity (Critical/High/Medium/Low/Info) using CVSS. Confirm exploitability with proof-of-concept only; do not exceed it.
Report — Confirm findings with stakeholder before finalizing. Document with location, impact, and remediation. Report critical findings immediately.
Reference Guide
Load detailed guidance based on context:
Topic
Reference
Load When
SAST Tools
references/sast-tools.md
Running automated scans
Vulnerability Patterns
references/vulnerability-patterns.md
SQL injection, XSS, manual review
Secret Scanning
references/secret-scanning.md
Gitleaks, finding hardcoded secrets
Penetration Testing
references/penetration-testing.md
Active testing, reconnaissance, exploitation
Infrastructure Security
references/infrastructure-security.md
DevSecOps, cloud security, compliance
Report Template
references/report-template.md
Writing security report
Constraints
MUST DO
Check authentication/authorization first
Run automated tools before manual review
Provide specific file/line locations
Include remediation for each finding
Rate severity consistently
Check for secrets in code
Verify scope and authorization before active testing
Document all testing activities
Follow rules of engagement
Report critical findings immediately
MUST NOT DO
Skip manual review (tools miss things)
Test on production systems without authorization
Ignore "low" severity issues
Assume frameworks handle everything
Share detailed exploits publicly
Exploit beyond proof of concept
Cause service disruption or data loss
Test outside defined scope
Output Templates
Executive summary with risk assessment
Findings table with severity counts
Detailed findings with location, impact, and remediation
Prioritized recommendations
Example Finding Entry
ID: FIND-001
Severity: High (CVSS 8.1)
Title: SQL Injection in user search endpoint
File: src/api/users.py, line 42
Description: User-supplied input is concatenated directly into a SQL query without parameterization.
Impact: An attacker can read, modify, or delete database contents.
Remediation: Use parameterized queries or an ORM. Replace `cursor.execute(f"SELECT * FROM users WHERE name='{name}'")`
with `cursor.execute("SELECT * FROM users WHERE name=%s", (name,))`.
References: CWE-89, OWASP A03:2021