Skip to main content

Claude-powered AWS security automation: discover vulnerabilities with ScoutSuite, validate with Pacu, and remediate via AWS MCP servers

Project description

๐ŸŸฃ AutoPurple

PyPI version Python 3.11+ License: MIT Security

Claude-powered AWS security automation: discover vulnerabilities with ScoutSuite, validate with Pacu, and remediate via AWS MCP servers

AutoPurple is an intelligent AWS security automation system that combines the power of ScoutSuite discovery, Claude AI analysis, Pacu validation, and AWS MCP servers for end-to-end security remediation.

๐ŸŽฏ Mission

AutoPurple automates the complete AWS security assessment and remediation pipeline:

ScoutSuite Discovery โ†’ Claude Analysis โ†’ Pacu Validation โ†’ Claude Planning โ†’ MCP Remediation โ†’ Validation

๐Ÿ—๏ธ Architecture

Core Principles

  1. Extension over replacement: Reuse and extend ScoutSuite/Pacu; do not reimplement their core logic
  2. Remediation only after validation: Never remediate unless Pacu confirms exploitability with evidence
  3. MCP-only infra changes: All AWS changes are executed through AWS MCP servers
  4. Security-first: Respect existing security mechanisms; least-privilege IAM; audit everything
  5. Async Python 3.11+: Prefer asyncio/anyio, structured concurrency, timeouts, and robust error handling

Components

  • ScoutSuite Adapter: AWS security discovery and findings normalization
  • Pacu Adapter: Exploit validation using Pacu's SQLite session
  • MCP Clients: AWS CCAPI, CloudFormation, and Documentation MCP servers
  • Claude Planner: AI-driven analysis and remediation planning
  • Pipeline Orchestrator: Async DAG for the complete workflow
  • Post-Remediation Validator: Confirmation of successful fixes

๐Ÿš€ Quick Start

Prerequisites

  • Python 3.11+
  • AWS credentials configured
  • ScoutSuite installed
  • Pacu installed
  • MCP servers running (optional)

Installation

# Clone the repository
git clone https://github.com/autopurple/autopurple.git
cd autopurple

# Install dependencies
pip install -e .

# Install development dependencies
pip install -e ".[dev]"

Configuration

Create a .env file:

# Environment
AUTOPURPLE_ENV=dev

# AWS Configuration
AWS_PROFILE=default
AWS_REGION=us-east-1

# MCP Server Endpoints (optional)
MCP_ENDPOINT_CCAPI=http://localhost:8080
MCP_ENDPOINT_CFN=http://localhost:8081
MCP_ENDPOINT_DOCS=http://localhost:8082

# AI Configuration (optional)
CLAUDE_API_KEY=your_claude_api_key

# Database
AUTOPURPLE_DB_PATH=~/.autopurple/db.sqlite

Usage

# Run the complete pipeline
autopurple run --profile my-aws-profile --region us-west-2 --max-findings 20

# Run in dry-run mode (default)
autopurple run --dry-run

# Run discovery only
autopurple discover --output findings.json

# Run validation only
autopurple validate findings.json

# Check system health
autopurple health

# Show recent runs
autopurple status

๐Ÿ“Š Database Schema

AutoPurple uses SQLite with the following schema (compatible with Pacu):

-- AutoPurple runs table
CREATE TABLE ap_runs (
    id TEXT PRIMARY KEY,
    started_at TIMESTAMP NOT NULL,
    ended_at TIMESTAMP,
    aws_account TEXT,
    aws_region TEXT,
    status TEXT CHECK(status IN ('started','validated','remediated','failed')) NOT NULL,
    notes TEXT
);

-- AutoPurple findings table
CREATE TABLE ap_findings (
    id TEXT PRIMARY KEY,
    run_id TEXT NOT NULL REFERENCES ap_runs(id) ON DELETE CASCADE,
    source TEXT CHECK(source IN ('scoutsuite')) NOT NULL,
    service TEXT NOT NULL,
    resource_id TEXT NOT NULL,
    title TEXT NOT NULL,
    severity TEXT CHECK(severity IN ('low','medium','high','critical')) NOT NULL,
    evidence JSON NOT NULL,
    status TEXT CHECK(status IN ('new','validated','dismissed','remediated')) NOT NULL DEFAULT 'new'
);

-- AutoPurple validations table
CREATE TABLE ap_validations (
    id TEXT PRIMARY KEY,
    finding_id TEXT NOT NULL REFERENCES ap_findings(id) ON DELETE CASCADE,
    tool TEXT CHECK(tool IN ('pacu')) NOT NULL,
    module TEXT NOT NULL,
    executed_at TIMESTAMP NOT NULL,
    result TEXT CHECK(result IN ('exploitable','not_exploitable','error')) NOT NULL,
    evidence JSON NOT NULL
);

