<!-- SPDX-License-Identifier: MIT -->
<!-- SPDX-FileCopyrightText: 2025-2026 Marcus Quinn -->

# t1412.13: Security Audit Sweep Results

## Date

2026-03-07

## Scope

All pulse-enabled repos in `~/.config/aidevops/repos.json` (8 repos).

## Summary

| Metric | Count |
|--------|-------|
| Repos scanned | 8 |
| Repos with critical findings | 7 |
| Repos with warnings | 8 |
| Repos with AI/LLM deps | 3 |
| Total critical findings | 11 |
| Total warnings | 54 |
| Issues filed | 8 |

## Repos Audited

| Repo | Critical | Warnings | AI/LLM Deps | Issues Filed |
|------|----------|----------|-------------|--------------|
| marcusquinn/aidevops | 3 | 14 | `openai`, `litellm` (requirements.txt) | [#3099](https://github.com/marcusquinn/aidevops/issues/3099) |
| marcusquinn/aidevops.sh | 1 | 4 | None | [#62](https://github.com/marcusquinn/aidevops.sh/issues/62) |
| marcusquinn/cloudron-netbird-app | 1 | 4 | None | [#27](https://github.com/marcusquinn/cloudron-netbird-app/issues/27) |
| marcusquinn/turbostarter-plus | 0 | 8 | `@ai-sdk/openai`, `ai`, `@ai-sdk/react` (nested) | [#98](https://github.com/marcusquinn/turbostarter-plus/issues/98), [#99](https://github.com/marcusquinn/turbostarter-plus/issues/99) |
| webapp/webapp | 3 | 10 | `@ai-sdk/openai`, `ai`, `@ai-sdk/react` (nested) | private issue refs |
| essentials-com/essentials.com | 1 | 4 | None | [#63](https://github.com/essentials-com/essentials.com/issues/63) |
| marcusquinn/quickfile-mcp | 1 | 7 | `@modelcontextprotocol/sdk` (MCP server) | [#38](https://github.com/marcusquinn/quickfile-mcp/issues/38), [#39](https://github.com/marcusquinn/quickfile-mcp/issues/39) |
| marcusquinn/aidevops-cloudron-app | 1 | 3 | None | [#24](https://github.com/marcusquinn/aidevops-cloudron-app/issues/24) |

## Critical Findings

### 1. Branch protection missing (7 repos)

All repos except turbostarter-plus have no branch protection on the default branch. PRs can be merged without review.

### 2. GitHub Actions injection risk (2 repos)

- **aidevops**: `issue-sync.yml` and `review-bot-gate.yml` use `${{ github.event.* }}` context directly in shell `run` steps, creating injection risk from untrusted PR/issue titles.
- **webapp**: `issue-sync.yml` has the same pattern.

### 3. GitHub Actions not SHA-pinned (4 repos)

10 workflow files in aidevops, plus workflows in webapp, turbostarter-plus, and quickfile-mcp have actions pinned to tags/branches instead of SHA hashes.

## Warning Findings (common across repos)

- Missing `SECURITY.md` (6 repos)
- No automated dependency updates via Dependabot/Renovate (7 repos)
- `.gitignore` missing common secret patterns (5 repos)
- No `review-bot-gate.yml` workflow (6 repos)
- PR reviews not required (7 repos)
- No required status checks (7 repos)

## AI/LLM Dependency Findings

### Vercel AI SDK (high priority for defender integration)

1. **turbostarter-plus** — `@ai-sdk/openai`, `ai` in `overlay/packages/api/`, `@ai-sdk/react` in `overlay/apps/web/`
2. **webapp** — `@ai-sdk/openai`, `ai` in `packages/api/`, `@ai-sdk/react` in `apps/web/` and `apps/mobile/`

### MCP server (medium priority)

3. **quickfile-mcp** — `@modelcontextprotocol/sdk`. MCP server outputs consumed by AI agents. Free-text fields from QuickFile API are potential injection vectors.

### Framework tooling (low priority, already defended)

4. **aidevops** — `openai`, `litellm` in `requirements.txt`. Used by framework scripts. Already has `prompt-guard-helper.sh`.

## AGENTS.md Security Sections

All 8 repos already have tailored `## Security` sections in `.agents/AGENTS.md` (added by t1412.12). No further updates needed.

## Conclusion

The managed repo portfolio has a **moderate security posture** with common gaps:

- **Strengths**: CI workflows with AI agent triggers have proper collaborator gating. No `pull_request_target` abuse. Framework repo has comprehensive security documentation. All repos have project-specific security guidance in `.agents/AGENTS.md`.
- **Gaps**: Branch protection missing on most repos. GitHub Actions not SHA-pinned. Two product repos use Vercel AI SDK without `@stackone/defender`. Missing SECURITY.md and Dependabot across most repos.
- **Next steps**: Issues filed per repo for maintainers/workers to implement. Future `aidevops init` (t1412.11) will automate these checks for new repos.
