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.1.0.tar.gz (62.1 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.1.0-py3-none-any.whl (52.8 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for autopurple-1.1.0.tar.gz
Algorithm Hash digest
SHA256 270492279334807535b4a52bf1a1eb3cd3f511a9a027f9c8870a0bec1ef6112b
MD5 31d99fb22b7b0f07f87af05e4a1c27cd
BLAKE2b-256 134d16f6d64e1adbd4952a357e4a84558c1dd63adc0fdac6f5f03409964c5e66

See more details on using hashes here.

File details

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

File metadata

  • Download URL: autopurple-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 52.8 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.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b72d6645342d5021718b0f6e788b71a4fc2bc592e0ef59ae00038eae8d351cb1
MD5 33be0cff49e8ef614d15e7f93753296f
BLAKE2b-256 3a1b875f65b085e9751dd4eef3a935110990620372c155fc3b1404dfc4502df6

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