Audit machines for CVE exposure without changing state
Runs a read-only local security audit for a CVE or advisory and writes a dated, permanent Markdown report.
Why it matters
Generate read-only security audit reports that determine whether a user's machine or projects are affected by a specific CVE, breach, or package advisory, producing a timestamped markdown report with concrete findings and actionable follow-ups.
Outcomes
What it gets done
Scan installed packages across npm, pip, Homebrew, and other ecosystems for vulnerable versions
Check running processes, network listeners, and LaunchAgents for active exposure vectors
Build evidence tables showing exact versions, paths, and presence/absence of affected components
Write timestamped audit reports with clear verdicts (Not affected / Affected / Partially affected) and remediation steps
Install
Add it to your toolbox
Run in your project directory:
curl -fsSL https://spark.entire.vc/get/ag-cyber-audit | bash Overview
Cyber Audit
Runs a strictly read-only local audit checking whether a CVE, breach, or package advisory affects the machine, then writes a dated, permanent Markdown report with a clear Affected/Not affected/Partially affected verdict. Use it whenever a CVE or advisory needs a local exposure check. Never breaks read-only on its own - remediation commands go in the report for the user to run.
What it does
Runs a read-only local security-exposure audit answering whether the user's machine or projects are affected by a specific CVE, breach, or package advisory, then writes a dated Markdown report to a fixed audits folder as the permanent record of the check, even when the verdict is "not affected."
When to use - and when NOT to
Use it when the user asks whether their machine or projects are affected by a CVE, breach, or package advisory, or when a read-only local security exposure report is the appropriate response. It is strictly read-only: no installs, removes, upgrades, restarts, network calls, or file modifications outside the audit-reports folder, and sudo is never used. If a check would require a state-changing command, it is skipped and marked "not checked (would require state change)" in the results table rather than run. The rule against breaking read-only never bends on its own: if the verdict comes back "Affected," the remediation command goes in the report's Follow-ups section and the audit stops there - the user runs it themselves.
Integrations
The report itself follows a fixed template: a title and date header naming the host, the CVE or advisory in scope with a one-line description and affected versions, an audit-results table, a verdict section, an "action taken" line that always states nothing was installed, removed, or changed since the audit is diagnostic only, and a follow-ups section. Verdict wording is precise and consistent: "Not affected" means the package or binary is absent, patched, or not running and not exposed; "Affected" means a vulnerable version is present and reachable by the attack vector; and "Partially affected" means the package is present but mitigated, for instance installed but not running or a listener bound only to loopback, with the mitigation spelled out in the report's bullets. Tone matches the two existing reference reports already sitting in the audits folder: terse, factual, bulleted, with no hedging language anywhere. One of those references, a long-form baseline audit, uses a deliberately different layout and should not be copied; the other, a dated example-advisory report (plus any newer dated advisory reports alongside it), is the actual format this skill's own output should match line for line. The date stamped into both the filename and the report body always comes from the current environment's own date, never guessed or left blank.
Who it's for
Anyone who needs a fast, honest, read-only answer to "am I affected by this?" for a specific CVE or advisory, backed by a permanent, dated audit-trail report rather than a verbal yes-or-no with nothing to show for it later.
Source README
cyber-audit
When to Use
- Use when the user asks whether their machine or projects are affected by a CVE, breach, or package advisory.
- Use when a read-only local security exposure report is appropriate.
Hard rules
- Read-only. No installs, removes, upgrades, restarts, network calls, or file modifications outside
~/Documents/security-audits/. - No
sudo. Never. - One report per invocation. Always end by writing the
.mdfile (even if the verdict is "Not affected" - the audit trail matters). - If a check requires a state-changing command, skip it and note "not checked (would require state change)" in the table. Do not run it.
Workflow
- Identify scope. Extract from the advisory: package/binary name, affected versions, platform (macOS / Linux / Windows), attack vector (supply chain / RCE / local / network).
- Run checks in parallel (Bash tool, multiple calls in one message). Pick relevant checks for the advisory type - don't run all of them.
- Build the table as you go. Each row = one check + concrete result (version number, path, "None", "N/A").
- Write the report to
~/Documents/security-audits/YYYY-MM-DD-<short-kebab-slug>.md. Use today's date from the environment header. - Tell the user the verdict in one line + path to the report.
Check menu (pick what's relevant)
### --- Node / npm ecosystem (supply-chain advisories) ---
which npm pnpm yarn; npm root -g; pnpm root -g 2>/dev/null
ls /opt/homebrew/lib/node_modules # global npm
find ~ -maxdepth 8 -type d -name "<pkg>" 2>/dev/null \
| grep -v -E "(Library/Caches|\.Trash)" # installed copies
find ~/Documents ~/Desktop ~/Downloads -maxdepth 8 -type f \
\( -name "package.json" -o -name "package-lock.json" \
-o -name "pnpm-lock.yaml" -o -name "yarn.lock" \) 2>/dev/null \
| xargs grep -l "<pkg>" 2>/dev/null # direct + transitive
### --- Python ecosystem ---
which python3 pip pipx uv
pip list 2>/dev/null | grep -i "<pkg>"
find ~/Documents -maxdepth 6 -name "requirements*.txt" -o -name "pyproject.toml" \
-o -name "poetry.lock" -o -name "uv.lock" 2>/dev/null | xargs grep -l "<pkg>" 2>/dev/null
### --- Homebrew / system binaries ---
brew list --versions <formula> 2>/dev/null
which <binary>; <binary> --version 2>/dev/null
### --- Running processes / listeners (for RCE / network CVEs) ---
pgrep -lf "<binary>"
lsof -iTCP -sTCP:LISTEN -P -n 2>/dev/null | grep "<port>"
### --- LaunchAgents / LaunchDaemons (persistence / autostart) ---
ls ~/Library/LaunchAgents /Library/LaunchAgents /Library/LaunchDaemons 2>/dev/null \
| grep -i "<vendor>"
### --- Env vars that change exposure (e.g. OLLAMA_HOST, listening addr) ---
launchctl getenv <VAR>; grep -r "<VAR>" ~/.zshrc ~/.zprofile ~/.config 2>/dev/null
### --- VS Code / browser extensions (for IDE-targeted advisories) ---
ls ~/.vscode/extensions 2>/dev/null | grep -i "<ext>"
If the advisory mentions an ecosystem not above (Rust cargo, Go modules, Ruby gems, Docker images, etc.), apply the same pattern: global install path + manifest grep + running processes.
Report template
File: ~/Documents/security-audits/YYYY-MM-DD-<short-kebab-slug>.md
### <Subject> — Audit
**Date:** YYYY-MM-DD
**Host:** the user's Mac
### <CVEs | Advisory> in scope
- **<ID or source> "<Name>"** — <one-line description>. <Affected versions or scope>.
### Audit results
| Check | Result |
|---|---|
| <Check 1> | <Result> |
| <Check 2> | <Result> |
### Verdict
**<Not affected. | Affected. | Partially affected.>**
- <Rationale bullet 1>
- <Rationale bullet 2>
### Action taken
None — diagnostic only, no files modified, no <packages installed/removed | services started/stopped | firewall rules changed>.
### Follow-ups
- <Actionable item, or "None" if truly nothing>
Match the tone of the two existing reports in ~/Documents/security-audits/ - terse, factual, bulleted, no hedging.
Verdict wording
- Not affected. - package/binary absent, or installed but patched, or not running and not exposed.
- Affected. - vulnerable version present and reachable by the attack vector.
- Partially affected. - present but mitigated (e.g. binary installed but service not running, or listener bound to loopback only). Spell out the mitigation in the bullets.
When to break the read-only rule
Never on your own. If the verdict is "Affected", list the remediation command in Follow-ups and stop. The user runs it.
Reference
Two existing reports in ~/Documents/security-audits/ show the expected style:
baseline-audit.md(long-form baseline audit - different format, do not mimic)YYYY-MM-DD-example-advisory.mdand any newerYYYY-MM-DD-*.mdfiles (this is the format to match)
Limitations
- Adapted from
davidondrej/skills; verify local paths, tools, credentials, and agent features before acting. - For commands, remote access, scheduling, browser automation, or file-changing workflows, get explicit user approval and confirm the target environment first.
FAQ
Common questions
Discussion
Questions & comments · 0
Sign In Sign in to leave a comment.