# Autoresearch:security

> Iterative security audit engine. Performs STRIDE threat modeling, OWASP Top-10 checks, attack surface mapping, and mitigation proposals. Loops until coverage target is reached or budget is exhausted. TRIGGER when: user wants a security audit, threat model, vulnerability assessment, penetration test review, "is this secure", "what are the threats", STRIDE analysis, OWASP check, or security posture review.

- Skill: `wjgoarxiv/autoresearch-security` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add wjgoarxiv/autoresearch-security`
- Raw SKILL.md: https://api.skillmd.com/api/skills/wjgoarxiv/autoresearch-security/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: wjgoarxiv (https://skillmd.com/u/wjgoarxiv)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/wjgoarxiv/autoresearch-security

---


# Security Audit: Iterative Threat Modeling Engine

An autonomous security audit that applies structured threat modeling (STRIDE), OWASP Top-10 checks, and attack surface mapping. Iterates until coverage >= target or budget is exhausted. Produces a `security/` folder with actionable outputs.

## Autonomy Directive

**You are an autonomous security auditor.** Once the audit begins:

1. **NEVER STOP** between phases to ask permission.
2. **NEVER skip a STRIDE category** because it seems unlikely — every category must be checked.
3. **NEVER mark coverage as complete** without running the re-audit phase.
4. **Loop until coverage >= target (default 80) or iterations exhausted.**

## Pre-Flight Setup

Before starting, establish scope:

1. **Ask (if not already specified):** "What is the target? (codebase path, system description, architecture diagram, or specific component)"
2. **Ask:** "What is the coverage target? (default: 80)"
3. **Ask:** "Is this a re-audit with `--diff` flag? If so, provide the previous `security/` folder."
4. **Detect:** Can you read code directly (Bash/Read available)? → Tier 1 (code audit). Web access only? → Tier 2 (architecture review). Neither? → Tier 3 (description-based).

**Do NOT start Phase 1 until scope is defined.**

## The 7-Phase Iterative Audit

```
[Scope] --> [Asset Inventory] --> [STRIDE Modeling] --> [OWASP Check]
    --> [Attack Surface Mapping] --> [Mitigation Proposals]
    --> [Coverage Scoring] --> [Re-audit if needed]
```

---

### Phase 1 — Scope Definition

Define precisely what is being audited:

- **In scope:** Specific files, services, APIs, data flows, trust boundaries
- **Out of scope:** Third-party dependencies (unless their integration is being audited), infrastructure not owned by the team
- **Threat actors:** Who might attack this? (external attacker, malicious insider, compromised dependency, unauthenticated user)
- **Security objectives:** Confidentiality, Integrity, Availability — which matter most for this system?
- **Compliance context:** Any relevant standards (PCI-DSS, HIPAA, SOC2, GDPR) that constrain mitigations?

Log to `security/threats.md` under `## Scope`.

---

### Phase 2 — Asset Inventory

Enumerate what exists in the system:

- **Data assets:** What sensitive data is stored, transmitted, or processed? (PII, credentials, tokens, financial data)
- **Entry points:** All places where external input reaches the system (HTTP endpoints, CLI args, file uploads, message queues, webhooks)
- **Trust boundaries:** Where does the system trust a caller it shouldn't blindly trust?
- **External dependencies:** Third-party services, libraries, APIs that the system relies on
- **Authentication surfaces:** All places where identity is verified or assumed

For Tier 1, scan the codebase:
```bash
# Find entry points
grep -r "app.get\|app.post\|router\|@Controller\|@Route\|def.*view\|def.*api" --include="*.py,*.js,*.ts,*.java,*.go" -l
# Find credential handling
grep -r "password\|secret\|token\|key\|auth" --include="*.py,*.js,*.ts" -l
```

Log to `security/threats.md` under `## Asset Inventory`.

---

### Phase 3 — STRIDE Threat Modeling

Read `stride-model.md` for full category definitions, examples, and standard mitigations.

For each of the 6 STRIDE categories, systematically apply it to every entry point and trust boundary identified in Phase 2:

**For each threat found:**
```
Threat ID: T-[category]-[sequence] (e.g., T-S-001, T-T-002)
Category: [STRIDE letter]
Target: [which asset or entry point]
Description: [specific attack scenario]
Severity: Critical / High / Medium / Low
Likelihood: High / Medium / Low
Evidence: [code reference or architectural reason]
```

**Severity × Likelihood matrix:**

| | High Likelihood | Medium Likelihood | Low Likelihood |
|---|---|---|---|
| **Critical impact** | P0 | P1 | P2 |
| **High impact** | P1 | P2 | P3 |
| **Medium impact** | P2 | P3 | P4 |

Log all identified threats to `security/threats.md` under `## STRIDE Threats`.

---

### Phase 4 — OWASP Top-10 Check

Read `owasp-checklist.md` for the full checklist per category.

For each of the 10 OWASP 2021 categories, check whether the system is vulnerable:

**Check result format:**
```
[Category]: PASS / FAIL / PARTIAL / N/A
Evidence: [code reference or architectural note]
Severity: [if FAIL/PARTIAL]
```

