Skip to content

mitre/cis-bench

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

59 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CIS Benchmark CLI

Professional command-line tool for downloading and managing CIS security benchmarks from CIS WorkBench

PyPI version Python Version CI Code style: ruff License


What is CIS Benchmark CLI?

cis-bench downloads CIS security benchmarks from CIS WorkBench and exports them to multiple formats, including NIST XCCDF for use with SCAP compliance scanners like OpenSCAP, SCC, and Nessus.

Use Cases:

  • Discover - Search 1,300+ CIS benchmarks with platform filtering
  • Download - Fetch benchmarks with browser-based authentication
  • Convert - Export to YAML, CSV, Markdown, or NIST XCCDF
  • Comply - Generate DISA STIG-compatible XCCDF for DoD environments
  • Analyze - Extract 19 fields including CIS Controls, MITRE ATT&CK, NIST mappings

Quick Start

# 1. Install (choose one)
pipx install cis-bench    # Recommended - isolated environment, no PATH issues
uv tool install cis-bench # Alternative - fast, modern
pip install cis-bench     # Not recommended - may have PATH issues

# 2. Login (one-time)
cis-bench auth login --browser chrome

# 3. Build catalog (one-time, ~2 minutes)
cis-bench catalog refresh

# 4. Get a benchmark
cis-bench get "ubuntu 22.04" --format xccdf --style cis

# Done! You have a SCAP-compliant XCCDF file

Get Started Guide for detailed setup


Key Features

Session-Based Authentication

Login once, use everywhere. No more passing --browser on every command.

cis-bench auth login --browser chrome
cis-bench download 23598 # Uses saved session

Searchable Catalog

Fast local search of 1,300+ benchmarks with FTS5 full-text search and platform taxonomy.

cis-bench search "oracle" --platform-type cloud
cis-bench search --platform-type database --latest

Unified Get Command

Search + download + export in one step.

cis-bench get "ubuntu 22" --format xccdf --style cis

Database Caching

Downloaded benchmarks cached in SQLite for instant re-export.

cis-bench export 23598 --format xccdf # Instant (from cache)

Multiple Export Formats

  • YAML - Human-readable structured data
  • CSV - Spreadsheet import
  • Markdown - Documentation
  • JSON - Machine-readable
  • XCCDF - SCAP compliance (DISA STIG or CIS native)

Platform Filtering

Two-level taxonomy: category (cloud/os/database) + specific platform (aws/ubuntu/oracle).

cis-bench search --platform-type cloud # All cloud benchmarks
cis-bench search --platform ubuntu # All Ubuntu versions

Scriptable and Automatable

All commands support JSON output for piping to jq, scripting, CI/CD.

cis-bench search oracle --output-format json | jq -r '.[].benchmark_id'

Performance

  • Parallel catalog scraping (~2 min for 1,300+ benchmarks)
  • Retry logic with exponential backoff
  • Progress bars on long operations

Documentation

For Users

For Developers

Technical Reference


Example Workflows

Export AlmaLinux 10 for OpenSCAP Scanning

cis-bench auth login --browser chrome
cis-bench search "almalinux 10"
# Shows: Benchmark ID 23598

cis-bench download 23598
cis-bench export 23598 --format xccdf --style cis -o almalinux10-cis.xml

# Use with OpenSCAP
oscap xccdf eval --profile Level_1 almalinux10-cis.xml

Batch Export All Cloud Benchmarks

# Search and download all cloud benchmarks
cis-bench search --platform-type cloud --output-format json | \
jq -r '.[].benchmark_id' | \
head -5 | \
xargs -I {} cis-bench download {}

# Export all to DISA STIG format
cis-bench list --output-format json | \
jq -r '.[].file' | \
xargs -I {} cis-bench export {} --format xccdf --style disa

Create Compliance Spreadsheet

cis-bench download 24008 # Oracle Cloud Infrastructure
cis-bench export 24008 --format csv -o oci-compliance.csv

# Open in Excel/Numbers for tracking
open oci-compliance.csv

** More examples in User Guide**


XCCDF Export

Generate NIST XCCDF 1.2 format compatible with SCAP compliance tools:

