Skip to content

Atomic vs Chained Paths

Every BadZure attack path has the same basic anatomy: an attacker starts from initial access, traverses one or more pivots, and reaches an objective. BadZure provides two ways to describe the pivots between that starting point and objective: an atomic path or a chained path.

The difference is how the path is authored. An atomic path asks BadZure to expand one named technique template. A chained path describes the graph explicitly from lower-level building blocks. Both forms are checked, reported, and deployed through the same workflow.

At a glance

Atomic path Chained path
What you provide A named technique and a few options The identities, resources, credentials, and relationships that form the graph
Main configuration key privilege_escalation: assignments:
How the path is assembled BadZure selects suitable entities and expands the technique into a complete path BadZure uses the graph you declare
Composition One of BadZure's seven built-in technique templates Any supported combination of primitives
Best suited to Focused labs for learning, exercising, or varying one supported technique Precise scenarios, named entities, and custom multi-stage paths
Authoring effort Lower Higher, with more control

Atomic paths

An atomic path describes the attack at a high level. You select one of BadZure's seven built-in privilege-escalation techniques, such as KeyVaultSecretTheft or ApplicationOwnershipAbuse, and configure its relevant options. BadZure then finds suitable identities and resources in the baseline and generates the relationships needed to make the path possible.

The defining field is privilege_escalation.technique:

attack_paths:
  key_vault_to_admin:
    initial_access:
      vector: compromised_credential
      principal_type: user
    privilege_escalation:
      technique: KeyVaultSecretTheft
      assignment_type: direct
    objective:
      entra_role: 62e90394-69f5-4237-9190-012177145e10

Atomic paths are useful when a built-in technique already represents the behavior you want to explore and the exact identities chosen for the path are not important. The available templates and their variants are listed in the technique catalog.

Chained paths

A chained path describes the attack graph directly. Instead of selecting a named technique, you declare the identities and resources involved and connect them with primitives such as application ownership, group membership, Entra roles, Azure RBAC, credentials, and stored data.

The defining field is assignments:. It replaces privilege_escalation:; the two forms cannot be used together on the same path.

This minimal chained path starts with a compromised user who owns an application. The attacker can add a credential to that application, authenticate as its service principal, and inherit its Global Administrator role:

attack_paths:
  owned_app_to_admin:
    objective:
      capability: entra_role
      role: "Global Administrator"
    initial_access:
      method: compromised_identity
      principal_ref: alice
    identities:
      users: [{ ref: alice }]
      applications: [{ ref: admin-app }]
    assignments:
      - id: a1
        type: app_ownership
        principal_ref: alice
        app_ref: admin-app
      - id: a2
        type: entra_role
        principal_ref: admin-app
        role: "Global Administrator"

Here, nothing is selected from the baseline: alice, admin-app, their ownership relationship, and the application's role are all declared explicitly.

This explicit form gives you control over each participant and relationship. It can model a path that crosses between the identity and infrastructure planes several times, uses stable named entities for a training narrative, or combines behaviors that no single built-in template represents. See Chained Paths and Primitives for an interactive example.

Atomic and chained do not describe path length

An atomic path can contain several attacker actions. For example, a managed identity path can include taking control of a host, acting as its managed identity, reading a stored credential, and authenticating as another principal. It is atomic because all those actions were generated from one named template.

A chained path does not have to be long or combine several named techniques. It can explicitly reproduce a single Key Vault theft or define a much longer path. It is chained because the graph is authored from primitives rather than selected from the technique catalog.

Which one should you use?

Use an atomic path when one of the seven templates describes the behavior you want and you want BadZure to assemble the required entities and relationships.

Use a chained path when the exact graph matters: you need specific identities or resources, several escalation mechanisms, a deterministic training scenario, or a path the built-in templates cannot express.

Whichever form you choose, the next steps are the same: run check to verify that the objective is reachable, use report to inspect the posture and attack graphs, and then use build to deploy the lab. Continue with Author an Atomic Path or Author a Chained Path for the complete workflow.