0

CCyberBattleSim

Fresh

ORS port of https://github.com/terranovafr/C-CyberBattleSim

Type
RL Env
Runtime
ORS
License
unknown
Size
350 tasks
Published
Jul 2026
Updated
Nov 2026

Cite

Notes

Only stored in your browser.

C-CyberBattleSim

OpenReward Environment

Description

An offensive attack-path-discovery environment for LLM agents. The agent starts out owning a single host inside a simulated enterprise network and must expand control across the rest of the network by chaining real-world exploits. Networks are procedurally generated from real data — Shodan service distributions, NVD CVEs, and MITRE ATT&CK outcome classification — and the task is framed as a partially-observable Markov decision process: hidden hosts must be discovered via reconnaissance before they can be attacked. Everything is fully simulated (an in-process networkx graph; no real hosts, no executable exploit code), and verification is programmatic against the simulator state. Ported from C-CyberBattleSim (INRIA / Université de Lorraine), which extends Microsoft CyberBattleSim.

Capabilities

  • Multi-step attack-path planning under partial observability
  • Reading per-host service / CVE / ATT&CK intelligence and choosing the right exploit and outcome
  • Reconnaissance-driven exploration — reveal hidden hosts before they can be targeted
  • Lateral movement and privilege escalation to take over remote hosts
  • Reasoning about firewalls, listening ports, privilege prerequisites, and probabilistic exploit success

Compute Requirements

No sandbox and no GPU. The vendored simulator is torch-free and runs the whole attacker simulation in-process over a networkx graph. Ships as a lightweight python:3.12-slim container and needs only a few hundred MB of RAM.

License

MIT. This is a port of C-CyberBattleSim (MIT, © 2025 Franco Terranova), which builds on Microsoft CyberBattleSim (MIT). Scenario content is derived from the project's public Shodan/NVD/ATT&CK-based generation database.

Tasks

350 procedurally-generated network scenarios, partitioned by a complexity score into three splits:

SplitCountComplexity
train299low (2.98–6.53)
validation24medium (6.54–6.73)
test27high (6.76–7.89)

The splits are strictly ordered by complexity with no overlap (train < validation < test), so the held-out splits are deliberately harder networks than training — a generalization test. Each task is a single network of 5–20 hosts with the control objective (gain ROOT over every reachable host) and a 100-step budget. Within a split, tasks are ordered easiest-first.

Reward Structure

Dense, per-step shaped reward emitted by the simulator (values below are for goal=control):

  • +25 per host newly revealed by Reconnaissance
  • +100 privilege escalation; +20 each for persistence, data collection, exfiltration, acquired visibility, and defense evasion
  • +3 × node value when a host is taken over, minus the exploit's cost
  • −2 × node value for Denial-of-Service (counterproductive under the control goal); invalid or blocked actions (firewall, wrong port, insufficient privilege, failed success roll) consume a turn and return a penalty with an explanation
  • +100 terminal bonus on reaching the goal

Episodes terminate on goal reached, defender eviction (if the optional defender is enabled), or the step budget being exhausted. Verification is fully programmatic — no LLM grader.

Data

Scenarios are generated offline and shipped in-repo under scenarios/<id>/network.pkl as embedding-stripped cyberbattle Model pickles (~72 MB total), with the complexity partition in scenarios/split.yaml. Generation uses the C-CyberBattleSim pipeline against its public scraped service/CVE database (Shodan + NVD + ATT&CK classifier); there are no API calls or regeneration at runtime — the server just loads the pickles.

Tools

  • observe — re-render the currently discovered network (owned hosts, discovered hosts, their services and known CVEs). Read-only; does not consume a turn.
  • list_actions — the structurally-valid moves from the current state: per owned host the local (source = target) CVE/outcome options, and per discovered host the remote CVE/outcome options.
  • attack(source, target, vulnerability, outcome) — execute one attacker action: exploit a CVE from an owned source host against a discovered target aiming for an ATT&CK outcome. Set target = source for a local exploit (e.g. PrivilegeEscalation, Reconnaissance). One call = one simulation step; returns the step reward and the updated observation.

Time Horizon

Multi-turn. A typical episode runs on the order of tens of tool calls (100-step budget); larger, more connected networks require more reconnaissance and lateral movement to fully own.

Environment Difficulty

Difficulty comes from partial observability (you must discover before you attack) combined with probabilistic exploit success, and scales with network size and connectivity along the train → validation → test complexity gradient. Additional difficulty knobs — a scripted defender (scan + reimage with detection probability) and non-zero firewall / detection / service-shutdown rates — are supported by the simulator and currently disabled; they can be enabled as harder task variants.

Other Environment Requirements

None. No API keys, secrets, or external services are needed at runtime.

Safety

The domain is offensive security, but the environment is entirely simulated: the agent only interacts with an in-process graph model of a network. It has no network access, no filesystem access, and touches no real hosts — and there is no executable exploit code, only references to CVE identifiers and ATT&CK outcome classes over synthetic topologies. The dual-use surface is limited to attack-path planning over generated graphs. The offensive framing is an approved, published MIT research setting used here for training and evaluation only.

Citations