Two Styles Available:

DISA STIG Style (For DoD/Government)

cis-bench export 23598 --format xccdf --style disa

Features:

  • XCCDF 1.1.4 (DISA standard)
  • CCI mappings (2,161 DoD Control Correlation Identifiers)
  • VulnDiscussion elements
  • STIG-compatible structure

CIS Native Style (For Full Metadata)

cis-bench export 23598 --format xccdf --style cis

Features:

  • XCCDF 1.2 (latest standard)
  • Full CIS Controls v8 metadata (318 controls)
  • MITRE ATT&CK techniques (296 mappings)
  • Enhanced namespace for custom fields

XCCDF Styles Comparison for detailed differences


Architecture

Design Principles

Config-Driven - XCCDF field mappings defined in YAML, not hard-coded Extensible - Strategy pattern for HTML changes, Factory pattern for exporters Validated - xsdata-generated models from NIST XSD schemas Tested - 512 tests with comprehensive coverage

Component Overview

CIS WorkBench HTML
 (WorkbenchScraper + Strategy Pattern)
Pydantic Models (19 fields)
 (MappingEngine + YAML Config)
xsdata XCCDF Models
 (XML Serialization)
NIST XCCDF Output

Architecture Documentation for complete system design


Project Status

Version: 0.3.1 (Beta) Tests: See latest CI run Python: 3.12+ License: Apache 2.0

Current Features:

  • Session-based authentication
  • Searchable catalog with 1,300+ benchmarks
  • Platform taxonomy (cloud/os/database/container/application)
  • Unified get command
  • Database caching
  • Multiple export formats
  • XCCDF export (both DISA and CIS styles)
  • Parallel catalog scraping
  • Output formats for scripting (json/csv/yaml)

Future Features:

  • Offline mode
  • Benchmark comparison/diff
  • Recommendation search across benchmarks

Future Features for roadmap


Installation

From PyPI (Recommended)

Per Python Packaging Authority guidelines, CLI tools should be installed with pipx or uv tool, not pip directly.

# RECOMMENDED: pipx (isolated environment, correct PATH)
pipx install cis-bench

# ALTERNATIVE: uv tool (fast, modern)
uv tool install cis-bench

# Verify
cis-bench --version

Why not pip? pip install installs to a directory that may not be in your PATH, causing "command not found" errors. pipx and uv tool handle this correctly.

Using pip anyway? (click to expand)
pip install cis-bench

If you get cis-bench: command not found:

# Option 1: Use module syntax (always works)
python -m cis_bench --version

# Option 2: Add pip's bin to PATH
export PATH="$HOME/.local/bin:$PATH"  # Add to ~/.bashrc or ~/.zshrc

From Source

git clone https://github.com/mitre/cis-bench.git
cd cis-bench

# Install for development
pipx install -e .
# Or: uv tool install -e .

# Verify
cis-bench --version

Development Install

# Clone and install with dev dependencies
git clone https://github.com/mitre/cis-bench.git
cd cis-bench
pip install -e ".[dev]"

# Install pre-commit hooks
pre-commit install

# Run tests
pytest tests/ -v

Getting Started for detailed installation


Requirements

Runtime:

  • Python 3.12+
  • CIS WorkBench account (free registration at workbench.cisecurity.org)
  • Supported browser (Chrome, Firefox, Edge, or Safari)

Development:

  • All runtime requirements
  • pytest, ruff, bandit, pre-commit (installed via [dev] extras)

Support and Contributing

Found a bug? Open an issue at GitHub Issues

Want to contribute? See Contributing Guide

Questions? Check Documentation or open a discussion


License

Apache License 2.0 - See LICENSE for details

Acknowledgments:

  • Based on proof-of-concept by m-ghonim (Mohamed Ghoneam)
  • CIS WorkBench for providing benchmark data
  • NIST for XCCDF schema specifications
  • DISA for STIG formatting conventions

Quick Links

User Documentation:

Developer Documentation:

Need Help?

About

CLI tool for fetching, managing, and exporting CIS benchmarks from CIS WorkBench

Topics

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •