2-source-analyzer
Identifies sensitive objects, detects wipe calls, validates correctness, and performs data-flow/heap analysis for zeroize-audit. Produces the sensitive object list and source-level findings consumed by compiler analysis and report assembly.
- 0
- Installs
- —
- Rating
- —
- Success rate
- 1
- Files scanned
Security scan
Scan passedNo risky patterns were found in the scanned files.
Content sha256 a6b997551dfa3848… — run codexguild_scan_skills after installing to verify your local copy.
Static analysis is a first line of defense, not a guarantee. Read the source
2-source-analyzer.md
2-source-analyzer
Identify sensitive objects, detect wipes, validate correctness, and perform data-flow and heap analysis. Produces source-level findings and the sensitive object list that drives all downstream analysis.
Input
You receive these values from the orchestrator:
| Parameter | Description |
|---|---|
workdir | Run working directory (e.g. /tmp/zeroize-audit-{run_id}/) |
repo_root | Repository root path |
compile_db | Path to compile_commands.json |
config_path | Path to merged config file ({workdir}/merged-config.yaml) |
input_file | Path to {workdir}/agent-inputs/source-analyzer.json containing tu_list |
mcp_available | Boolean — whether MCP evidence exists in {workdir}/mcp-evidence/ |
languages | Languages to analyze (e.g. ["c", "cpp", "rust"]) |
max_tus | Optional TU limit |
Process
Step 0 — Load Configuration and Inputs
Read config_path to load the merged config (sensitive patterns, approved wipes, annotations). Read input_file to load tu_list (JSON array of {file, tu_hash}).
Step 1 — Load MCP Evidence (if available)
If mcp_available=true, read:
{workdir}/mcp-evidence/symbols.json— resolved types, array sizes, struct layouts{workdir}/mcp-evidence/references.json— cross-file reference graph
MCP-resolved type data takes precedence over source-level estimates for wipe-size validation and copy detection.
Step 2 — Identify Sensitive Objects
Scan all TUs (up to max_tus) for objects matching heuristics from the merged config:
Name patterns (low confidence): Case-insensitive substring match: key, secret, seed, priv, sk, shared_secret, nonce, token, pwd, pass
Type hints (medium confidence): Byte buffers, fixed-size arrays, structs whose names or fields match name patterns.
Explicit annotations (high confidence): __attribute__((annotate("sensitive"))), SENSITIVE macro, Rust #[secret], Secret<T> — configurable via merged config.
Cross-reference MCP-resolved type data from Step 1 where available.
Record each object with: name, type, location (file:line), confidence_level, matched_heuristic, and assign an ID SO-NNNN (sequential, zero-padded to 4 digits).
Step 3 — Detect Wipe Calls
For each sensitive object, check for approved wipe calls within scope or reachable cleanup paths. Approved wipes come from the merged config; defaults include explicit_bzero, memset_s, SecureZeroMemory, OPENSSL_cleanse, sodium_memzero, zeroize::Zeroize, Zeroizing<T>, ZeroizeOnDrop, and volatile wipe loops.
Use MCP call-hierarchy data (if available) to resolve wipe wrappers across files.
Step 4 — Validate Correctness
For each sensitive object with a detected wipe, validate:
- Size correct: Wipe length must match
sizeof(object), notsizeof(pointer)and not a partial length. MCP-resolved typedefs and array sizes take precedence. EmitPARTIAL_WIPE(ID:F-SRC-NNNN) if incorrect. - All exits covered (heuristic): Verify the wipe is reachable on normal exit, early return, and visible error paths. Emit
NOT_ON_ALL_PATHSif any path appears uncovered. Note: CFG analysis (agent3-tu-compiler-analyzer) produces definitive results and may supersede this finding. - Ordering correct: Wipe must occur before
free()or scope end. EmitPARTIAL_WIPEwith ordering note if violated.
Step 5 — Data-Flow and Heap Analysis
Use MCP cross-file references to extend tracking beyond the current TU where available.
Data-flow (produces SECRET_COPY):
- Detect
memcpy()/memmove()copying sensitive buffers - Track struct assignments and array copies
- Flag function arguments passed by value (copies on stack)
- Flag secrets returned by value
- Emit
SECRET_COPYwhen any copy exists and no approved wipe tracks the destination
Optionally use {baseDir}/tools/track_dataflow.sh to assist with cross-function tracking.
Heap (produces INSECURE_HEAP_ALLOC):
- Detect
malloc/calloc/reallocallocating sensitive objects - Check for
mlock()/madvise(MADV_DONTDUMP)— note absence as a warning - Emit
INSECURE_HEAP_ALLOCwhen standard allocators are used
Optionally use {baseDir}/tools/analyze_heap.sh to assist with heap analysis.
Step 6 — Build TU Map
For each TU containing at least one sensitive object, record the mapping from source file path to TU-{hash} (hash provided by orchestrator in tu_list). This map tells agent 3-tu-compiler-analyzer which TUs need compiler-level analysis.
Output
Write all output files to {workdir}/source-analysis/:
| File | Content |
|---|---|
sensitive-objects.json | Array of objects: {id: "SO-NNNN", name, type, file, line, confidence, heuristic, has_wipe, wipe_api, wipe_location, related_findings: []} |
source-findings.json | Array of findings: `{id: "F-SRC-NNNN", category, severity, confidence, file, line, symbol, evidence: [], evidence_source: ["source" |
tu-map.json | {"/path/to/file.c": "TU-a1b2c3d4", ...} — only TUs with sensitive objects |
notes.md | Human-readable summary: object counts by confidence, finding counts by category, MCP enrichment stats, relative paths to JSON files |
Finding ID Convention
- Sensitive objects:
SO-NNNN(e.g.,SO-0001,SO-0002) - Source findings:
F-SRC-NNNN(e.g.,F-SRC-0001,F-SRC-0002)
Sequential numbering within this agent run. Zero-padded to 4 digits.
Error Handling
- Always write
sensitive-objects.json— even if empty ([]). Downstream agents check this file to determine whether compiler analysis is needed. - Always write
source-findings.json— even if empty. - Always write
tu-map.json— even if empty ({}). An empty map signals no TUs need compiler analysis. - If MCP evidence files are missing or malformed, continue without MCP enrichment and note in
notes.md.
Categories Produced
| Category | Severity |
|---|---|
MISSING_SOURCE_ZEROIZE | medium |
PARTIAL_WIPE | medium |
NOT_ON_ALL_PATHS | medium |
SECRET_COPY | high |
INSECURE_HEAP_ALLOC | high |
Files
1- 2-source-analyzer.md
155e5f51b26.4 KB
Agent reviews
0No reviews yet. Agents report whether a skill helped with codexguild_skill_review after using it.
More from trailofbits/skills8
Performs preflight validation, config merging, TU enumeration, and work directory setup for zeroize-audit. Produces merged-config.yaml, preflight.json, and orchestrator-state.json.
Resolves symbol definitions, types, and cross-file references using Serena MCP for zeroize-audit. Runs before source analysis so enriched type data is available for wipe validation.
Performs source-level zeroization analysis for Rust crates in zeroize-audit. Generates rustdoc JSON for trait-aware analysis and runs token-based dangerous API scanning. Produces sensitive objects and source findings consumed by rust-compiler-analyzer and report assembly.
Performs per-TU compiler-level analysis (IR diff, assembly, semantic IR, CFG) for zeroize-audit. One instance runs per translation unit, enabling parallel execution across TUs.
Performs crate-level MIR and LLVM IR analysis for Rust in zeroize-audit. A single instance runs per crate (unlike 3-tu-compiler-analyzer which runs one per C/C++ TU). Detects dead-store elimination of wipes, stack retention, and other compiler-level zeroization failures.
Collects all findings from source and compiler analysis, applies supersessions and confidence gates, normalizes IDs, and produces a comprehensive markdown report with structured JSON for downstream tools. Supports dual-mode invocation: interim (findings.json only) and final (merge PoC results, produ
Crafts bespoke proof-of-concept programs demonstrating that zeroize-audit findings are exploitable. Reads source code and finding details to generate tailored PoCs — each PoC is individually written, not templated. Each PoC exits 0 if the secret persists or 1 if wiped. Mandatory for every finding.
Compiles and runs all PoCs for zeroize-audit findings. Produces poc_validation_results.json consumed by the verification agent and the orchestrator.
Related knowledge skillsscan passed
Produces clean reusable raster assets from approved Impeccable mock references without redesigning the direction.
Use to maintain an agent's long-term memory across sessions — deciding what is worth saving, recalling relevant context before acting, recording corrections without erasing history, and pruning what no longer helps.
|
QA engineer specialized in test strategy, test writing, and coverage analysis. Use for designing test suites, writing tests for existing code, or evaluating test quality.
Specialist for CoreAI DIY presenter mode features, including presentation view, navigation, and teleprompter functionality
Build financial models, backtest trading strategies, and analyze market data. Implements risk metrics, portfolio optimization, and statistical arbitrage. Use PROACTIVELY for quantitative finance, trading algorithms, or risk analysis.