BSides NYC 2025: Inside Cloud Attack Paths End-to-End Adversary Simulation

mvelazco 11 views 33 slides Oct 20, 2025
Slide 1
Slide 1 of 33
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33

About This Presentation

Adversaries map and navigate cloud attack paths by chaining misconfigurations, over-privileged principals, and exposed secrets in pursuit of privilege escalation and broader objectives. In this talk, we explore core attack primitives in Azure, Entra ID, and Microsoft 365, demonstrate how to simulate...


Slide Content

Inside Cloud Attack Paths:
End-to-End Adversary
Simulation
Mauricio Velazco
Bsides NYC 2025

#whoami

✘Security Research @ Microsoft

✘@mvelazco

✘github.com/mvelazc0

1

introduction


A cloud attack path is the chain
of steps an adversary follows by
compromising identities and
abusing legitimate
configurations to reach a goal

How Are Cloud Attack Paths created
✘Security Principals (who):

Users - App Registrations/ Service Principals -
Managed Identities

✘Permissions (what):

Direct Object Permissions - Entra ID Roles -
Azure RBAC - API Permissions - OAuth Scopes

✘Targets (where):

EntraID Tenants - Azure Subscriptions - Key
Vaults - Storage Accounts - Databases -
Exchange Online - OneDrive - SharePoint

How Are Cloud Attack Paths created
✘Security Principals (who):

Users - App Registrations/ Service Principals -
Managed Identities

✘Permissions (what):

Direct Object Permissions - Entra ID Roles -
Azure RBAC - API Permissions - OAuth Scopes

✘Targets (where):

EntraID Tenants - Azure Subscriptions - Key
Vaults - Storage Accounts - Databases -
Exchange Online - OneDrive - SharePoint
User
Bob

How Are Cloud Attack Paths created
✘Security Principals (who):

Users - App Registrations/ Service Principals -
Managed Identities

✘Permissions (what):

Direct Object Permissions - Entra ID Roles -
Azure RBAC - API Permissions - OAuth Scopes

✘Targets (where):

EntraID Tenants - Azure Subscriptions - Key
Vaults - Storage Accounts - Databases -
Exchange Online - OneDrive - SharePoint
User
Bob


PrivEsc
App
ACME

How Are Attack Paths created
✘Security Principals (who):

Users - App Registrations/ Service Principals -
Managed Identities

✘Permissions (what):

Direct Object Permissions - Entra ID Roles -
Azure RBAC - API Permissions - OAuth Scopes

✘Targets (where):

EntraID Tenants - Azure Subscriptions - Key
Vaults - Storage Accounts - Databases -
Exchange Online - OneDrive - SharePoint
User
Bob


PrivEsc
App
ACME
SP
acme-sp


RunsAs

How Are Attack Paths created
✘Security Principals (who):

Users - App Registrations/ Service Principals -
Managed Identities

✘Permissions (what):

Direct Object Permissions - Entra ID Roles -
Azure RBAC - API Permissions - OAuth Scopes

✘Targets (where):

EntraID Tenants - Azure Subscriptions - Key
Vaults - Storage Accounts - Databases -
Exchange Online - OneDrive - SharePoint
User
Bob


PrivEsc
App
ACME
SP
acme-sp
VMContri
butor


HasRole


RunsAs

How Are Cloud Attack Paths created
✘Security Principals (who):

Users - App Registrations/ Service Principals -
Managed Identities

✘Permissions (what):

Direct Object Permissions - Entra ID Roles -
Azure RBAC - API Permissions - OAuth Scopes

✘Targets (where):

EntraID Tenants - Azure Subscriptions - Key
Vaults - Storage Accounts - Databases -
Exchange Online - OneDrive - SharePoint
User
Bob


PrivEsc
App
ACME
SP
acme-sp
VMContri
butor


HasRole


RunsAs


CanExec
VM:
Gibson01

How Are Attack Paths created
✘Security Principals (who):

Users - App Registrations/ Service Principals -
Managed Identities

✘Permissions (what):

Direct Object Permissions - Entra ID Roles -
Azure RBAC - API Permissions - OAuth Scopes

✘Targets (where):

EntraID Tenants - Azure Subscriptions - Key
Vaults - Storage Accounts - Databases -
Exchange Online - OneDrive - SharePoint
User
Bob


PrivEsc
App
ACME
SP
acme-sp
VMContri
butor


HasRole


RunsAs


