Vulcan
Overview
Vulcan is a comprehensive tool designed to streamline the creation of STIG-ready security guidance documentation and InSpec automated validation profiles. It bridges the gap between security requirements and practical implementation, enabling organizations to develop both human-readable instructions and machine-readable validation code simultaneously.
Live Deployments
- Production: https://mitre-vulcan-prod.herokuapp.com
- Staging: https://mitre-vulcan-staging.herokuapp.com
What is Vulcan?
Vulcan models the Security Technical Implementation Guide (STIG) creation process, facilitating the alignment of security controls from high-level DISA Security Requirements Guides (SRGs) into STIGs tailored to specific system components. Content developed with Vulcan can be submitted to DISA for peer review and formal publication as official STIGs.
Key Features
- 📋 STIG Process Modeling: Manages the complete workflow between vendors and sponsors
- 🔍 InSpec Integration: Write and test validation code locally or across SSH, AWS, and Docker targets
- 📊 Control Management: Track control status, revision history, and relationships
- 👥 Collaborative Authoring: Multiple authors can work on control sets with built-in review workflows
- 🔗 Cross-Reference Capabilities: Look up related controls across published STIGs
- 📚 STIG Library: View and reference DISA-published STIG content
- 🔒 Security: Database encryption for confidential data using symmetric encryption
- 🔑 Flexible Authentication: Support for local, GitHub, LDAP, and OIDC/OKTA providers
- 📬 Notifications: Email and Slack integration for workflow updates
🚀 Quick Start
Latest Release: v2.2.1
# Pull the latest Docker image
docker pull mitre/vulcan:v2.2.1
# Or use docker-compose for a complete setup
wget https://raw.githubusercontent.com/mitre/vulcan/master/docker-compose.yml
wget https://raw.githubusercontent.com/mitre/vulcan/master/setup-docker-secrets.sh
chmod +x setup-docker-secrets.sh
./setup-docker-secrets.sh
docker-compose up
Default credentials for testing:
- Email: admin@example.com
- Password: 1234567ab!
For detailed release notes, see the Changelog.
📚 Documentation
- 📖 Full Documentation - Comprehensive guides and references
- Installation Guide
- Configuration Reference
- User Guide - Complete training materials
- API Documentation
- Contributing Guidelines
Working with Documentation
The documentation uses VitePress and is located in the docs/
directory.
Important: The documentation has its own package.json
separate from the main application to avoid Vue version conflicts (main app uses Vue 2, VitePress uses Vue 3). This separation will be removed once the main application migrates to Vue 3.
# Start documentation dev server
yarn docs:dev # Runs at http://localhost:5173/vulcan/
# Build documentation (only works in CI/CD currently)
yarn docs:build
# Work directly in docs directory
cd docs
yarn install # Install docs-specific dependencies
yarn dev # Start dev server
🛠️ Technology Stack
Core Framework
- Ruby 3.3.9 with Rails 8.0.2.1
- PostgreSQL 12+ database
- Node.js 22 LTS for JavaScript runtime
Frontend
- Vue 2.6.11 (14 separate instances for different pages)
- Bootstrap 4.4.1 with Bootstrap-Vue 2.13.0
- Turbolinks 5.2.0 for navigation optimization
- esbuild for JavaScript bundling (replaced Webpacker)
Testing & Quality
- RSpec for Ruby testing (190+ tests)
- ESLint & Prettier for JavaScript linting
- RuboCop for Ruby style enforcement
- Brakeman for security scanning
- bundler-audit for dependency vulnerability scanning
DevOps & Deployment
- Docker with optimized production images (1.76GB)
- GitHub Actions for CI/CD
- Heroku compatible
- SonarCloud integration for code quality
💻 Development Setup
Prerequisites
- Ruby 3.3.9 (use rbenv or rvm)
- PostgreSQL 12+
- Node.js 22 LTS
- Yarn package manager
Local Installation
# Clone the repository
git clone https://github.com/mitre/vulcan.git
cd vulcan
# Install Ruby dependencies
bundle install
# Install JavaScript dependencies
yarn install
# Setup database
bin/setup
# Seed the database with sample data
rails db:seed
# Start the development server
foreman start -f Procfile.dev
# Or start services separately
rails server
yarn build:watch
Access the application at http://localhost:3000
Running Tests
# Run all tests
bundle exec rspec
# Run specific test file
bundle exec rspec spec/models/user_spec.rb
# Run linters
bundle exec rubocop --autocorrect-all
yarn lint
# Security scanning
bundle exec brakeman
bundle exec bundler-audit
🐳 Docker Deployment
Production-Ready Docker Setup
Generate secure configuration:
bash./setup-docker-secrets.sh # Choose option 2 for production
Configure environment (edit
.env
):- Authentication settings (OIDC/LDAP)
- Application URL and contact email
- SMTP configuration for notifications
Add SSL certificates (if behind corporate proxy):
bashcp /path/to/certificate.pem ./certs/
Start the application:
bashdocker-compose up -d
Initialize database (first time only):
bashdocker-compose run --rm web bundle exec rake db:create db:schema:load db:migrate
Docker Image Features
- Optimized size: 1.76GB (reduced from 6.5GB)
- Memory efficiency: jemalloc for 20-40% reduction
- Multi-stage builds for security and size
- Health checks configured
- Non-root user execution
🔐 Authentication Configuration
OIDC/OKTA Setup (Auto-Discovery)
Vulcan v2.2+ includes automatic OIDC endpoint discovery, requiring only 4 configuration variables:
VULCAN_ENABLE_OIDC=true
VULCAN_OIDC_ISSUER_URL=https://your-domain.okta.com
VULCAN_OIDC_CLIENT_ID=your-client-id
VULCAN_OIDC_CLIENT_SECRET=your-client-secret
Supported providers:
- Okta
- Auth0
- Keycloak
- Azure AD
- Any OIDC-compliant provider
LDAP Configuration
VULCAN_ENABLE_LDAP=true
VULCAN_LDAP_HOST=ldap.example.com
VULCAN_LDAP_PORT=636
VULCAN_LDAP_BASE=dc=example,dc=com
VULCAN_LDAP_BIND_DN=cn=admin,dc=example,dc=com
VULCAN_LDAP_BIND_PASSWORD=your-password
📋 Maintenance Tasks
Pull Latest STIGs/SRGs
# Manual execution
bundle exec rails stig_and_srg_puller:pull
# Schedule in production (cron example)
0 2 * * * cd /app && bundle exec rails stig_and_srg_puller:pull
🤝 Contributing
We welcome contributions! Please see our Contributing Guidelines for details.
Development Workflow
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'feat: add amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
Code Standards
- Follow Ruby style guide (enforced by RuboCop)
- Follow JavaScript style guide (enforced by ESLint)
- Write tests for new features
- Update documentation as needed
- Ensure all tests pass before submitting PR
📈 Roadmap
Upcoming Features (v2.3+)
- Vue 3 Migration: Modernize frontend framework
- Bootstrap 5 Upgrade: Update UI components
- Turbolinks Removal: Simplify navigation architecture
- API v2: Enhanced REST API with GraphQL support
- Multi-tenancy: Support for multiple organizations
- Advanced Reporting: Custom dashboards and metrics
See our detailed roadmap for more information.
📄 License
© 2022-2025 The MITRE Corporation.
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
Approved for Public Release; Distribution Unlimited. Case Number 18-3678.
Notice
This software was produced for the U.S. Government under Contract Number HHSM-500-2012-00008I, and is subject to Federal Acquisition Regulation Clause 52.227-14, Rights in Data-General.
🙏 Acknowledgments
- DISA for STIG and SRG specifications
- The InSpec community for validation framework
- All contributors who have helped improve Vulcan
📞 Support
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Wiki: Project Wiki
- Security Issues: saf-security@mitre.org
- General Inquiries: saf@mitre.org
🏢 About MITRE SAF
Vulcan is part of the MITRE Security Automation Framework (SAF), a comprehensive suite of tools and libraries designed to automate security validation and compliance checking.
Related SAF Projects
- InSpec: Compliance automation framework
- Heimdall: Security results visualization
- SAF CLI: Command-line tools for security automation
- InSpec Profile Development: Training resources
Made with ❤️ by the MITRE Security Automation Framework team
A MITRE SAF Initiative