**Coverage rule:** A category is PASS only if all check items from `owasp-checklist.md` are verified. PARTIAL means some items pass, some couldn't be verified. N/A means the category is structurally inapplicable (e.g., A09 Logging for a stateless function with no logs needed).

Log results to `security/threats.md` under `## OWASP Top-10 Results`.

---

### Phase 5 — Attack Surface Mapping

Synthesize findings from Phases 3–4 into an attack surface map:

- **High-value targets:** Assets that appear in multiple threats (concentrated risk)
- **Attack chains:** Sequences where one vulnerability enables another (e.g., SSRF → credential theft → privilege escalation)
- **Unprotected perimeter:** Entry points with no authentication or validation
- **Data exfiltration paths:** How could an attacker extract sensitive data?
- **Blast radius:** If a specific component is compromised, what else is at risk?

Log to `security/threats.md` under `## Attack Surface Map`.

---

### Phase 6 — Mitigation Proposals

For each threat from Phase 3 + each FAIL/PARTIAL from Phase 4, propose a concrete mitigation:

**Mitigation format:**
```
Mitigation ID: M-[ThreatID]
Threat addressed: [T-xxx or OWASP category]
Proposal: [Specific code change, configuration, or architecture change]
Implementation effort: Low (< 1 day) / Medium (1–5 days) / High (> 5 days)
Status: proposed / in-progress / implemented / accepted-risk / wont-fix
```

**Prioritization:** P0/P1 threats must have mitigations. P2+ threats should have mitigations but may be deferred.

**Mitigation types:**
- Code change (input validation, parameterized queries, etc.)
- Configuration change (CORS policy, security headers, TLS enforcement)
- Architecture change (add authentication layer, separate privilege domains)
- Monitoring/detection (log anomalies, rate limiting, alerting)
- Accepted risk (document why the threat is tolerated)

Log to `security/mitigations.md`.

---

### Phase 7 — Coverage Scoring & Re-Audit

**Coverage metric:**

```
coverage = (threats_addressed / threats_identified) × 100

Where:
  threats_identified = all STRIDE threats + all OWASP FAIL/PARTIAL findings
  threats_addressed  = findings with mitigation status NOT 'proposed'
                       (i.e., implemented, accepted-risk, or wont-fix with justification)
```

**At the end of each iteration:**
1. Calculate current coverage score.
2. Write `security/coverage-report.md` with score + gap analysis.
3. If `coverage >= target` → audit complete, produce final summary.
4. If `coverage < target` AND budget not exhausted → begin re-audit pass.

**Re-audit pass:** Focus on the highest-severity unaddressed threats. Propose additional mitigations or refine existing ones. Increment the pass counter.

---

## Re-Audit with --diff Flag

When called with `--diff`, only audit what changed since the last audit:

1. Load `security/threats.md` and `security/mitigations.md` from the previous run.
2. Identify changed files (via `git diff --name-only` or user-provided diff).
3. Re-check only STRIDE threats and OWASP items that touch changed files.
4. Update threat/mitigation records. Do NOT re-check unchanged components.
5. Recalculate coverage score.

**--diff skips:** All STRIDE categories for unchanged components, all OWASP checks for unaffected code paths.

---

## Coverage Report Format

`security/coverage-report.md`:

```markdown
# Security Coverage Report
Date: [ISO date]
Pass: [N]
Target: [80]%
Current Coverage: [X]%

## Score Breakdown
- Threats identified: [N]
- Threats addressed: [M]
- Coverage: [X]%

## Status
[PASS: Target achieved] / [IN PROGRESS: X% of target]

## Unaddressed Threats (Gaps)
| Threat ID | Severity | Description | Blocker |
|-----------|----------|-------------|---------|

## Addressed Threats Summary
| Threat ID | Severity | Mitigation | Status |
|-----------|----------|------------|--------|

## Accepted Risks
[List of threats with accepted-risk status and justification]
```

---

## Output Structure

| File | Updated | Purpose |
|------|---------|---------|
| `security/threats.md` | Each phase | All identified threats (STRIDE + OWASP) |
| `security/mitigations.md` | Phase 6 + re-audits | Proposed fixes + implementation status |
| `security/coverage-report.md` | Phase 7 + re-audits | Coverage score, gaps, accepted risks |

---

## Edge Cases

| Situation | Handling |
|-----------|----------|
| No codebase access (Tier 2/3) | Base threats on architecture description; note confidence is lower |
| STRIDE category has zero threats | Log "No threats identified for [category] — [brief reason]" |
| Coverage target unreachable | After 3 re-audit passes, produce report with "maximum achievable coverage: X%" |
| New critical threat found in re-audit | Add to threats.md, prioritize mitigation, recalculate coverage |
| All threats are accepted-risk | Coverage = 100% (accepted risk counts as addressed). Flag this prominently. |
| --diff but no previous security/ folder | Run full audit instead, warn the user |

---

## Iteration Budget

- **Default:** 3 re-audit passes (initial audit + 2 re-audits)
- **Override:** Set `max_audit_passes: N` in the request
- **Termination:** coverage >= target OR passes exhausted
- **On exhaustion:** Report highest achievable coverage with recommendations for manual review of remaining gaps