CanExec
VM:
Gibson01


CanRead
StoreA:
sensitive

Attack Primitives
✘Definition

A reusable capability (configuration, permission, or credential) that an adversary abuses within
an attack path to move laterally, escalate privileges or access data inside a tenant.

✘Examples

Service Principal Credential Injection: Abuse a permission (Entra ID Role or direct Owner
assignment) create client secrets or upload certifications for any app registration.

MailBox Access: Abuse the Graph Mail.Read Application permission to exfiltrate mailbox contents
via Microsoft Graph API.

KeyVault Secret Access: With Key Vault Contributor on the vault scope, modify access policies so
an a new identity can read secrets.

2

Provisioning Attack
Paths

Requirements
✘Security Principals (who):

Users - App Registrations/ Service Principals -
Managed Identities (Azure Resources)

✘Permissions (what):

Direct Object Permissions - Entra ID Roles -
Azure RBAC - API Permissions - OAuth Scopes

✘Targets (where):

EntraID Tenants - Azure Subscriptions - Key
Vaults - Storage Accounts - Databases -
Exchange Online - OneDrive - SharePoint

✘Leverages Python & Terraform to
automate the setup of EntraID
tenants & Azure subscriptions.

✘Creates random identities,
resources, assignments and
permissions.

✘Injects configurable attack
paths to enable attack path
research
BadZure
https://github.com/mvelazc0/BadZure

BadZure

✘Flexible
configuration
through a YAML
file.

Attack Path 1
User:
Bob


IsOwner
App:
Acme
SP:
Acme
Priv
Role
Adm


RunsAs


HasRole

Attack Path 2
User:
Alice


IsOwner
App:
Omni
SP:
Omni
AppRoleA
ssignmen
t.ReadWri
te.All


RunsAs


HasAPI

Attack Path 3
User:
Paul


HasKvCo
KV:
AppSec
App:
Atlas
Mail.Read


HasCred


HasAPI
SP:
Atlas


RunsAs

Attack Path 4
User:
Tom


CanExec
VM:
HR01
Managd
Identity
App:
Corex


Contains
SA:
CrtStor


CanRead






ContainCert


RunsAs
SP:
Corex


HasApi
Files.Read
All

Provisioning Attack Paths with BadZure

Demo 1

3

Navigating Attack Paths

msInvader

✘Adversary simulation tool
designed to automate the
execution of attack paths
against EntraID, M365 & Azure.

✘Leverages APIs like MS Graph,
EWS and ARM for comprehensive
simulations and technique
variations.
https://github.com/mvelazc0/msInvader

msInvader

✘Flexible
configuration
through a YAML
file.

Attack Path 1
User:
Bob


IsOwner
App:
Acme
SP:
Acme
Priv
Role
Adm


RunsAs


HasRole

Attack Path 1
compromised_user
enumerate_users
method: Graph
enumerate_groups
method: Graph







enumerate_applications
method: Graph
enumerate_directory_roles
method: Graph
add_application_secret
method: ARM







get_ms_client_token
assigh_app_role
method: Graph
create_user
method: Graph







assign_entra_role

Attack Path 3
User:
Paul


HasKvCo
KV:
AppSec
App:
Atlas
Mail.Read


HasCred


HasAPI
SP:
Atlas


RunsAs

Attack Path 3
compromised_user
enumerate_users
method: Graph
enumerate_groups
method: Graph







enumerate_arm_resources
method: ARM
enumerate_arm_role_assign
method: ARM
list_key_vaults
method: ARM







access_key_vault_item
method:
add_keyvault_access_policy
method: Graph
access_key_vault_item
method: Graph







get_ms_token_clientenumerate_arm_role_assign
method: ARM
ream_email

Navigating Attack Paths with MsInvader

Demo 2

https://github.com/mvelazc0/BadZure https://github.com/mvelazc0/msInvader

Resources
✘https://aadinternals.com/

✘https://dirkjanm.io/

✘https://medium.com/@_wald0

✘https://www.netspi.com/authors/karl-fosaaen/

✘https://specterops.io/wp-content/uploads/sites/3/2025/07/StateofAttackPathManagement
-2025-Web.pdf

✘https://cloudbrothers.info/en/azure-attack-paths/

✘https://github.com/SpecterOps/BloodHound/

thanks!

Inside Cloud Attack Paths:
End-to-End Adversary
Simulation
Mauricio Velazco
Bsides NYC 2025
Tags