| --- |
| title: redteampentestlab |
| emoji: "🛡️" |
| colorFrom: red |
| colorTo: yellow |
| sdk: docker |
| app_port: 8000 |
| pinned: false |
| --- |
| |
| # redteampentestlab |
|
|
| redteampentestlab is an OpenEnv-compatible reinforcement learning environment for automated penetration testing simulation. The agent must solve realistic pentest chains by executing actions in the correct order and collecting CTF-style flags. |
|
|
| ## Environment Description |
|
|
| The environment exposes a FastAPI server through OpenEnv and simulates three pentesting missions: |
|
|
| 1. Easy: Web Application Recon |
| 2. Medium: SQLi to RCE |
| 3. Hard: APT Multi-Stage Compromise |
|
|
| Each mission has: |
|
|
| - A target host or network |
| - A required ordered action chain |
| - Step-level rewards for partial progress |
| - A completion reward and a hidden flag |
|
|
| The reward design is shaped for RL training signals and remains strictly between 0 and 1. |
|
|
| ## Action Space |
|
|
| The action model accepts one of the following values: |
|
|
| - scan |
| - enumerate |
| - exploit |
| - escalate |
| - c2 |
| - cleanup |
|
|
| ## Observation Space |
|
|
| Each step returns an observation with: |
|
|
| - target_ip: current host or subnet under assessment |
| - current_state: BRIEFING, IN_PROGRESS, SUCCESS, INVALID, ORDER_VIOLATION, or REPEAT |
| - output: realistic pentest tool-style output for the executed action |
| - difficulty: easy, medium, or hard |
| - reward: scalar reward signal (strictly 0 < reward < 1) |
| - done: episode termination flag |
|
|
| ## State Space |
|
|
| Environment state includes: |
|
|
| - episode: episode counter |
| - task: active task name |
| - progress: normalized task completion value between 0.0 and 1.0 |
|
|
| ## Setup Instructions |
|
|
| ### Option A: pip |
|
|
| ```bash |
| pip install -r requirements.txt |
| uvicorn server.app:app --host 0.0.0.0 --port 8000 |
| ``` |
|
|
| ### Option B: uv |
|
|
| ```bash |
| uv sync |
| uv run uvicorn server.app:app --host 0.0.0.0 --port 8000 |
| ``` |
|
|
| ### Validate OpenEnv |
|
|
| ```bash |
| openenv validate |
| openenv validate --url http://localhost:8000 --json --verbose |
| ``` |
|
|
| ### Validate Decimal Bounds |
|
|
| ```bash |
| python task_validation.py |
| ``` |
|
|
| ## Inference and Grading |
|
|
| Run baseline inference: |
|
|
| ```bash |
| python inference.py |
| ``` |
|
|
| Run grader: |
|
|
| ```bash |
| python inference.py > out.txt && python grader.py out.txt |
| ``` |
|
|
| Inference also writes a structured pentest report to pentest_report.json. |
| |
| ## Environment Variables |
| |
| - API_BASE_URL (default: https://api.openai.com/v1) - API endpoint for the LLM |
| - MODEL_NAME (default: o3-mini) - Model identifier used for inference (OpenAI o3-mini) |
| - OPENAI_API_KEY (required) - OpenAI API key; if not set, falls back to HF_TOKEN |
| - HF_TOKEN (required if OPENAI_API_KEY not set) - Alternative API key environment variable |
|
|
| **Note:** At least one of OPENAI_API_KEY or HF_TOKEN must be set, or the inference will fail at startup. |
| |
| ## Docker |
| |
| ```bash |
| docker build -t redteampentestlab . |
| docker run -p 8000:8000 redteampentestlab |
| ``` |