Skip to main content

Secure sandbox execution for AI-generated Python code

Project description

SafeRun AI

Secure sandbox execution for AI-generated Python code.


Overview

SafeRun AI is a local-first developer tool that executes untrusted Python code inside a hardened Docker sandbox. It combines static AST scanning, policy enforcement, resource limits, and audit logging to protect the host system from malicious or buggy AI-generated code.

The tool is designed for developers, AI engineers, and local LLM users who need to test AI-generated code without risking their machine.


Problem

Large language models can generate code that:

  • Deletes or modifies files (os.remove, shutil.rmtree)
  • Spawns shells (subprocess.run)
  • Exfiltrates data via network requests
  • Consumes all CPU/memory (fork bombs, infinite loops)
  • Uses eval/exec to bypass static checks

Running such code directly on your host is dangerous. SafeRun AI provides a layered defense.


Threat Model

We assume the attacker (or the AI model) can generate arbitrary Python code. The sandbox aims to prevent:

  • Persistence – modifying system files or installing backdoors
  • Exfiltration – sending data to external networks
  • Resource exhaustion – CPU/memory/disk DoS
  • Privilege escalation – breaking out of the container to the host

Note: This is not a perfect sandbox (see Limitations). It is a layered defense suitable for local development.


Security layers:

  • AST-based static scanner (detects dangerous imports/calls/paths)
  • YAML policy engine (allow/block lists, resource limits)
  • Docker container with:
    • Non-root user (sandbox, UID 1000)
    • Read-only root filesystem
    • No network access (by default)
    • Memory/CPU limits
    • Process limits (pids-limit=64)
    • No privileged mode, no host devices
  • Optional Sarvam AI explanations (falls back to local rules)

Features

  • Execute untrusted Python in isolated Docker sandbox
  • Static risk scanner with risk levels: LOW, MEDIUM, HIGH, BLOCKED
  • Configurable policy (allowed imports, blocked calls, resources)
  • Runtime monitoring (stdout, stderr, exit code, execution time)
  • SQLite audit history with last 20 executions shown
  • Optional Sarvam AI integration (graceful fallback)
  • Works fully offline (no API key required)
  • Developer-friendly Streamlit UI
  • Export execution reports as JSON

Tech Stack

Component Technology
Backend Python 3.11+, FastAPI, Pydantic
Sandbox Docker SDK for Python
Scanner Python ast module
Policy PyYAML
Database SQLAlchemy + SQLite
Frontend Streamlit
AI (optional) Sarvam AI REST API
Testing pytest

Setup

Prerequisites

  • Python 3.11 or higher
  • Docker Desktop (or Docker Engine) running
  • (Optional) Sarvam AI API key

Installation

# Clone the repository
git clone https://github.com/predictivemanish/saferun-ai.git
cd saferun-ai

# Create virtual environment
python -m venv venv
source venv/bin/activate      # Linux/macOS
venv\Scripts\activate         # Windows

# Install dependencies
pip install -r requirements.txt

# Build the sandbox Docker image
cd sandbox_image
docker build -t saferun-sandbox:latest .
cd ..

# Set environment variables (optional)
cp .env.example .env
# Edit .env if you have a Sarvam API key (otherwise leave empty)

# Initialize database (auto-creates saferun.db)
python -c "from backend.database import init_db; init_db()"

--

How to run?

  • Terminal 1 (Backend)
uvicorn backend.main:app --reload --host 0.0.0.0 --port 8000
  • Terminal 2 (Frontend)
streamlit run frontend/app.py

Usage

  1. Paste Python code into the editor.

  2. Click Scan Only to see static analysis results and risk level.

  3. Click Execute in Sandbox to run the code inside Docker.

  4. If the code is blocked, check the Override safety blocks checkbox to force execution (use with caution).

  5. View execution results, stdout/stderr, and execution time.

  6. Scroll down to see the execution history (last 20 runs).


Project Structure

saferun-ai/
├── README.md
├── requirements.txt
├── .env.example
├── docker-compose.yml
├── backend/
│   ├── __init__.py
│   ├── main.py
│   ├── config.py
│   ├── database.py
│   ├── models.py
│   ├── schemas.py
│   ├── scanner.py
│   ├── sandbox.py
│   ├── policy_engine.py
│   ├── audit.py
│   ├── explanations.py
│   ├── utils.py
│   └── policies/
│       └── default_policy.yaml
├── frontend/
│   ├── __init__.py
│   └── app.py
├── sandbox_image/
│   └── Dockerfile
├── tests/
│   ├── test_scanner.py
│   ├── test_policy.py
│   └── test_api.py
├── examples/
│   ├── safe_example.py
│   ├── dangerous_example.py
│   ├── timeout_example.py
│   └── network_example.py
├── tests/
│    ├── test_scanner.py

Disclaimer

Disclaimer
No sandbox is completely secure. Running untrusted code always carries residual risk. Always review AI-generated code before execution, even when using this tool. The authors are not liable for any damages arising from its use.

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

saferun_ai-1.0.0.tar.gz (24.7 kB view details)

Uploaded Source

Built Distribution

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

saferun_ai-1.0.0-py3-none-any.whl (23.1 kB view details)

Uploaded Python 3

File details

Details for the file saferun_ai-1.0.0.tar.gz.

File metadata

  • Download URL: saferun_ai-1.0.0.tar.gz
  • Upload date:
  • Size: 24.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for saferun_ai-1.0.0.tar.gz
Algorithm Hash digest
SHA256 544d662d46a45979cfcfa204bca9cf6dd7606efcbff385a0b5f58803281d2958
MD5 ab6a62f77b52d4173dd810b12dbb01fd
BLAKE2b-256 1d17dbaa9a09486fd7520e2570c4333d423f8526f7091a8aee4ad8fac7da212b

See more details on using hashes here.

File details

Details for the file saferun_ai-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: saferun_ai-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 23.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for saferun_ai-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6cb5c783f14dd222d2bb5df45444dd73907c1f6ea6662a9b4f1fdc7344a148b2
MD5 8d78dcd8003c997d0d115dfd628f20b4
BLAKE2b-256 b24db8b08f811de7ff5c1cbda11236d6849b48a93447a18c7b9d6bed73ce2a39

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