Zeroize Audit
Detects missing or compiler-optimized zeroization of sensitive data with assembly and control-flow analysis
- Type
- Plugin
- Repository
- trailofbits/skills
- GitHub stars
- 7.3k
- License
- CC-BY-SA-4.0
- Repo last updated
- Sep 25, 2026
- Source file
- plugins/zeroize-audit/.claude-plugin/plugin.json
- Version
- 0.3.3
- Author
- Trail of Bits
What Zeroize Audit is
Zeroize Audit is a plugin published in the trailofbits/skills repository on GitHub, which has about 7.3k stars. The repository describes itself as: “Trail of Bits Claude Code skills for security research, vulnerability detection, and audit workflows”
A plugin is a package that bundles skills, slash commands, subagents, hooks, and MCP connectors so they install together. Plugins are plain files with a manifest at .claude-plugin/plugin.json, and they work in both Claude Code and Claude Cowork.
Installing Zeroize Audit adds everything it ships in one step. Connectors inside a plugin still need to be connected separately, and hooks and subagents only run in Cowork and Claude Code, not in regular chat.
How to install Zeroize Audit
Claude Code
- Add the repository as a plugin marketplace: claude plugin marketplace add trailofbits/skills
- Install the plugin: claude plugin install zeroize-audit@<marketplace-name>, using the marketplace name from the repository's .claude-plugin/marketplace.json.
- Restart the session if the new skills or commands don't appear straight away.
Claude Cowork
- Open Customize → Plugins and choose Add marketplace.
- Enter trailofbits/skills (the owner/repo shorthand works for GitHub).
- Find Zeroize Audit in the list, click Install, then connect any connectors it needs from its Connectors tab.
New to extending Cowork? Our plugins guide and Customize guide explain how skills, plugins, and connectors fit together.
Inside the source file
An excerpt from plugins/zeroize-audit/.claude-plugin/plugin.json, shared under the repository's CC-BY-SA-4.0 license. Read the full file on GitHub.
Audits C/C++/Rust code for missing zeroization and compiler-removed wipes. Pipeline: source scan → MCP/LSP semantic context → IR diff → assembly/MIR checks.
Findings
- MISSING_SOURCE_ZEROIZE, PARTIAL_WIPE, NOT_ON_ALL_PATHS
- OPTIMIZED_AWAY_ZEROIZE (IR evidence required)
- REGISTER_SPILL, STACK_RETENTION (assembly evidence required for C/C++; LLVM IR evidence for Rust + optional assembly corroboration)
- SECRET_COPY, INSECURE_HEAP_ALLOC
- MISSING_ON_ERROR_PATH, NOT_DOMINATING_EXITS, LOOP_UNROLLED_INCOMPLETE
Prerequisites
C/C++
- compile_commands.json is required (compile_db input field).
- Codebase must be buildable with commands from the compile DB.
- Required tools: clang, uvx (for Serena MCP server), python3.
which clang uvx python3Rust
- Cargo.toml path is required (cargo_manifest input field).
- Crate must be buildable (cargo check passes).
- Required tools: cargo +nightly toolchain, uv.
# Quick check
cargo +nightly --version
uv --version
# Full preflight validation (checks all tools, scripts, and optionally crate build)
tools/validate_rust_toolchain.sh --manifest path/to/Cargo.toml
tools/validate_rust_toolchain.sh --manifest path/to/Cargo.toml --json # machine-readableGenerate compile_commands.json (C/C++)
CMake
cmake -B build -DCMAKE_EXPORT_COMPILE_COMMANDS=ONMake/Bear
bear -- make -j$(nproc)Usage
C/C++ only:
{ "path": ".", "compile_db": "compile_commands.json" }Rust only:
{ "path": ".", "cargo_manifest": "Cargo.toml" }Mixed C/C++ + Rust:
{
"path": ".",
"compile_db": "compile_commands.json",
"cargo_manifest": "Cargo.toml",
"opt_levels": ["O0", "O1", "O2"],
"mcp_mode": "prefer"
}Full C/C++ input:
{
"path": ".",
"compile_db": "compile_commands.json",
"opt_levels": ["O0", "O1", "O2"],
"languages": ["c", "cpp"],
"config": "skills/zeroize-audit/configs/default.yaml",
"max_tus": 50,
"mcp_mode": "prefer",
"mcp_required_for_advanced": true,
"mcp_timeout_ms": 10000
}Agent Architecture
The analysis pipeline uses 11 agents across 9 phases (0-8), enabling parallel source analysis (C/C++ and Rust simultaneously), per-TU compiler analysis, mandatory PoC validation with verification, and protection against context pressure:
Phase 0: 0-preflight agent — Preflight + config + create workdir + enumerate TUs
Phase 1: Wave 1: 1-mcp-resolver (skip if mcp_mode=off OR language_mode=rust)
Wave 2a: 2-source-analyzer (C/C++ only; skip if no compile_db) ─┐ parallel
Wave 2b: 2b-rust-source-analyzer (Rust only; skip if no cargo_manifest) ─┘
Phase 2: Wave 3: 3-tu-compiler-analyzer x N (C/C++ only; parallel, one per TU)
Wave 3R: 3b-rust-compiler-analyzer (Rust only; single agent, crate-level)
Phase 3: Wave 4: 4-report-assembler (mode=interim → findings.json only)
Phase 4: Wave 5: 5-poc-generator (mandatory; Rust findings marked poc_supported=false)
Phase 5: PoC Validation & Verification
5a: 5b-poc-validator (compile and run all PoCs)
5b: 5c-poc-verifier (verify each PoC proves its claimed finding)
5c: Orchestrator presents verification failures to user
5d: Orchestrator merges all results into poc_final_results.json
Phase 6: Wave 6: 4-report-assembler (mode=final → merge PoC results, report)
Phase 7: Wave 7: 6-test-generator (optional)
Phase 8: Orchestrator — Return final-report.mdAgents write persistent finding files to a shared working directory (/tmp/zeroize-audit-{run_id}/) with namespaced IDs to prevent collisions during parallel execution.
ID Namespaces
Rust Analysis
Rust analysis runs in three layers — source, MIR, and LLVM IR — without requiring a language server (Rustdoc JSON replaces MCP for trait-aware semantics).
Source Layer (2b-rust-source-analyzer)
tools/scripts/semantic_audit.py — Rustdoc JSON trait-aware analysis:
tools/scripts/find_dangerous_apis.py — Token/grep scanner:
MIR Layer (3b-rust-compiler-analyzer)
tools/scripts/check_mir_patterns.py — Mid-level IR pattern analysis:
LLVM IR Layer (3b-rust-compiler-analyzer)
tools/scripts/check_llvm_patterns.py — O0 vs O2 comparison (optional O1/O3 inputs supported):
Assembly Layer (3b-rust-compiler-analyzer)
tools/scripts/check_rust_asm.py — x86-64 AT&T assembly analysis (runs when enable_asm=true). Corroborates LLVM IR findings; confidence upgrades to confirmed are applied by 3b-rust-compiler-analyzer during cross-correlation when symbols match.
Rust-specific handling: symbols are demangled via rustfilt; monomorphized instances of the same generic function are deduplicated (one finding emitted with instance count in evidence). If non-x86-64 assembly is detected, the script writes empty findings and logs a warning (guardrail mode).
Direct Tool Usage (Rust)
# Emit MIR
tools/emit_rust_mir.sh --manifest path/to/Cargo.toml --out /tmp/crate.mir
# Emit MIR for a specific crate in a workspace
tools/emit_rust_mir.sh --manifest path/to/Cargo.toml --crate my-crate --out /tmp/crate.mir
# Emit LLVM IR at O0 and O2
tools/emit_rust_ir.sh --manifest path/to/Cargo.toml --opt O0 --out /tmp/crate.O0.ll
tools/emit_rust_ir.sh --manifest path/to/Cargo.toml --opt O2 --out /tmp/crate.O2.ll
# Analyse source
uv run tools/scripts/semantic_audit.py \
--rustdoc target/doc/mycrate.json --cargo-toml Cargo.toml --out findings.json
uv run tools/scripts/find_dangerous_apis.py --src src/ --out dangerous.json
# Analyse MIR
uv run tools/scripts/check_mir_patterns.py \
--mir /tmp/crate.mir --secrets sensitive-objects.json --out mir-findings.json
… Before you install
- Read the whole file first. Skills, commands, and subagents are instructions Claude will follow, so make sure they match what you want.
- Check which tools, scripts, or MCP servers it uses. Local servers and scripts run with your permissions.
- Try it in a test project or a copy of your files before pointing it at real work.
- Pin the version you tested, and review changes before updating.
- Watch for instructions that fetch web content or run shell commands; those are where prompt injection risks start. See our prompt injection guide.
FAQ
What is Zeroize Audit?
Zeroize Audit is a plugin for Claude Code and Claude Cowork from the trailofbits/skills repository on GitHub. Detects missing or compiler-optimized zeroization of sensitive data with assembly and control-flow analysis
How do I install Zeroize Audit in Claude Code?
Add the repository as a plugin marketplace: claude plugin marketplace add trailofbits/skills Install the plugin: claude plugin install zeroize-audit@<marketplace-name>, using the marketplace name from the repository's .claude-plugin/marketplace.json. Restart the session if the new skills or commands don't appear straight away.
Can I use Zeroize Audit in Claude Cowork?
Open Customize → Plugins and choose Add marketplace. Enter trailofbits/skills (the owner/repo shorthand works for GitHub). Find Zeroize Audit in the list, click Install, then connect any connectors it needs from its Connectors tab.
Is Zeroize Audit safe to install?
It is a third-party community resource, not reviewed by Anthropic or this site. Read the source file first, check which tools and connectors it uses, and install only from sources you trust.
Similar resources
- Semgrep Rule Creator Create custom Semgrep rules for detecting bug patterns and security vulnerabilities Plugin · trailofbits/skills
- Second Opinion Gets independent code reviews from Codex or Antigravity for uncommitted changes, branch diffs, and commits. Plugin · trailofbits/skills
- Semgrep Rule Variant Creator Creates language variants of existing Semgrep rules with proper applicability analysis and test-driven validation Plugin · trailofbits/skills
- Sharp Edges Identify error-prone APIs, dangerous configurations, and footgun designs that enable security mistakes Plugin · trailofbits/skills
- Dotnet C# language server (LSP) integration for coding agents and high-level .NET development skills. Plugin · dotnet/skills
- Yara Authoring YARA-X detection rule authoring with linting and quality analysis Plugin · trailofbits/skills
- Dotnet Ai AI and ML skills for .NET: technology selection, LLM integration, agentic workflows, RAG pipelines, MCP, and classic ML with ML.NET. Plugin · dotnet/skills
- Workflow Skill Design Teaches design patterns for workflow-based Claude Code skills and provides a review agent for auditing existing skills Plugin · trailofbits/skills