-- AutoPurple remediations table
CREATE TABLE ap_remediations (
    id TEXT PRIMARY KEY,
    finding_id TEXT NOT NULL REFERENCES ap_findings(id) ON DELETE CASCADE,
    planned_change JSON NOT NULL,
    mcp_server TEXT NOT NULL,
    mcp_call JSON NOT NULL,
    executed_at TIMESTAMP,
    status TEXT CHECK(status IN ('planned','executed','rolled_back','failed')) NOT NULL,
    audit_ref TEXT
);

๐Ÿ”ง Development

Project Structure

autopurple/
โ”œโ”€โ”€ __init__.py
โ”œโ”€โ”€ config.py              # Configuration management
โ”œโ”€โ”€ logging.py             # Structured logging
โ”œโ”€โ”€ db/
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”œโ”€โ”€ connection.py      # Database connection
โ”‚   โ””โ”€โ”€ schema.sql         # Database schema
โ”œโ”€โ”€ models/
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”œโ”€โ”€ findings.py        # Finding data models
โ”‚   โ”œโ”€โ”€ remediation.py    # Remediation data models
โ”‚   โ”œโ”€โ”€ runs.py           # Run data models
โ”‚   โ””โ”€โ”€ validations.py    # Validation data models
โ”œโ”€โ”€ adapters/
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”œโ”€โ”€ scoutsuite_adapter.py  # ScoutSuite integration
โ”‚   โ”œโ”€โ”€ pacu_adapter.py        # Pacu integration
โ”‚   โ””โ”€โ”€ mcp/
โ”‚       โ”œโ”€โ”€ __init__.py
โ”‚       โ”œโ”€โ”€ ccapi_client.py    # AWS CCAPI MCP client
โ”‚       โ”œโ”€โ”€ cfn_client.py       # AWS CloudFormation MCP client
โ”‚       โ””โ”€โ”€ docs_client.py     # AWS Documentation MCP client
โ”œโ”€โ”€ orchestrator/
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”œโ”€โ”€ pipeline.py       # Main pipeline orchestrator
โ”‚   โ”œโ”€โ”€ planner.py        # Claude planning
โ”‚   โ””โ”€โ”€ validators.py     # Post-remediation validation
โ”œโ”€โ”€ cli/
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ””โ”€โ”€ main.py           # CLI interface
โ””โ”€โ”€ tests/
    โ”œโ”€โ”€ unit/
    โ””โ”€โ”€ integration/

Running Tests

# Run all tests
pytest

# Run with coverage
pytest --cov=autopurple

# Run specific test file
pytest tests/unit/test_findings.py

# Run integration tests
pytest tests/integration/

Code Quality

# Run linting
ruff check .

# Run type checking
mypy autopurple/

# Run formatting
black autopurple/

๐Ÿ”’ Security Considerations

Credential Management

  • Use AWS profiles and STS tokens
  • MFA required for AWS operations (configurable)
  • Credentials stored in memory only
  • Support for role assumption and chaining

Least Privilege

  • Generate example IAM policies for MCP operations
  • Validate all MCP plans against allowlist
  • Audit trail for every automated action

Safety Features

  • Dry-run mode enabled by default
  • Explicit confirmation required for actual changes
  • Rollback capabilities for all remediations
  • Comprehensive logging and audit trails

๐Ÿค Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests
  5. Run the test suite
  6. Submit a pull request

Development Guidelines

  • Follow the existing code style
  • Add type hints to all functions
  • Write comprehensive docstrings
  • Include tests for new functionality
  • Update documentation as needed

๐Ÿ“ License

MIT License - see LICENSE file for details.

๐Ÿ™ Acknowledgments

๐Ÿ“ž Support

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

autopurple-1.2.0.tar.gz (70.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

autopurple-1.2.0-py3-none-any.whl (54.6 kB view details)

Uploaded Python 3

File details

Details for the file autopurple-1.2.0.tar.gz.

File metadata

  • Download URL: autopurple-1.2.0.tar.gz
  • Upload date:
  • Size: 70.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.6

File hashes

Hashes for autopurple-1.2.0.tar.gz
Algorithm Hash digest
SHA256 4a4e5ba925c74d023a8c62cf3594f4497dda30c2ea452d08876a54cd271727a8
MD5 1822171f6aaee5edde7f91fa5b23b874
BLAKE2b-256 52dfd1cde3e6289d8d0f7521790d7fe339245b6fe70234193024994c79072d0c

See more details on using hashes here.

File details

Details for the file autopurple-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: autopurple-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 54.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.6

File hashes

Hashes for autopurple-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bde7d5fb3e5a119e3ff2ceb83cee577c170cd315ed1f6637ae3ec7dfc2ed48d8
MD5 60ca69ffa41348e5868e21428196122b
BLAKE2b-256 6295f29b4c9254c084d38f821bbc05368e322a61247e2fe22a7e354f6b185cdb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page