# Stave ## search - [Search the documentation](/search.md) ## docs - [Documentation](/docs.md): Get Started - [Explanation](/docs/explanation.md) - [Air-Gapped Operation](/docs/explanation/air-gapped-analysis.md): What runs offline in Stave, what still needs network access, and recommended deployment patterns. - [Architecture](/docs/explanation/architecture.md): The four-layer model and how it was discovered. - [Blast Radius](/docs/explanation/blast-radius.md): Blast radius measures how far damage spreads when a control fails. A - [Chain Discovery Architecture](/docs/explanation/chain-discovery-architecture.md): Overview - [Compound Chains](/docs/explanation/compound-chains.md): Why compound risk exists and why chains are separate from controls. - [Controls](/docs/explanation/controls-as-code.md): What controls are, how they differ from rules, and how Stave evaluates them. - [Counterfactual Analysis Reports](/docs/explanation/counterfactual-analysis.md): Counterfactual analysis answers whether a given control would have prevented a past breach, turning post-incident review into evidence-based control prioritization. - [Data Exfiltration Path](/docs/explanation/data-exfiltration.md): Data exfiltration path analysis answers: "How can data get out?" - [Data Flow and I/O](/docs/explanation/data-flow.md): Per-command I/O model, permission policy, and overwrite protection. - [Data Sovereignty](/docs/explanation/data-sovereignty.md): Data sovereignty analysis answers: "Is your data physically in the - [Design Philosophy](/docs/explanation/design-philosophy.md): Stave is designed around open standards from the first release so teams can adopt it without platform lock-in. - [Differentiation](/docs/explanation/differentiation.md): Stave is a static analysis tool that evaluates cloud infrastructure configurations against system invariants using CEL predicates and exports standardized facts (JSONL triples, SMT-LIB v2) for consumption by external reasoning engines. It operates on air-gapped snapshots with no cloud credentials, no API calls, and no network access. - [Drift Detection](/docs/explanation/drift-detection.md): Drift detection answers the CISO's Tuesday question: "We were safe - [Entitlement Entropy — Shadow Admin Finder](/docs/explanation/entitlement-entropy.md): Entitlement entropy detects privilege creep — the structural condition - [Evidence Bundling](/docs/explanation/evidence-bundling.md): Evidence bundling answers: "How do I get compliance evidence out - [Evidence-Driven Design](/docs/explanation/evidence-driven-design.md): Why every abstraction in Stave traces to real incident data. - [Execution Safety](/docs/explanation/execution-safety.md): Stave's guarantees against dynamic code execution. - [FAQ](/docs/explanation/faq.md): Frequently asked questions about Stave's approach, terminology, and how it differs from existing tools. - [Files as the language boundary](/docs/explanation/files-as-the-boundary.md): Why Stave evaluates with CEL and exports facts to external reasoning engines through files on disk — not subprocess calls, not plug-ins. The architectural choice that makes the multi-engine surface tractable. - [Security Guarantees](/docs/explanation/guarantees.md): Stave's compile-time and runtime security guarantees: offline operation, no credentials, determinism, no code execution, filesystem safety, sanitization, and supply-chain integrity. - [How Stave Works](/docs/explanation/how-stave-works.md): Data flow through the Stave evaluation engine — inputs, schema validation, evaluation, and structured output. - [Identity Blast Radius](/docs/explanation/identity-blast-radius.md): Why identity blast radius measures the damage surface of a single compromised credential, and how it differs from control-level blast radius. - [KMS Concentration Risk](/docs/explanation/kms-concentration.md): KMS concentration risk answers: "If this one encryption key is - [Lab Results](/docs/explanation/lab-results.md): Verified detection rates across four vendor lab suites — with links to detailed tutorials. - [Why the Logic Trace Exists](/docs/explanation/logic-trace.md): The problem with black-box verdicts - [Posture Score](/docs/explanation/posture-score.md): What the 0-100 score measures, how it is computed, and what it does not tell you. - [Posture Trending](/docs/explanation/posture-trending.md): stave trend reads historical assessment output files and computes - [The Reasoning Contract](/docs/explanation/reasoning-contract.md): Stave is the fact-producing substrate that any reasoning engine can target via a YAML spec format. Validated end-to-end with five independent paradigms (Z3, Soufflé, Clingo, Prolog, PRISM). - [Recovery Isolation](/docs/explanation/recovery-isolation.md): Recovery isolation answers: "If your main account is compromised, - [Release Integrity & Trust Model](/docs/explanation/release-security.md): How Stave releases are built, signed, and verified. - [Secret Blast Radius](/docs/explanation/secret-blast-radius.md): Secret blast radius answers: "If this secret is compromised, how - [Shadow Logic Detection](/docs/explanation/shadow-logic.md): Shadow logic detection answers: "Do your IAM policies accidentally - [The Snapshot Model](/docs/explanation/snapshot-model.md): Why Stave evaluates local files rather than querying live cloud APIs. - [Supply Chain Ingress](/docs/explanation/supply-chain-ingress.md): Supply chain ingress analysis answers: "Can an external CI/CD - [System Invariants](/docs/explanation/system-invariants.md): What system invariants are, how they are expressed as code in Stave, and how they differ from OPA, IaC scanners, and CSPM tools. - [Temporal Ghost Detection](/docs/explanation/temporal-ghost.md): Detect configuration references that were valid in a previous snapshot but invalid in the current one — deleted resources that leave dangling pointers. - [Threat Model](/docs/explanation/threat-model.md): Stave's threat model: assets, trust boundaries, attacker profiles, controls, and residual risks. - [Time Travel](/docs/explanation/time-travel.md): Why "evaluate, not guess" is the correct framing for security investigation. - [Security and Trust](/docs/explanation/trust-and-security.md): Overview of Stave's security design and trust model. - [Unauthenticated Reachability](/docs/explanation/unauthenticated-reachability.md): Unauthenticated reachability answers: "Can an anonymous principal - [Vendor Trust Leash](/docs/explanation/vendor-trust-leash.md): Vendor trust leash analysis answers: "Which external companies can - [Stave vs Scanners](/docs/explanation/vs-scanners.md): What scanners check versus what Stave checks — the trichotomy of cloud security tools. - [Stave vs Vulnerable Labs](/docs/explanation/vs-vulnerable-labs.md): Attacker-centered labs versus defender-centered evaluation — and how they compose. - [Z3 Question Catalogue](/docs/explanation/z3-question-catalogue.md): What kinds of cloud-security questions an SMT solver such as Z3 can answer, organised by attack stage. A starting point for tools that compose Stave's library API with libz3. - [Stave and Z3](/docs/explanation/z3-solver.md): Stave's evaluator is in-process Google CEL. A small Go example under examples/ shows how to compose Stave's library API with libz3 to answer SAT/UNSAT questions. They are different shapes of analysis. - [Getting Started](/docs/getting-started.md) - [Add Stave to Your CI Pipeline](/docs/getting-started/add-to-ci.md): The finding you just fixed? Make sure it never comes back. A CI gate - [What Stave Finds](/docs/getting-started/demo-output.md): Real stave apply output from a deliberately misconfigured AWS environment — compound chains, near-miss chains, and standard findings. - [First Evaluation](/docs/getting-started/first-evaluation.md): Install Stave and run it against bundled demo data. No cloud credentials, no AWS account. - [Time To First Finding](/docs/getting-started/first-finding.md): Run Stave against your own AWS environment. Pick the import path that matches what you already have. - [Fix a Finding, Verify the Fix](/docs/getting-started/fix-and-verify.md): The remediation loop: explain → fix → re-snapshot → verify. Each - [Installation](/docs/getting-started/installation.md): Install Stave in three progressive tiers. Tier 1 is the standalone Go binary; Tier 2 adds external reasoning engines; Tier 3 adds Neo4j visualisation. - [Reading Chain Findings](/docs/getting-started/reading-chain-findings.md): Understand Stave's compound chain findings — what they mean, how to prioritize them, and how to break them. - [Try Stave](/docs/getting-started/try-stave.md): Five ways to try Stave, from zero-install to full pipeline. - [How-to Guides](/docs/how-to.md) - [How to Run an IAM Security Assessment](/docs/how-to/assessments/iam-assessment.md): Evaluate AWS IAM configuration against 38 controls covering identity, - [How to Evaluate Multi-Cloud Infrastructure](/docs/how-to/assessments/multi-cloud-evaluation.md): Stave evaluates any cloud provider and any service without engine changes. - [How to Run an OpenSearch Security Assessment](/docs/how-to/assessments/opensearch-assessment.md): Evaluate AWS OpenSearch domain configuration against 12 controls - [S3 Assessment Workflow](/docs/how-to/assessments/s3-assessment.md): This is the supported S3 MVP workflow for the current CLI surface. - [End-to-End Template Testing](/docs/how-to/assessments/template-e2e-testing.md): Manual testing runbook for the template system. Run after implementing or modifying template commands. - [How to Bisect a Violation](/docs/how-to/compliance/bisect-violation.md): Find the exact snapshot when a control first failed. - [Compliance Workflow](/docs/how-to/compliance/compliance-workflow.md): End-to-end compliance workflow: discover what to collect, assess coverage gaps, evaluate against a compliance profile, and export evidence packages. - [How to Verify an Evidence Archive](/docs/how-to/compliance/evidence-archive.md): Prove continuous monitoring over a compliance audit period. - [HIPAA Compliance](/docs/how-to/compliance/hipaa-compliance.md): Evaluate S3 configurations against HIPAA Security Rule requirements using Stave's built-in HIPAA profile. - [Contributing to Stave](/docs/how-to/contributing.md): Thank you for considering contributing to Stave. This document explains how to set up your development environment, run tests, and submit changes. - [Authoring Controls](/docs/how-to/controls/control-authoring.md): How to write, test, and review custom Stave control definitions. - [How to Create a Custom Compliance Profile](/docs/how-to/controls/custom-profile.md): Define your own compliance framework as a YAML file. - [Enable the Z3 Solver](/docs/how-to/controls/enable-z3-solver.md): Install libz3 and use Z3 with Stave. The Stave binary itself is built CGO_ENABLED=0 and has no Z3 dependency; Z3 is opt-in per-machine for the example provers and the SMT-LIB file pipeline. - [Enabling and Disabling Controls](/docs/how-to/controls/enabling-disabling-invariants.md): How to control exactly which controls Stave evaluates. - [How to Scaffold Controls with the Policy Forge](/docs/how-to/controls/policy-forge.md): Create a new security control with validated YAML and pass/fail test - [How to use a reasoning engine with Stave facts](/docs/how-to/controls/reasoning-engines.md): Pick the right external reasoning engine for the question you have, export Stave's facts in the format the engine consumes, append a query, and read the verdict back. - [How to Test Controls](/docs/how-to/controls/test-controls.md): Run embedded test cases to verify control behavior. - [Create Observation Snapshots](/docs/how-to/getting-started/create-snapshots.md): Step-by-step recipes for producing obs.v0.1 observation snapshots from a live AWS account, from Terraform, or by hand. - [Import AWS Config Snapshots](/docs/how-to/getting-started/import-config-snapshots.md): Use existing AWS Config delivery data as Stave input — no new credentials or collectors needed. - [Recipes](/docs/how-to/getting-started/recipes.md): Multi-command workflow recipes for common Stave tasks. - [Templates](/docs/how-to/getting-started/templates.md): A template packages a complete security assessment workflow — which controls to evaluate, which compound chains to run, and how to report findings — into a single command. You pick the job, configure your environment, and run. - [Verify a Release](/docs/how-to/getting-started/verify-release.md): Step-by-step guide to verify Stave release integrity using checksums, Cosign, and provenance. - [Atlantis Post-Plan Integration](/docs/how-to/integration/atlantis-integration.md): Evaluate Terraform plans for safety violations before atlantis apply. - [Breach-Type Routing with Evaluation Context](/docs/how-to/integration/breach-routing.md): How to use the --context flag to filter control evaluation based on incident breach type. - [Task: Build a Stave Observation Extractor](/docs/how-to/integration/building-extractors.md): Most users don't need this. For common AWS resources, the built-in - [Running in CI/CD](/docs/how-to/integration/ci-cd-integration.md): How to integrate Stave into GitHub Actions, GitLab CI, and Jenkins pipelines. - [MCP Server Integration](/docs/how-to/integration/mcp-server.md): Connect an AI agent (Claude Code, Cursor) to Stave via stave-mcp. - [How to Block Unsafe Configs with a Pre-Commit Hook](/docs/how-to/integration/pre-commit-hook.md): Prevent unsafe cloud configurations from being committed to version - [SARIF and GitHub Code Scanning](/docs/how-to/integration/sarif-code-scanning.md): Stave outputs SARIF (Static Analysis Results Interchange Format), - [Scheduled Operation](/docs/how-to/integration/scheduled-operation.md): Run Stave on a schedule: cron + snapshot capture + diff between consecutive runs. - [Integrating with Security Workflows](/docs/how-to/integration/security-workflows.md): How to use Stave alongside other security tools and incident response processes. - [Bug Reproduction Guide](/docs/how-to/maintenance/bug-reports.md): How to write a minimal, deterministic bug reproduction for Stave. - [Contributing to Stave](/docs/how-to/maintenance/contributing.md): Thank you for considering contributing to Stave. This document explains how to set up your development environment, run tests, and submit changes. - [Common Issues](/docs/how-to/maintenance/troubleshooting.md): Troubleshooting guide for common Stave errors and unexpected behavior. - [How to Detect Regressions](/docs/how-to/results/detect-regression.md): Identify controls that fail repeatedly in a pattern. - [How to Generate an Executive Report](/docs/how-to/results/executive-report.md): Produce a single document aggregating all assessment dimensions. - [Fix Verification](/docs/how-to/results/fix-verification.md): Verify a remediation closed the finding: remediate, re-snapshot, diff, confirmed. - [Resource Ignore Lists](/docs/how-to/results/ignore-lists.md): How to suppress findings for intentionally configured resources using ignore lists. - [Interpreting Findings](/docs/how-to/results/interpreting-findings.md): How to read findings and execute deterministic remediation planning. - [How to Debug Unexpected Findings with the Logic Trace](/docs/how-to/results/logic-trace-debugging.md): Use the logic trace when Stave produces a finding you don't expect — or - [Retroactive Evaluation](/docs/how-to/results/retroactive-evaluation.md): Run new controls against old snapshots to answer: were we exposed to this in March? - [Sanitization](/docs/how-to/results/sanitization.md): How to share Stave outputs safely using --sanitize. - [How to Compare Infrastructure State Between Two Dates](/docs/how-to/results/time-travel-comparison.md): Evaluate security posture at two points in time and see what changed. - [Labs](/docs/labs.md): Hands-on labs validating Stave controls against real AWS misconfigurations. - [HackerOne Case Studies](/docs/labs/case-studies.md): 30 real HackerOne bug bounty reports reconstructed as reasoning challenges, grouped by attack pattern. - [What you just discovered](/docs/labs/case-studies-debrief.md): What the S3 reasoning challenge reveals about the gap between scanning and reasoning. - [Challenge Setup](/docs/labs/case-studies-setup.md): Download 4 JSON files and try to answer 5 questions about S3 security — no Stave, no AWS account. - [The audit log that watched the front door while the side door stayed open](/docs/labs/case-studies/aws-3021451.md): A CloudTrail reads as fully configured, yet ElastiCache calls through a non-production endpoint generate no log entries at all. - [The two side doors the audit log was never told about](/docs/labs/case-studies/aws-3022516.md): A correctly configured trail still misses Amazon Forecast calls made through two non-production endpoints the service never delivers to CloudTrail. - [The upload policy with no destination it would refuse](/docs/labs/case-studies/bcm-764243.md): A presigned POST policy uses an empty starts-with prefix, so any key in the bucket is a legal upload target — can you prove the write scope is unrestricted from the policy alone? - [The subdomain that pointed at a name anyone could take](/docs/labs/case-studies/bime-121461.md): Reasoning that a live DNS record plus a claimable bucket name is a takeover primitive, even while the page returns a harmless 404. - [The repository nobody deleted from the install guide](/docs/labs/case-studies/brave-1791558.md): An APT repository bucket was deleted but the DNS name and the community install guide still point at it — can you prove the reference is claimable from the static evidence alone? - [The install guide that points at a bucket anyone can claim](/docs/labs/case-studies/brave-1835133.md): A 404 today, a trojaned RPM repository tomorrow — can you tell that a harmless dangling reference is one registration away from supply-chain compromise? - [The metadata door that opened for anyone who asked](/docs/labs/case-studies/dod-2083771.md): Reasoning that an exposed Jenkins console plus IMDSv1 forms a single credential-theft path, not two independent low findings. - [The government domain pointing at a name up for grabs](/docs/labs/case-studies/dod-918946.md): Reasoning that a dangling .gov CNAME is a high-trust takeover primitive while it still serves a harmless 404. - [Public read was fine — public listing leaked the whole catalog](/docs/labs/case-studies/greenhouse-819278.md): Marketing assets are public by design, but the same grant also exposes the full inventory — separating intended exposure from disclosure. - [The widget script that's one bucket registration from XSS](/docs/labs/case-studies/hackerone-1598347.md): A deleted widget bucket plus a live